Vous êtes sur la page 1sur 6

Université de Blida 1 Système d’exploitation

Département d’informatique 2ème année LMD

CHAPITRE 4 : GESTION DE LA MEMOIRE

1. Introduction :
Tout processus existant dans le système a besoin d'espace mémoire pour y charger son programme
et ses données. Car le programme d'un processus ne peut être exécuté que s'il est chargé en
mémoire centrale (principale). Le processeur prélève les instructions à exécuter à partir de la
mémoire centrale.

2. Définition
Une mémoire est un circuit permettant d’enregistrer, de conserver et de restituer des informations.
Elle se présente sous la forme d’un ensemble de cases. Chaque case possède une adresse et peut
contenir un mot de données d’une longueur m qui est toujours une puissance de 2.

3. Adresse relative et adresse absolue


Au moment de la compilation, le compilateur (ou l’assembleur) génère des adresses relatives
(appelées aussi logiques) comptées à partir de 0. Ces adresses relatives sont comprises entre 0 et
MAX-1. MAX étant la taille du programme exécutable résultat de la compilation. Ceci signifie, a priori,
qu’un programme exécutable doit être chargé à l’adresse 0 de la mémoire centrale pour pouvoir
s’exécuter.
En réalité, l’adresse de chargement d’un processus ne peut être connue qu’au moment du
chargement. Lors du chargement, le système d’exploitation se charge de trouver une (ou plusieurs)
zone mémoire libre suffisamment grande pour pouvoir "loger" le processus à charger. Les adresses
occupées par le processus sont appelées adresses absolues (ou aussi physiques).
Au moment de l’exécution, et à chaque accès à la mémoire centrale, les adresses relatives
manipulées par le processus sont transformées en adresses absolues. Cette transformation est l’une
des fonctions prises en charge par le système d’exploitation.
La conversion entre une adresse logique en une adresse physique est réalisée par la MMU (Memory
Management Unit) ou unité de gestion mémoire, dispositif matériel.

Figure 1: MMU
4. Gestion de la mémoire
C'est un module système dont la fonction est de gérer la mémoire principale. Il doit garder en
permanence des informations concernant l'espace libre et occupé de la mémoire. Le gestionnaire
alloue de la mémoire aux processus qui en ont besoin et récupère la mémoire libérée par un
processus. La mémoire principale étant limitée, le gestionnaire ne peut pas charger tous les
processus en mémoire centrale. Pour satisfaire les besoins des processus, le gestionnaire doit
décharger certains programmes de la mémoire principale et charger d'autres programmes à partir du
disque. Il est à noter que les programmes déchargés de la mémoire principale sont sauvegardés sur

1/6
Université de Blida 1 Système d’exploitation
Département d’informatique 2ème année LMD

disque (mémoire secondaire ou auxiliaire). Les principales fonctions d'un gestionnaire de la mémoire
sont les suivantes :
 Allouer / libérer l'espace de la mémoire principale,
 Charger / décharger (sauvegarder) les programmes des processus,
 Protéger les programmes et les données des processus,
 Partager des programmes et/ou des données entre plusieurs processus.

4.1. Allocation contiguë de la mémoire


L’allocation contiguë consiste à trouver en mémoire centrale un espace mono-bloc suffisamment
large pour pouvoir charger le processus. Celui-ci est donc chargé en un seul bloc (de manière
continu) en mémoire centrale.
Dans ce type d’allocation, la transformation adresse relative en une adresse absolue est simple et
peu coûteuse, elle se résume en une addition.

4.1.1 Cas de la monoprogrammation : Partition unique


Dans un système monoprogrammé, la mémoire centrale est découpée en deux parties: une partie est
réservée au système et le reste est attribué au processus.

Figure 2: Système monoprogrammé.


Un registre spécial appelé registre de base (limite) est utilisé pour pointer sur l’adresse de
chargement du processus actif. Cette adresse fait donc partie du contexte du processus.

4.1.2 Cas de multiprogrammation


Dans un système multiprogrammé, on découpe la mémoire centrale en plusieurs parties, de façon à
mettre plusieurs processus en mémoire au même moment, de telle sorte à avoir plusieurs processus
candidats au processeur. Le problème dans ce cas est de savoir comment organiser et allouer la
mémoire.

