Vous êtes sur la page 1sur 21

V - Gestion de la Mémoire

2
Introduction
• Mémoire ressource importante devant être gérée avec
prudence
• Gestion de la mémoire du ressort du gestionnaire de la
mémoire
• Ce gestionnaire doit :
– Connaître les parties libres et occupées de la mémoire
– Allouer de la mémoire aux processus qui en ont besoin
– Récupérer la mémoire utilisée par un processus lorsque celui-ci se termine
– Traiter le va-et-vient (swapping ou swap) entre le disque et la mémoire
principale lorsque cette dernière ne peut pas contenir tous les processus
• Les systèmes de gestion de la mémoire se répartissent en 2 catégories :
1. Les systèmes qui déplacent les processus entre la mémoire principale et le
disque (va-et-vient et pagination)
2. Ceux qui ne le font pas (catégorie simple à implémenter)
• Le va-et-vient et la pagination sont des artifices qui pallient à
un manque de mémoire princiaple
3
Monoprogrammation sans
va-et-vient ni pagination
• Gestion de la mémoire la plus simple consiste à avoir un seul processus en
mémoire à un instant donné et lui permettre d’utiliser toute la mémoire
disponible
• La mémoire est partagée entre le SE et un unique processus utilisateur
• L’IBM PC (i8086->i8486) utilise ce schéma :
– Les pilotes sont en ROM (Read Only Memory), les programmes en ROM sont appelés
BIOS (Basic Input Output System)
– Le SE se trouve en bas de la mémoire vive (RAM, Random Access Memory)
– Le programme utilisateur au-dessus du SE en RAM
Pilotes périphériques en ROM
Programme utilisateur
SE en RAM
• Lorsque la mémoire est organisée de cette manière, il ne peut y avoir
qu’un seul processus s’exécutant à un instant donné
• L’utilisateur tape une commande sur son terminal, le SE charge le
programme en mémoire et l’exécute ; lorsque le processus se termine le
SE affiche une invite (prompt) sur le terminal et attend la commande4
suivante pour charger un nouveau processus qui remplace le précédent
Multiprogrammation et utilisation de
la mémoire : modélisation
• La multiprogrammation permet d’améliorer le taux d’allocation du processeur
• Supposons qu’un processus passe une fraction p de son temps à attendre la fin
d’une E/S ; si n processus se trouvent en mémoire en même temps, la probabilité
qu’ils soient tous en attente sur une E/S (et donc que le processeur soit inutilisé)
est pn ; nous avons donc : utilisation du processeur = 1 - pn

100
20 % d'attente sur E/S

90
50 % d'attente sur E/S
Utilisation du processeur (% )

80

70

60 80 % d'attente sur E/S


50

40

30

20

10

0
0 1 2 3 4 5 6 7 8 9 10
degré de multiprogrammation
5
Multiprogrammation avec des
partitions fixes
• Il est bon d’avoir plus d’un processus en mémoire à la fois
• Comment alors organiser la mémoire le plus efficacement possible ?
• La méthode la plus simple est de diviser la mémoire en n partitions
(éventuellement de tailles inégales)
• Chaque nouvelle tâche est placée dans la file d’attente de la plus petite
partition qui peut la contenir

