Vous êtes sur la page 1sur 8

Chapitre 3 : Gestion de la mémoire

• Définition
La mémoire centrale des ordinateurs est la mémoire accessible directement par le processeur.
Cette mémoire contient à la fois les instructions de programmes et les données manipulées par
ces programmes, que ces programmes soient des programmes utilisateurs ou des programmes
systèmes.

• Les responsabilités du gestionnaire de la mémoire


• Gestion de la correspondance entre mémoire logique/physique et les références
mémoire des tâches
• Déterminer quelle processus charger dans l’espace mémoire disponible.
• Allouer et désallouer la mémoire des processus qui constituent le système
• Supporter l’allocation et la désallocation dynamiques des requêtes du code (au
sein d’un processus) exemple: malloc& free.
• Contrôler et gérer l’usage de la mémoire par les processus
• Assurer la cohérence des caches (pour les systèmes munis de mémoire cache).
• Assurer la protection de l’espace d’adressage du processus
On peut subdiviser les systèmes de gestion de la mémoire en deux catégories :
• Les systèmes qui peuvent déplacer les processus en mémoire secondaire pour
trouver de l’espace (va-et-vient) ;
• Les systèmes qui n’utilisent pas la mémoire secondaire.
• Gestion de la mémoire sans va-et-vient ni pagination
Partitions de taille fixe
La mémoire est découpée en partitions à l'initialisation du système. Les partitions peuvent être
de tailles inégales.
Un programme occupe toute sa partition ; la partie de mémoire inutilisée à la fin est perdue
pendant la durée d'exécution (Fragmentation interne). Le problème principal est le choix de la
partition à allouer.
Partitions de tailles variables
Au lancement du système, on crée une seule zone libre de taille maximale.
Lorsqu'on charge un programme, on le place dans une zone libre suffisante, et on lui alloue
exactement la mémoire nécessaire. Le reste devient une nouvelle zone libre.
Lorsqu'un programme s'achève, sa partition redevient libre (Fragmentation externe), et peut
éventuellement grossir une zone libre voisine.
Il n'y a donc pas de fragmentation à l'intérieur des partitions; mais la gestion est plus difficile
et plus coûteuse.
7- Fragmentation et compactage
Fragmentation
La partie d'une partition non utilisée par un processus est nommée fragmentation interne.
Ceci est dû au fait qu'il est très difficile que tous les processus rentrent exactement dans la taille
de la partition. Les partitions qui ne sont pas utilisées, engendrent la fragmentation externe.

Compactage
On peut réunir les espaces inutilisés en une seule partition en déplaçant tous les processus vers
le bas, comme le fait le compactage de mémoire montré sur la figure suivante. Cette méthode
n'est généralement pas utilisée car elle requiert beaucoup de temps processeur. En revanche,
elle est utilisée sur les grands ordinateurs car ils possèdent des circuits spécialisés.

• Gestion avec recouvrement (va-et-vient), sans pagination


Dans un système qui peut déplacer les processus sur le disque quand il manque d’espace, le
mouvement des processus entre la mémoire et le disque (va-et-vient) risque de devenir très
fréquent, si on n’exploite pas au mieux l’espace libre en mémoire principale. Sachant que les
accès au disque sont très lents, les performances du système risquent alors de se détériorer
rapidement. Il faut alors exploiter au mieux l’espace libre en mémoire principale, en utilisant
un partitionnement dynamique de la mémoire.
Le fait de ne plus fixer le partitionnement de la mémoire rend plus complexe la gestion de
l’espace libre. Celui-ci doit cependant permettre de trouver et de choisir rapidement de la
mémoire libre pour l’attribuer à un processus. Il est donc nécessaire de mettre en œuvre des
structures de données efficaces pour la gestion de l’espace libre.
- Gestion de la mémoire par tables de bits

La mémoire est divisée en unités (quelques mots mémoire à plusieurs kilo-octets), à chaque
unité on fait correspondre dans une table de bits :
– la valeur 1 si l’unité mémoire est occupée ;
– la valeur 0 si l’unité mémoire est libre.

