220 - Mémoire des processus Flashcards
Le SE gère l’organisation de la mémoire
- Le SE est responsable de la cohérence et du nettoyage de la mémoire de l’ordinateur
- La gestion effective de la mémoire dépend du SE et des capacités matérielles
Un processus ne voit que son propre espace mémoire
- Accéder à un espace qui n’est pas le sien est interdit
- Tout est autorisé dans son espace mémoire
→ Peut corrompre ses propres données en mémoire (bogues)
→ Mais ne peut corrompre les autres processus
4 segments mémoire principaux
- Code (text): le code machine du programme
- Données statiques (initialisées et non initialisées)
- Tas (qui croît vers le bas)
- Pile (qui croît vers le haut)
Segments extra
Extra
* Bibliothèques (code et données)
* Piles supplémentaires (threads)
* Mémoire anonyme et projection de fichiers
* Etc.
Fonctionnement de la pile
On empile
* Des cadres d’exécution fonctionnels (stackframe)
Gestion programmative
Le programme décide des allocations et des désallocations
Les langages fournissent des mécanismes
* Fonctions bibliothèque. Ex. malloc(3) et free(3) en C
* Mots clés. Ex. new et delete en C++
* Ramasse-miettes. Ex. Java
Allocation (et désallocation) dynamique
- Mémoire réservée quand elle est nécessaire
- Et libérée quand elle ne l’est plus
→ Contient les données importantes des vrais programmes
Contenu de la pile
- Les variables automatiques (variables locales)
- Les paramètres des fonctions
- La place pour les valeurs de retour
- Des valeurs pour la gestion des appels de fonctions
(adresse de retour, base de pile, etc.) - Taille fixée (8Mo pour Linux) mais modifiable par ulimit (bash),
prlimit(1), setrlimit(2) - Contient aussi les arguments du programme (argv)
- Et les variables d’environnement (environ(7))
Appels système pour demande d’espace mémoire
brk(2) et mmap(2)
Contenu des programmes exécutables (binaires)
- Code en langage machine
- Données binaires
- Métadonnées pour chargement et édition de lien (entre autres)
Format des exécutables et bibliothèques dynamiques
- Unix (multi-plateforme): ELF (Executable and Linking Format) pour exécutables et .so
- Windows: PE (Portable Executable) pour .exe et .dll
Initialisation en mémoire (chargement)
- Provient du fichier binaire (presque tel quel)
code et données initialisés - Réservé par le système d’exploitation (et initialisé à 0)
données non initialisées (BSS), tas et pile (avec argv et env)
Qui décide de la vraie organisation de la mémoire?
- Compilateur C, éditeur de liens, éditeur de lien dynamique
- Peuvent décider d’organiser l’exécutable et la mémoire de
nombreuses façons
Droits de la mémoire
- Les zones mémoires ont des droits
- Lecture (r), écriture (w), exécution (x)
exécution = avoir compteur ordinal dessus - Configuré par le système d’exploitation et par l’appel système mprotect(2)
Droits habituels des segments
Droits habituels des segments
* Code machine: r-x
* Données statiques en lecture seule: r–
* Données statiques en lecture écriture: r-w * Tas: rw-
* Pile: rw-