Partition 4 Partition 4
700 K 700 K
Files d’entrée multiples Partition 3 File d’entrée unique Partition 3
400 K
400 K
Partition 2 Partition 2
200 K 200 K
Partition 1 Partition 1 100 K
100 K
SE 0 SE 0
6
Multiprogrammation avec des
partitions fixes
• Trier les tâches en fonction de leurs taille dans des files multiples
présente un inconvénient lorsque la file des grandes partitions est vide
et celles des petites est pleine ; une alternative consiste à utiliser 1
seule file
• Pas intéressant d’allouer une grande partition à une petite tâche:
parcourir la liste et choisir la plus grande tâche qui peut contenir la
partition
• Cette stratégie désavantage les petites tâches (théoriquement il vaut
mieux les traiter en priorité) ; une solution consiste à interdire la non-
sélection d’une tâche plus de k fois
• Ce système à partitions fixes a été utilisé par OS/360 (IBM) : MFT
(Multiprogramming with a Fixed number of Tasks)
7
Code translatable et protection
• La multiprogrammation soulève 2 problèmes majeurs : la translation
et la protection
• Au moment de l’édition de liens, l’éditeur de liens doit connaître
l’adresse du début du programme !
• Ex : appel d’un procédure à l’adresse relative 100, si le programme est
chargé en partition 1, cet appel provoque un saut à l’adresse 100 qui
se trouve dans le SE ! L’adresse devrait être 100K + 100
• Ce problème est celui de la translation d’adresse
• Une solution consiste à modifier les instructions du programme
chargé en mémoire ; pour effectuer cette opération l’éditeur de liens
doit inclure dans le code binaire une liste de mots mémoire qui sont
des adresses pour les distinguer des codes d’opérations des
constantes ou d’éléments qui ne doivent pas être translatés
• Translater les programmes au moment du chargement ne résout pas
le problème de protection : comme les programmes dans ce système
utilisent des adresses mémoire absolues, on ne ne peut empêcher à
un programme de construire une instruction qui lit ou écrit n’importe
quel mot mémoire ! 8
Code translatable et protection
• Une autre solution aux problèmes de la translation d’adresse et
de la protection est de doter la machine de deux registres
matériels spéciaux : les registres de base et limite
• Quand on lance un processus, on charge dans le registre de
base la limite inférieure de la partition et dans le registre limite
la longueur de la partition ; on ajoute le registre de base à
chaque adresse mémoire générée et on vérifie que cette
adresse ne dépassent pas le registre de limite afin d’interdire
tout accès en dehors de la partition
• L’IBM PC utilise une version simplifiée de ce mécanisme (sans
registre limite)
• Autre avantage du registre de base : les programmes peuvent
être déplacés en mémoire après le début de leur exécution, il
suffit de modifier la valeur du registre

9
Le va-et-vient : introduction
• La mémoire ne peut pas toujours contenir les
processus de tous les utilisateurs, il faut placer
quelques processus sur disque
• Il faut, bien sur, ramener ce processus en mémoire
principale avant de les exécuter
• Le mouvement des processus entre la mémoire
principale et le disque est appelé va-et-vient
(swapping)

10
Multiprogrammation
avec partitions variables (1)
• On peut, en principe, utiliser les partitions fixes pour les va-et-
vient (dés qu’un processus se bloque, on le déplace sur disque et
on le remplace par un autre)
• En pratique, les partitions fixes ne sont pas intéressantes lorsque
la mémoire est limitée (on perd beaucoup de place à cause des
programmes qui sont plus petits que les partitions)
• Il faut utiliser une autre solution : les partitions variables
• Avec des partitions variables, le nombre et la taille des processus
en mémoire varient au cours du temps

C C C C C

