Vous êtes sur la page 1sur 4

Module : Système d’Exploitation des Ordinateurs 2ème année Licence Informatique

Chapitre 4 : Gestion de la Mémoire Centrale


Objectifs :
 Savoir transformer une adresse logique à une adresse physique ;
 Connaître les différentes approches de gestion de la mémoire centrale (physique).
 Comprendre les différentes techniques de gestions de la mémoire centrale (physique) via des
exemples concrets ;
 Prendre en main les algorithmes de placement concernant les anciennes approches et les
algorithmes de remplacement pour la gestion de la mémoire virtuelle.

1. Introduction : Dans un environnement d’un système d’exploitation multiprogrammé, plusieurs


programmes sont chargés simultanément dans la mémoire centrale, cette dernière doit donc être
partagée entre ceux-ci. Le gestionnaire de la mémoire est le composant du système d’exploitation
qui se charge à gérer l’allocation de l’espace mémoire aux processus ; il doit donc répondre aux
exigences suivantes :

 Comment organiser la mémoire physique ? (Partitions fixes ou variables, cadres de même


taille, etc.) ;
 Comment mémoriser l’état de la mémoire ? Parmi les parties libres en mémoire, lesquelles
allouer au processus ? (politique de placement) ;
 Faut-il allouer tout l’espace nécessaire avant l’exécution ou à la demande ? (politique
d’allocation) ;
 S’il n’y a pas assez d’espace en mémoire, doit-on libérer de l’espace en retirant des parties ou
des processus entiers ? Si oui lesquels ? (politique de remplacement) ;
 Les adresses figurant dans les instructions sont-elles relatives (logiques /virtuelles) ? Si oui,
comment les convertir en adresses physiques ;
 Si plusieurs processus peuvent être résidents en mémoire, comment assurer la protection
des processus (éviter qu’un processus soit altéré par un autre) ?

2. Adressage Logique / Adressage Physique : Une adresse générée par le processeur est appelée
adresse logique. Tandis qu’une adresse vue par l’unité de gestion de la mémoire, c’est à dire celle qui
est chargée dans le registre d’adresse de la mémoire, est appelée adresse physique. Il est nécessaire
au moment de l’exécution de convertir les adresses logiques en adresses physiques.

Une adresse physique est toujours calculée en ajoutant à chaque adresse logique l’adresse
de base (l’adresse d’implantation (du chargement) du programme exécutable correspondant au
processus actif) contenue dans un registre. Ce registre de translation est toujours chargé avec cette
adresse qui se trouve au niveau du PCB du processus actif.

MMU:(Memory Management Unit


ou Unité de gestion de la mémoire
ou Unité de traduction adresses)

Figure 1: Conversion d’adresses logiques en adresses physiques par translation.

B. H. / 2020 1
Module : Système d’Exploitation des Ordinateurs 2ème année Licence Informatique

Dans ce schéma, la valeur du registre de translation est additionnée à chaque adresse logique
générée par un processus. Par exemple, si l’adresse de base est 14000, un accès à l’emplacement 314
est converti à l’emplacement 14314.
Il est à noter que le programmeur n’aperçoit en général pas les adresses physiques ; il manipule
uniquement des adresses logiques.

3. Allocation Contiguë (Adjacente) de la Mémoire :

Généralement, la mémoire principale peut loger le SE et les


différents processus utilisateurs. Donc, elle doit être subdivisée en
deux espaces mémoires : Espace noyau (contenant le code du SE
ainsi que toutes les structures manipulées par ce dernier) et un
Espace Utilisateurs (contenant le code et les données des Figure 2: Partitions de la mémoire
processus).
3.1 Allocation Mono-partition (Monoprogrammation) : L’approche la plus simple pour
gérer la mémoire consiste à n’accepter qu’un seul processus à la fois (Monoprogrammation)
auquel on permet d’utiliser toute la mémoire disponible en dehors de celle qu’utilise le
système :
 Mémoire réservée au SE
 Mémoire réservée au seul processus en exécution.

3.2. Allocation Multi-partitions (Multiprogrammation) : Dans un environnement


multiprogrammé, plusieurs processus se logent dans la mémoire en même temps. On doit
alors prendre en charge le problème de leur allouer la mémoire disponible. La solution la plus
simple est de subdiviser la mémoire en partitions de taille fixe (mais généralement
différentes).

3.2.1. Allocation avec partitions fixes : Dans un système multiprogrammé, il faut gérer la
répartition de l’espace entre les différents processus. Cette partition peut être faite une fois
pour toute au démarrage du système, qui subdivise la mémoire en N partitions fixes, de
préférence des partitions de tailles différentes. Chaque répartition peut contenir un et un
seul processus. Ainsi le degré de la multiprogrammation1 est limité par le nombre de ces
partitions. Quand une partition devient libre, on sélectionne un programme parmi les
programmes demandant l’exécution et on le charge dans la partition libre. Quand le
processus se termine, la partition devient libre pour un autre processus. Cette technique est
actuellement dépassée (obsolète).