Inconvénient : Lorsqu’on doit ramener un processus de k unités, le gestionnaire de la mémoire


doit alors parcourir la table de bits à la recherche de k zéros consécutifs. Cette technique est
rarement utilisée car la méthode de recherche est lente

- Gestion de la mémoire par liste chaînée

Pour mémoriser l'occupation de la mémoire, on utilise une liste chaînée des segments libres et
occupés. Un segment est un ensemble d'unités d'allocations consécutives. Un élément de la liste
est composé de quatre champs qui indiquent :
• L'état libre ou occupé du segment.
• L'adresse de début du segment.
• La longueur du segment.
• Le pointeur sur l'élément suivant de la liste.
Les listes peuvent être organisées en ordre de libération des zones, ou en ordre croissant ou
décroissant des tailles, ou en ordre des adresses de zones
Un exemple est décris par la figure suivante :
4- Libération d'espace
Cet exemple montre que quatre cas peuvent se présenter lors de la libération de l'espace
occupé par un processus X.
1er cas : Modifier l'indicateur de l'état du segment (il passe à libre)

2ème cas : Fusionner les deux segments (il passe à libre).

3ème cas : Modifier l'indicateur de l'état du segment (il passe à libre).


Fusionner les deux segments

4ème cas : Modifier l'indicateur de l'état du segment (il passe à libre).


Fusionner les trois segments.

5- Allocation d'espace
L'allocation d'un espace libre pour un processus peut se faire suivant quatre stratégies
principales:

1ère zone libre (first fit)


Dans le cas du « premier ajustement », on recherche le premier bloc libre de la liste qui peut
contenir le processus qu'on désire charger. La zone est fractionnée en deux parties : la première
contient le processus et la seconde est l'espace inutilisé (s'il n'occupe pas toute la zone). 
Inconvénient : Fragmentation externe (Segments libres entre processus).

Zone libre suivante


Il est identique au précédent mais il mémorise en plus la position de l'espace libre trouvé. La
recherche suivante commencera à partir de cette position et non à partir du début.

Meilleur ajustement (best fit)


On cherche dans toute la liste la plus petite zone libre qui convient. On évite de fractionner
une grande zone dont on pourrait avoir besoin ultérieurement. Cet algorithme est plus lent que
le premier. Il a tendance à remplir la mémoire avec de petites zones libres inutilisables.

Plus grand résidu ou pire ajustement (worst fit)


Il consiste à prendre toujours la plus grande zone libre pour que la zone libre restante soit la
plus grande possible. Les simulations ont montré que cette stratégie ne donne pas de bons
résultats.

- Allocation d'espace de va-et-vient

Sur le disque, la zone de va-et-vient d'un processus peut être allouée à la demande dans la zone
de va-et-vient générale. Quand un processus est déchargé de la mémoire centrale, on lui
recherche une place. Les places de va-et-vient sont gérées de la même manière que la mémoire
centrale.
La zone de va-et-vient d'un processus peut aussi être allouée une fois pour toute au début de
l'exécution. Lors du déchargement, le processus est sûr d'avoir une zone d'attente libre sur le
disque.

Figure : Espace de va-et-vient


Le système de va-et-vient, s'il permet de pallier le manque de mémoire nécessaire à plusieurs
processus, n'autorise cependant pas l'exécution de programmes de taille supérieure à celle de la
mémoire centrale. Une solution consiste à permettre à l'utilisateur de diviser son programme en
segments (segments de recouvrement ou overlays en anglais) et à charger un segment en
mémoire. Le segment 0 s'exécute en premier. Lorsqu'il se termine il appelle un autre segment
de recouvrement.
Cette solution n'est pas intéressante, car c'est le programmeur qui doit se charger du découpage
de son programme en segments de recouvrement.
Une autre solution consiste à utiliser des techniques utilisent la notion de la mémoire virtuelle.