B B B B B E
A A A A D D D
SE SE SE SE SE SE SE SE
11
Multiprogrammation
avec partitions variables (2)
• La différence fondamentale avec les partitions fixes est que le nombre,
la position et la taille des partitions varient dynamiquement au fur et à
mesure que les processus entrent ou sortent de la mémoire
• Plus limitée par un nombre fixe de partitions ou par la taille des
partitions ; cette souplesse accrue améliore l’usage de la mémoire
mais complique son allocation et sa libération
• On peut réunir les espaces inutilisées en une seule partition, on
effectue alors un compactage de la mémoire
• La taille mémoire allouée aux processus mérite une attention
particulière
• L’allocation est simple si les processus ont une taille fixe qu’ils ne
modifient jamais ; si en revanche les processus allouent
dynamiquement de la mémoire dans le tas, on a des difficultés dès
qu’un processus demande de la mémoire 12
Multiprogrammation
avec partitions variables (3)
• S’il existe un espace adjacent au processus, ce dernier pourra
occuper cet espace ; mais s’il est entouré par deux autres
processus, il faut soit le déplacer à un emplacement mémoire
susceptible de le contenir, soit déplacer un ou plusieurs
processus sur disque pour créer une emplacement de taille
suffisante
• Si la mémoire est saturée et si le swap ne peut plus contenir de
processus, il faut tuer le processus !
• La taille des processus augmente en général au cours de leur
exécution ; on peut donc allouer à chaque processus un peu
plus de mémoire qu’il ne demande afin de réduire le temps
système perdu pour cette gestion ; il faut cependant recopier
sur disque uniquement la mémoire réellement utilisée par le
processus
13
Multiprogrammation
avec partitions variables (4)
• Les processus ont 2 segments qui peuvent grandir (le tas et la
pile), on place la mémoire disponible entre ces 2 segments et
cet espace peut être utilisé indifféremment par un de ces
segments ; si cet espace se remplit, il faut soit déplacer le
processus à un emplacement mémoire plus grand, soit le
recopier sur disque jusqu’à ce qu’il y ait de la place en mémoire
principale, soit le tuer
• Il existe 3 manières de mémoriser l’occupation de la mémoire :
les tables de bits (bit maps), les listes et les subdivisions (buddy)

14
Gestion mémoire par tables de bits
• La mémoire est divisée en unités d’allocation dont la
taille varie de quelques mots à plusieurs Mo
• A chaque unité, on fait correspondre un bit dans la
table de bits (bit maps) qui est à 0 si l’unité est libre
et à 1 si elle est occupée
• La taille de l’unité d’allocation joue un rôle important
: plus elle est faible, plus la table de bits est
important ; si on prend une unité d’allocation de
grande taille, on réduit la taille du bit map, mais on
perd beaucoup de place mémoire chaque fois qu’un
processus n’est pas un multiple de l’unité d’allocation
15
Gestion mémoire par tables de bits
• La mémoire est divisée en unités d’allocation dont la
taille varie de quelques mots à plusieurs Mo
• A chaque unité, on fait correspondre un bit dans la
table de bits (bit maps) qui est à 0 si l’unité est libre
et à 1 si elle est occupée
• La taille de l’unité d’allocation joue un rôle important
: plus elle est faible, plus la table de bits est
important ; si on prend une unité d’allocation de
grande taille, on réduit la taille du bit map, mais on
perd beaucoup de place mémoire chaque fois qu’un
processus n’est pas un multiple de l’unité d’allocation
16
Gestion mémoire par tables de bits
• Le bit map permet donc de mémoriser l’occupation
mémoire dans un espace mémoire de taille fixe : la
taille d’un bit map ne dépend pas de la taille de la
mémoire mais de la taille de l’unité d’allocation
• Le seul problème survient lorsque l’on doit placer en
mémoire un processus de k unités ; le gestionnaire
doit parcourir le bit map à la recherche de k zéros
consécutifs ; cette recherche est lente, ce qui fait
qu’en pratique on utilise rarement les bit maps

17
Gestion mémoire par listes chaînées
• Une deuxième méthode pour mémoriser l’occupation mémoire consiste à
gérer une liste chaînée de segments libres et occupés
• Un segment est un processus ou un espace libre entre deux processus
• Chaque entrée de la liste spécifie :
– une zone libre (H [pour Hole]) ou un processus (P),
– son adresse de départ
– sa longueur
– un pointeur sur l’entrée suivante
• Trier la liste en fonction des adresses permet de mettre à jour facilement la
liste lorsqu’un processus se termine ou est déplacé sur disque
• Plusieurs algos peuvent être utilisés à partir de cette liste pour allouer la
mémoire aux processus

1. l’algo de la première zone libre (first fit) : rechercher le premier segment H