Le problème qui se pose est : Comment allouer les partitions aux processus ?
–(a) une file d’attente par partition
–(b) une file d’attente pour toutes les partitions

Réponse : Chaque nouveau processus est placé dans la file d’attente de la plus petite
partition pouvant le contenir (figure 3 (a)). Cette technique peut conduire à faire attendre un
processus dans une file, alors qu’une autre partition pouvant le contenir est libre.
L’alternative à cette approche consiste à n’utiliser qu’une seule file d’attente : donc, dès
qu’une partition se libère, le système y place le premier processus de la file qui peut y tenir
(figure 3 (b)). Le problème qu’en souffre la technique des partitions fixes est la
fragmentation interne dans les partitions (figure 4). La solution qu’on pourrait proposer est
de créer des partitions variables.

1
Degré de la multiprogrammation = le nombre maximal des programmes pouvant se charger au niveau de la mémoire.

B. H. / 2020 2
Module : Système d’Exploitation des Ordinateurs 2ème année Licence Informatique

Figure 4 : Fragmentation interne


Figure 3 : Partition fixe de la mémoire
(a) Plusieurs files ; (b) une seule file.

3.2.2. Allocation avec partitions variables : L'utilisation de partitions de tailles variables a


pour objectif, le meilleur ajustement des partitions aux tailles des processus ; Mais le fait de
ne plus fixer le partitionnement de la mémoire rend la gestion de l’espace libre plus
complexe. 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.

Une des méthodes consiste à obliger le SE à maintenir une table indiquant les partitions de
mémoire disponibles et celles qui sont occupées. Quand un processus arrive en demandant
de la mémoire, on cherche un espace suffisamment grand pour contenir ce processus. Si
nous en trouvons un, nous allouons seulement la quantité de mémoire nécessaire et laissant
le reste disponible pour satisfaire les futures processus.

Dans ce cas, un autre problème peut survenir : Un processus qui se termine laisse un "trou",
ce trou est utilisé pour charger un nouveau processus qui ne le remplira pas complètement
en général. On va donc, au fur et à mesure que le temps passe, vers une multitude de "petits
trous". La somme de ces petits trous peut alors n'être pas négligeable et le recours à des
techniques de récupération peuvent être mises en œuvre.

Exemple : L’état de la mémoire d’un système est décrit par la figure ci-dessous. Le système a
une file de travaux décrite par le tableau suivant :

Les figures suivantes montrent les différents états successifs de la mémoire après les entrées
et les sorties des processus :

B. H. / 2020 3
Module : Système d’Exploitation des Ordinateurs 2ème année Licence Informatique

A chaque instant, on dispose d’une liste de tailles de blocs disponibles ainsi que la file
d’attente des processus prêts. Le SE peut Scheduler la file d’attente selon un algorithme de
Scheduling (FCFS par exemple). La mémoire est allouée aux processus jusqu’à ce qu’il n’existe
aucun bloc de mémoire suffisamment grand pour contenir ce processus.

Mais comment allouer un espace de taille N à un processus à partir d’une liste de trous libres
? On peut utiliser l’un des trois algorithmes de placement suivant : First-fit, Best-fit ou Worst-
fit.
 Algorithme First-fit (Le premier ajustement) : On alloue au processus le premier trou
suffisamment grand.
 Algorithme Best-fit (Le meilleur ajustement) : On alloue au processus le trou le plus
petit suffisamment grand ; c’est à dire celui qui provoquera la plus petite miette
possible. Cet algorithme nécessite le parcours de toute la liste des espaces libres.
 Algorithme Worst-fit (Le pire ajustement) : On alloue au processus le trou le plus
grand. Cet algorithme nécessite le parcours de toute la liste des espaces libres,
l’objectif de cet algorithme est d’éviter de créer des petits trous, c’est pour cela
qu’on choisit des partitions de grandes taille.
 Dans les cas du système Linux, on utilise un algorithme par subdivision (voir TP).

Exemple : L’état de la mémoire d’un système est décrit par la figure suivante. On suppose
qu’un nouveau processus P demande un espace mémoire de taille 80KO.

Trou T1= 200 KO Suivant l’algorithme adopté, on choisirait le trou T1,


T2 ou T3.

Trou T2= 400 KO Cas1 : Algorithme First-Fit : Trou T1.


Cas2 : Algorithme Best-Fit : Trou T3.
Cas3 : Algorithme Worst-Fit : Trou T2.
Trou T3= 100 KO

Inconvénient : Fragmentation externe


Solution : Compactage

B. H. / 2020 4