-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathOS_Gestion_memoire.theory.txt
38 lines (29 loc) · 2.53 KB
/
OS_Gestion_memoire.theory.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
┏━━━━━━━━━━━━━━━━━━━━━┓
┃ GESTION MEMOIRE ┃
┗━━━━━━━━━━━━━━━━━━━━━┛
┌───────────────────┐
│ ADDRESS SPACE │
└───────────────────┘
Chaque processus a un "adress space" précis, qui correspond aux zones mémoire disponibles via les pages qu'il peut adresser, en fonction de :
- ses privilèges
- les segments registers actuels
- les page table actuelles
Une page particulière peut :
- être propre au adress space d'un seul processus
- appartenir au adress space de plusieurs processus, et donc être partagée
Si plusieurs segments de code de même exécutable ou shared library sont lancés : un seul segment sera en fait alloué, et il sera shared. Utilisation de la même page par plusieurs processus différents :
- shared library
- fichier lecteur seul lu par plusieurs processus
Le adress space de chaque user process est séparé en deux :
- une partie utilisateur (pages accessibles via privilèges utilisateur)
- une partie noyau (pages accessibles via privilèges superuser), shared par tous les processes.
Sous Linux, les adresses virtuelles des pages du kernel == adresses physiques + une constante ("identity mapping"), ce qui permet aux syscalls de savoir où est le kernel.
┌───────────┐
│ SLABS │
└───────────┘
Les slabs font partie de la gestion de la mémoire virtuelle (et non physique, comme pour segmentation et pagination) d'un OS : seules les adresses virtuelles sont considérées.
Un slab est un morceau de mémoire virtuelle allouée de taille % PAGE_SIZE (occupe physiquement 1 ou plusieurs pages) :
- permet d'allouer des éléments de taille < PAGE_SIZE : il peut en effet être consacré à un type particulier (par exemple un cache d'inode de 19 octets), auquel cas il sera une sorte de tableau remplis par ce type.
- permet d'allouer des éléments de taille > PAGE_SIZE : car peut occuper plusieurs pages de mémoire virtuelle contigue (par forcément physique contigue)
Un cache est un ensemble de slabs.
Pour connaître les slabs sous Linux : cat /proc/slabinfo