A. Partition multiples fixes :


Une solution simple consiste à diviser la mémoire en n partitions fixes, de tailles pas nécessairement
égales (méthode MFT [Multiprogramming with a Fixed number of Tasks ] )
Il existe deux méthodes de gestion :
- On crée une file d'attente par partition. Chaque nouveau processus est placé dans la file
d'attente de la plus petite partition pouvant le contenir.
Inconvénients :
 On perd en général de la place au sein de chaque partition
 Il peut y avoir des partitions inutilisées (leur file d'attente est vide)

2/6
Université de Blida 1 Système d’exploitation
Département d’informatique 2ème année LMD

Figure 3: Une file d'attente par partition.


- On crée une seule file d'attente globale. Il existe deux stratégies :
- dès qu'une partition se libère, on lui affecte le premier processus de la file qui peut y tenir.
Inconvénient : on peut ainsi affecter une partition de grande taille à une petite tâche et perdre
beaucoup de place
- dès qu'une partition se libère, on lui affecte le plus grand processus de la file qui peut y tenir.
Inconvénient : on pénalise les processus de petite taille.

Figure 4: Une file d'attente globale.


Remarques :
• Le nombre et la taille des partitions sont fixés à l'avance (lors du chargement du système).
• Les partitions peuvent être égales ou non.
• La choix du nombre et de la taille des partitions dépend du niveau de multiprogrammation voulu.
• On peut avoir une file par partition ou une file globale.
• L’unité d’allocation est une partition.
Inconvénient :
Le principal inconvénient de cette technique est le fragmentation Interne de la mémoire principale.
Fragmentation interne est causée par la partie d'une partition non utilisée par un processus. On dit
qu'il y a fragmentation interne quand un programme de taille n est chargé dans une partition de
taille m avec m >n :
Fragmentation interne = taille de la partition - taille du programme ou (m - n).

B. Partitions multiples variables :


Le problème avec la technique des partitions fixes est de déterminer les tailles des partitions qui
minimisent la fragmentation interne de la mémoire principale. La solution à ce problème consiste à
utiliser des partitions dont les tailles varient dynamiquement. Au début, toute la mémoire est
disponible (libre) pour les processus utilisateurs. Elle est constituée d'une seule partition; les
partitions sont créées au fur et à mesure de l'exécution des processus.

3/6
Université de Blida 1 Système d’exploitation
Département d’informatique 2ème année LMD

Inconvénient :
Cette forme d'allocation conduit éventuellement à l'apparition de trous trop petits pour les allouer à
d’autres processus : c'est la fragmentation externe.
Exemple : Soit un programme qui demande un espace mémoire de 50 unités et une mémoire avec 2
partitions libres de taille respective 30 et 40 unités.
La requête de ce programme ne peut pas être satisfaite, car il n'existe pas de partition libre dont Occupée
la taille est supérieure ou égale à la taille demandée par le programme. Libre : 30
On dit qu'il y a fragmentation externe, si un programme de taille n est en attente de la mémoire Occupée
alors qu'il existe un espace mémoire total suffisant pour satisfaire la requête (demande) du Occupée
programme mais cet espace n'est pas contigu : Il est constitué de plusieurs petites partitions (la
Libre : 40
somme des tailles des partitions libres >= taille du programme).
Une solution consiste à compacter les zones allouées en les déplaçant, toutes, vers une extrémité
de la mémoire (généralement en bas). Ce qui fait apparaître de l'autre bout une zone libre unique
dont la taille est la somme des tailles des zones libres existantes. Le compactage nécessite beaucoup
de temps processeur : il n'est pas très recommandé.

C. Etat de la mémoire :
Gestion par table de bits
La mémoire est divisée en unités d’allocation dont la taille peut varier de quelques mots à plusieurs
Ko. A chaque unité, on fait correspondre un bit dans une Table de bits ou bitmap qui est mis à 0 si
l’unité est libre et à 1 si elle est occupé .

Figure 5 (a) Une partie de la mémoire occupée par 5 processus (b) Table de bits correspondante (c) Liste chaînée

Gestion par liste chainée :