qui peut contenir le processus, le scinder en 2 (la première contient le
processus, la seconde est H). C’est le plus simple algo. Il est rapide puisque
très peu de recherche

18
Gestion mémoire par listes chaînées
2. Algo de la zone libre suivante (next fit) : légère variante : la
recherche commence à partir de la dernière zone libre trouvé :
performance légèrement inférieure à first fit [Bays 1977]
3. Algo du meilleur ajustement (best fit) : on recherche dans toute
la liste la plus petite zone libre qui convient, on évite ainsi de
fractionner une grande zone dont on pourrait avoir besoin
ultérieurement : plus lent et plus étonnant : il fait perdre plus
de place mémoire que first fit (fractionnement en petite zone
inutilisable) !
4. Algo du plus grand résidu (worst fit) : inverse on prend la plus
grande zone libre : pas de bonnes performances.
Optimisations : 2 listes (pour les H et pour les P), utiliser les zones libres pour
mémoriser les H : le premier mot de chaque zone libre contient la taille de la
zone et le deuxième un pointeur sur l’entrée suivante
5. Algo du placement rapide (quick fit) : utilise des listes séparées
par les tailles de zone les plus courantes
19
Gestion mémoire par subdivision
• Les listes chaînées accélèrent l’allocation mémoire mais rendent la libération plus
lente car il faut examiner les voisins des segments libérés
• L’allocation par subdivision (buddy system) est un algo de gestion qui s’appuie sur le
fait que les ordinateurs utilisent des adresses binaires de manière à accélérer la
fusion des zones libres adjacentes
• Le gestionnaire de la mémoire mémorise une liste de blocs libres dont les tailles sont
1, 2, 4, 8, 16, … octets jusqu’à la taille maximale de la mémoire
• Ex :

Zone
Mémoire libre
Initialement 1024 1
Demande 70 A 128 256 512 3
Demande 35 A B 64 256 512 3
Demande 80 A B 64 C 128 512 3
libération A 128 B 64 C 128 512 4
Deamnde 60 128 B D C 128 512 3
Libération B 128 64 D C 128 512 4
Libération D 256 C 128 512 3
Libération C 1024 1
20
Gestion mémoire par subdivision
• L’allocation par subdivision présente un avantage par rapport aux algos qui
trient en fonction de leur taille : quand un bloc de 2k octets est libéré, le
gestionnaire de la mémoire doit examiner uniquement la liste des zones
libres de 2 k octets pour voir s’il peut reconstruire un bloc plus grand
• Malheureusement, il est assez inefficace en ce qui concerne l’utilisation de
la mémoire, le problème vient du fait que toutes les tailles doivent être
arrondies à une puissance de 2
• Un processus de 35 Ko occupe un bloc de 64Ko, les 29 Ko excédentaires
sont perdus, on parle de fragementation interne
• Fragmentation externe : zone libre entre 2 segments alloués, appelé aussi
phénomène de damier (checkerboarding)
• De nombreux informaticiens (Peterson et Norman, Kaufman, …) ont modifié
l’allocation de subdivision pour contourner certaines de ses limitations

21
Exercice
Soit une mémoire centrale utilisant la technique d’allocation
contiguë par partitionnement fixe. Cette mémoire est composée
de 5 partitions P1, P2, P3, P4 et P5. Ces partitions ont pour tailles
respectives 100, 500, 200, 300 et 600 KO. Soient 4 processus A,
B, C et D de tailles respectives 212, 417, 112 et 426 Ko.
1. Donner les différents états de la mémoire centrale pour charger
les 4 processus A, B, C et D (dans l’ordre) en utilisant les
algorithmes d’allocation suivants :
1. a- FIRST-FIT
2. b- BEST-FIT
3. c- WORST-FIT
4. d- NEXT-FIT

2. Essayer de placer ces processus sur un buddy system de 2Go. 22

Vous aimerez peut-être aussi