• Mémoire virtuelle
La taille d'un processus doit pouvoir dépasser la taille de la mémoire physique disponible, même
si l'on enlève tous les autres processus. En 1961, J. FOTHERINGHAM proposa le principe de
la mémoire virtuelle : le SE conserve en mémoire centrale les parties utilisées des processus et
stocke, si nécessaire, le reste sur disque. Mémoire virtuelle et multiprogrammation se
complètent bien : un processus en attente d'une ressource n'est plus conservé en MC, si cela
s'avère nécessaire.
La mémoire virtuelle fait appel à deux mécanismes : segmentation ou pagination. Sans recours
à la mémoire virtuelle, un processus est entièrement chargé à des adresses contiguës ; avec le
recours à la mémoire virtuelle, un processus peut être chargé dans des pages ou des segments
non contigus.

4- La pagination

L'espace d'adressage d'un processus est divisé en petites unités de taille fixe appelées pages. La
MC (mémoire centrale) est elle aussi découpée en unités physiques de même taille appelées
cadres.
Les échanges entre MC et disques ne portent que sur des pages entières. De ce fait, l'espace
d'adressage d'un processus est potentiellement illimité (limité à l'espace mémoire total de la
machine). On parle alors d'adressage virtuel.
Pour un processus, le système ne chargera que les pages utilisées. Mais la demande de pages à
charger peut être plus élevée que le nombre de cadres disponibles. Une gestion de l'allocation
des cadres libres est nécessaire.
Dans un SE sans mémoire virtuelle, la machine calcule les adresses physiques en ajoutant le
contenu d'un registre de base aux adresses relatives contenues dans les instructions du
processus. Dans un SE à pagination, un sous-ensemble inséré entre l'UC et la MC, la MMU
(Memory Management Unit ou unité de gestion de la mémoire) traduit les adresses virtuelles
en adresses physiques.
La MMU mémorise :
- les cadres physiques alloués à des processus (sous forme d'une table de bits de présence)
- les cadres mémoire alloués à chaque page d'un processus (sous forme d'une table des pages)
On dira qu'une page est mappée ou chargée si elle est physiquement présente en mémoire.

Dans l'exemple précédent, les pages ont une taille de 4 Ko. L'adresse virtuelle 12296 correspond
à un déplacement de 8 octets dans la page virtuelle 3 (car 12296 = 12288 + 8 et 12288 =
12*1024). La page virtuelle 3 correspond à la page physique 2. L'adresse physique correspond
donc à un déplacement de 8 octets dans la page physique 2, soit : (8*1024) + 8 = 8200.
Par contre, la page virtuelle 2 n'est pas mappée. Une adresse virtuelle comprise entre 8192 et
12287 donnera lieu à un défaut de page. Il y a défaut de page quand il y a un accès à une adresse
virtuelle correspondant à une page non mappée. En cas de défaut de page, un déroutement se
produit et le processeur est rendu au SE. Le système doit alors effectuer les opérations suivantes
:
• déterminer la page à charger
• déterminer la page à décharger sur le disque pour libérer un cadre
• lire sur le disque la page à charger
• modifier la table de bits et la table de pages
Structure de la Table de pages
Chaque entrée de la Table de pages est composée de plusieurs champs, notamment :
▪ Le bit de présence.
▪ Le bit de référence (R).
▪ Les bits de protection.
▪ Le bit de modification (M).
▪ Le numéro de cadre correspondant à la page.
5- La segmentation

Dans cette solution, l'espace d'adressage d'un processus est divisé en segments, générés
à la compilation. Chaque segment est repéré par son numéro S et sa longueur variable
L. Un segment est un ensemble d'adresses virtuelles contiguës.
Contrairement à la pagination, la segmentation est "connue" du processus : une adresse
n'est plus donnée de façon absolue par rapport au début de l'adressage virtuel; une
adresse est donnée par un couple (S, d), où S est le n° du segment et d le déplacement
dans le segment, d
[0, L [.
Pour calculer l'adresse physique, on utilise une table des segments :

B : adresse de base (adresse physique de début du segment) ; L : longueur du segment


ou limite ; p : protection du segment
L'adresse physique correspondant à l'adresse virtuelle (S, d) sera donc B + d, si d <= L

6- La segmentation paginée

La taille d'un segment peut être importante, d'où un temps de chargement long qui peut
en résulter. La pagination des segments peut être une solution.

Vous aimerez peut-être aussi