On peut représenter la mémoire par une liste chaînée de structures dont les membres sont : le type
(libre ou occupé), l’adresse de début, la longueur, et un pointeur sur l’élément suivant.
Exemple précédent :
H pour segment libre
P pour segment occupé

Libération d’un segment : 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).

4/6
Université de Blida 1 Système d’exploitation
Département d’informatique 2ème année LMD

- 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

Figure 6: Exemple de Libération d'un segment

D. Algorithme d’allocation de la mémoire


L’allocation d’un espace libre pour un processus peut se faire suivant trois stratégies principales : : le
« premier ajustement » ou first fit, le « meilleur ajustement » ou best fit et le « pire ajustement » ou
worst fit
1)First-fit
Allouer la première partition dont la taille est suffisamment grande. La recherche s'arrête dés que
l'on trouve une zone libre de taille assez grande.
La recherche peut commencer au début de la liste ou bien là où la dernière recherche a fini
(algorithme next-fit). La liste est ordonnée selon les adresses croissantes.
2)Best-fit
Allouer la partition dont la taille est la plus proche de la taille demandée. La recherche est effectuée
dans toute la liste, à moins que la liste soit ordonnée par ordre croissant des tailles des partitions
libres.
3)Worst-fit
Il consiste à prendre la plus grande zone libre disponible pour que la zone libre restante soit la plus
grande possible. La recherche est effectuée dans toute la liste, à moins que la liste soit ordonnée par
ordre décroissant des tailles des partitions libres.

Remarque :
Des simulations montrent que, par rapport au taux d'utilisation de la mémoire, la première
technique est meilleure que les autres.
Le taux d'utilisation de la mémoire est meilleur en partition variable qu'en partition fixe.

F. Gestion de la mémoire par subdivision en zone siamoises


Dans le schéma de gestion un système de zones siamoises (par subdivision ou Buddy system), la
mémoire est allouée en unités qui sont des puissances de 2. Lorsque la mémoire doit être allouée à
un processus, ce dernier reçoit une unité de mémoire qui est la plus petite puissance de 2 supérieure
à la taille du processus. S’il n’existe aucune unité de cette taille, la plus petite allocation disponible
supérieure au processus est divisée en deux unités égales (siamoises). La division se poursuit avec
l’une des unités siamoisesjusqu’à ce qu’une unité d’allocation de la taille appropriée soit créée.

5/6
Université de Blida 1 Système d’exploitation
Département d’informatique 2ème année LMD

4.2 ALLOCATION NON-CONTIGUE :


4.2.1 Pagination
La mémoire est divisée en n blocs de taille fixe appelés cadres de page. Les processus sont divisés en
blocs appelés pages de la même taille que les cadres de pages. Les pages du processus sont chargées
à des pages libres de la mémoire non nécessairement contigus.
On conserve l’emplacement des pages dans une table de pages :

15
14
Table de pages
13
12
11
10
3
9 0 14
2 8
1 7
1 4
0 6 2 8
Processus 5
4 3 12
3
2
1
0
Mémoire physique
Figure 7: Pagination.

Lorsqu’un processus est à l’état actif et qu’il désire accéder à la mémoire centrale, le processus
génère toujours une adresse relative. Cette adresse est transformée en un couple (n, d) où n est le
numéro de la page et d est le déplacement dans cette page. Le numéro de page est utilisé comme
indexe dans la table des pages. La table des pages contient l’adresse de base de chaque page dans la
mémoire physique. Cette adresse de base est combinée au déplacement de page pour définir
l’adresse mémoire physique.

4.2.2 La Segmentation
Comme la pagination, la segmentation divise un programme en un certain nombre de blocs appelés
segments mais de taille variables.
Un programme est généralement constitué de plusieurs entités logiques: programme principal,
procédures, fonctions bibliothèques, tables de données, ..
La segmentation utilise donc des parties de programme qui ont une valeur logique (des modules)
La MMU s'appuie sur une table globale des segments indicée par un couple (n° processus, n°
segment).

4.2.3 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. Les segments sont découpés en pages.
Une adresse virtuelle (S , d), avec S n° de segment et d déplacement dans le segment, est
transformée en (S , N , d' ), où N est un n° de page et d' un déplacement dans la page.

6/6

Vous aimerez peut-être aussi