V. Gestion de la mémoire centrale
Pour pouvoir utiliser un ordinateur en multiprogrammation, système
d’exploitation charge plusieurs processus en mémoire centrale (MC). La façon la
plus simple consiste à affecter à chaque processus un ensemble d'adresses
contiguës.
Quand le nombre de tâches devient élevé, pour satisfaire au principe d'équitabilité et pour minimiser le temps de réponse des processus, il faut pouvoir simuler la présence simultanée en MC de tous les processus. D'où la technique de "va et vient" ou recouvrement (swapping), qui consiste à stocker temporairement sur disque l'image d'un processus, afin de libérer de la place en MC pour d'autres processus.
D'autre part, la taille d'un processus doit pouvoir dépasser la
taille de la mémoire disponible, même si l'on enlève tous les autres processus.
L'utilisation de pages (mécanisme de pagination) ou de segments (mécanisme de
segmentation) permet au système de conserver en MC les parties utilisées des
processus et de stocker, si nécessaire, le reste sur disque.
Le rôle du gestionnaire de la mémoire est de connaître les parties
libres et occupées, d'allouer de la mémoire aux processus qui en ont besoin, de
récupérer de la mémoire à la fin de l'exécution d'un processus et de traiter
le recouvrement entre le disque et la
mémoire centrale, lorsqu'elle ne peut pas contenir tous les processus actifs.
Figure
20. Phases
de génération de l’espace d’adressage.
L’espace d’adressage d’un processus est généré par le compilateur
et l’éditeur de liens.
V.1. Objectifs d'un gestionnaire de
la mémoire.
V.1.1. Rôle
Toute instruction ou donnée de l’espace d’adressage doit être
chargée en mémoire centrale (principale, physique) avant d’être traitée par un
processeur.
Le gestionnaire de la mémoire est le composant du système
d’exploitation qui se charge de gérer l’allocation d’espace mémoire aux
processus à exécuter :
–
Comment organiser la mémoire ? (une ou plusieurs partitions, le
nombre et la taille des partitions fixes ou variables au cours du temps).
–
Faut-il allouer une zone contiguë à chaque processus à charger en
mémoire ? Faut-il allouer tout l’espace nécessaire à l’exécution du processus
entier ? (politique d’allocation).
–
Comment mémoriser l’état de la mémoire? Parmi les parties libres
en mémoire, lesquelles allouées au processus? (politique de placement)
–
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?
Si oui, comment les convertir en adresses physiques.
–
Si plusieurs processus peuvent être résident en mémoire, comment
assurer la protection des processus (éviter qu’un processus soit altéré par un
autre?
V.1.2. Exigence
−
Efficacité : la mémoire doit être allouée équitablement et à
moindre coût tout en assurant une meilleure utilisation des ressources
(mémoire, processeurs et disque).
−
Protection : Les processus ne peuvent pas se corrompre.
−
Transparence : Chacun des processus doit ignorer l’existence des
autres en mémoire.
−
Relocation : la possibilité de déplacer un processus en mémoire
(lui changer de place).
V.2.
Fonctions.
Le compactage de la mémoire permet de regrouper les espaces
inutilisés. Très coûteuse en temps l’unité centrale, cette opération est
effectuée le moins souvent possible.
S'il y a une requête d'allocation dynamique de mémoire pour un
processus, on lui alloue de la place dans le tas (Thermal-assisted switching)
(heap : des parties d'un grand pool de mémoire) si le système
d’exploitation le permet, ou bien de la mémoire supplémentaire contiguë à la
partition du processus (agrandissement de celle-ci). Quand il n'y a plus de
place, on déplace un ou plusieurs processus :
−
soit pour récupérer par ce moyen des espaces inutilisés,
−
soit en allant jusqu'au recouvrement.
A chaque retour de recouvrement (swap), on réserve au processus
une partition un peu plus grande que nécessaire, utilisable pour l'extension de la partition du processus
venant d'être chargé ou du processus voisin.
Il existe trois façons de mémoriser l'occupation de la mémoire :
les tables de bits (bits maps), les listes chaînées et les subdivisions
(buddy).
V.3.
Modes de partage de la mémoire.
V.3.1. Système mono-programmé
−
Cas (a): un seul processus en mémoire RAM :Random Access
Memory.
−
Cas (b): ordinateurs de poche ou systèmes embarqués avec
ROM : Read Only Memory.
−
Cas (c):
MS-DOS: Microsoft Disc Operating System.
V.3.2. Système multiprogrammé
La mémoire est partagée entre le système d' exploitation et
plusieurs processus.
Optimisation du taux d'utilisation du processeur en réduisant
notamment les attentes sur des entrées-sorties.
Deux préoccupations:
–
Comment permettre efficacement la cohabitation de plusieurs processus
?
–
Comment assurer leur protection ?
V.3.2.1. Partitions fixes
–
La mémoire réservée aux utilisateurs est divisée en un ensemble de
partitions.
–
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.
–
Le 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.
Figure
22.
Partitions fixes.
V.3.2.2. Partitions variables
Initialement, l’espace mémoire réservée aux utilisateurs constitue
une seule partition.
Quand un nouveau processus doit être chargé, on lui alloue une
zone contiguë de taille suffisamment grande pour le contenir.
Le nombre et les tailles des partitions varient au cours du temps.
Cette forme d’allocation conduit éventuellement à l’apparition de
trous trop petits pour les allouer à d’autres processus : c’est la
fragmentation externe.
Solutions:
–
Compactage (coûteux et exige que les processus soient
relocalisables)
–
Allocation discontinue.
Figure
23.
Partitions variables.
V.4.
Protection de la mémoire.
V.4.1. Système mono-programmé
Pour protéger le code et les données du système d’exploitation des
programmes des utilisateurs, on utilise un registre limite qui indique la
limite de la zone réservée aux utilisateurs.
Chaque adresse référencée par un processus est comparée avec le
registre limite.
Figure 24. Protection de la mémoire dans un système mono-programmé.
V.4.2. Système multiprogrammé
Comme on ne peut prévoir dans quelle partition sera chargé un
processus, les adresses attribuées par le compilateur et l’éditeur de liens aux
instructions et aux données d’un programme doivent être relatives à une adresse
0.
Ces adresses relatives seront ensuite translatées en adresses
physiques.
La translation peut se faire lors du chargement du processus
(utilisée dans OS/360 d’IBM. Les adresses relatives sont remplacées par des
adresses absolues (en ajoutant à chaque fois l’adresse de début de la
partition).
Cette solution n’est pas intéressante car en remplaçant les
adresses relatives en adresses absolues, il ne sera plus possible de déplacer
le processus.
Pour éviter la translation d’adresse au cours du chargement d’un
processus, une autre solution consiste à doter la machine de 2 registres
spéciaux :
–
Le registre de base ;
–
Le registre limite.
Quand un processus est élu (par l’ordonnanceur), système
d’exploitation charge dans le registre de base l’adresse absolue du début de sa
partition et dans le registre limite la longueur de la partition.
Durant l’exécution d’une instruction, chaque adresse relative
référencée par l’instruction est vérifiée en la comparant avec le contenu du
registre limite, afin d’interdire tout accès en dehors de la partition
courante.
Les adresses physiques sont obtenues en ajoutant le contenu du
registre de base aux adresses relatives.
Avantage : le processus peut être déplacé en mémoire.
Figure 25. Protection de la mémoire dans un système multiprogrammé.
Cette translation doit être rapide.
V.5.
Partage de code.
Un des avantages est le partage de code commun. Particulièrement
important pour les systèmes à temps partagé où plusieurs utilisateurs partagent
un programme (éditeur de texte, base de données, etc.)
V.5.1. Code partagé
Une copie en lecture seule (code réentrant) est partagée entre
plusieurs utilisateurs. Seule la position dans le code change selon les utilisateurs.
Le code partagé doit apparaître au même endroit dans l'espace
logique de tous les processus.
Figure 26. Une bibliothèque de liens dynamiques (Dynamic Link Library: DLL) utilisée par plusieurs utilisateurs.
0 Commentaires