Vous êtes sur la page 1sur 62

Ecole Nationale Polytechnique d’Oran- Maurice AUDIN

Département de Génie des Systèmes Informatique

Intitulé de la matière: Programmation Système

Gestion de la mémoire

Dr. Nawel BENDIMERAD

Année universitaire 2023/2024


1
Contenu du Chapitre 3
1. Introduction
2. Hiérarchie des mémoires
3. La mémoire principale
4. Objectifs du gestionnaire de la mémoire
5. Espace d’adressage logique versus physique
6. Systèmes monoprogrammés
7. Systèmes multiprogrammés
8. Allocation mémoire contigüe
9. Allocation mémoire non-contigüe
10. Mémoire virtuelle

2
1. Introduction
• La mémoire principale constitue la ressource la plus critique d’un
système d’exploitation.
• Chaque processus doit être chargé en mémoire pour qu’il puisse être
exécuté.
• Le partage de la mémoire entre les différents processus doit être
réalisé de manière optimale afin d’augmenter le degré de la
multiprogrammation.
• Ceci tout en prenant en considération la taille limitée de la mémoire
ainsi que la taille continuellement grandissante des programmes
(contenu multimédia).
• Il existe plusieurs schémas pour optimiser l’emploi de la mémoire
principale. 3
2. Hiérarchie des mémoires (1)
L’information est stockée dans plusieurs niveaux de mémoire:
• Registres : Ce type de mémoire est très rapide, accessibles directement en
un cycle. Cependant, leur capacité est limitée, de quelques dizaines à
quelques centaines d’octets et leur coût est très élevé.
• Mémoire cache : Elle sert à conserver les données fréquemment utilisées,
est une mémoire rapide, intégrée au processeur avec une capacité de
quelques dizaines de Kilo Octets.
• Mémoire principale (RAM :Random Access Memory) : Mémoire
volatile et dont la capacité peut aller jusqu’à plusieurs Giga Octets, avec
un temps d’accès de l’ordre de plusieurs dizaines de cycles du processeur
et un coût élevé.
• Mémoire secondaire (Disque dur) : Mémoire permanente, avec une
vitesse inférieure par rapport aux mémoires précédentes, elle est moins
chère et peut atteindre une grande capacité, jusqu’à plusieurs Téra Octets.
4
2. Hiérarchie des mémoires (2)

5
3. La mémoire principale
• La mémoire principale, dite aussi la mémoire vive (Random Access
Memory, RAM), est un ensemble de mots mémoires où chaque mot
a sa propre adresse.
• Plusieurs types de mémoires sont utilisés, différentiables par leur
technologie (DRAM, SRAM, etc.).
• Elle sert à mémoriser des programmes, des données à traiter, les
résultats de ces traitements, ainsi que des données temporaires.
• Deux types d’opérations peuvent s’effectuer sur les mots mémoires:
▪ la lecture (Read) : une adresse doit être choisie à partir du bus
d’adresse et le bus de contrôle doit déclencher l’opération. Les
données à l’adresse choisie se retrouvent sur le bus de données.
▪ l’écriture (Write) : une adresse doit être choisie à partir du bus
d’adresse et le bus de contrôle doit déclencher l’opération. Les
données à l’adresse choisie sont remplacées par celles sur le bus
de données. 6
4. Objectifs du gestionnaire de la mémoire (1)
Les différents objectifs d’un gestionnaire de la mémoire sont les
suivants:
1. Le partage de la mémoire entre les processus: Dans ce cas, le
gestionnaire de la mémoire doit remplir les tâches suivantes :
• Connaître l’état de la mémoire (les parties libres et occupées de la
mémoire).
• Allouer de la mémoire à un processus avant son exécution.
• Récupérer l’espace alloué à un processus lorsque celui-ci se
termine.
• Gérer le swapping (va-et-vient) entre le disque et la mémoire
principale lorsque cette dernière ne peut pas contenir tous les
processus.
7
4. Objectifs du gestionnaire de la mémoire (2)
2. La mise en place d’un mécanisme de calcul
d’adresses physiques: Il est nécessaire de posséder un mécanisme de
calcul d’adresses physiques car les adresses générées par le
processeur sont des adresses logiques ou virtuelles (emplacement
relatif).
3. La protection: Elle consiste à empêcher un processus d’accéder à
une zone mémoire attribuée à un autre processus. Donc chaque
processus doit avoir accès uniquement au pages mémoire qui lui
appartiennent.
Remarque: Si un processus tente d’accéder à une page qui ne lui
appartient pas, une interruption sera envoyée au système
d’exploitation et ce dernier peut envoyer un signal au processus
concerné.
8
5. Espace d’adressage logique versus
physique (1)
• L’unité centrale manipule des adresses logiques (emplacement
relatif).
Les programmes ne connaissent que des adresses logiques, ou
virtuelles.
L’espace d’adressage logique (virtuel) est donc un ensemble
d’adresses pouvant être générées par un programme.
• L’unité mémoire manipule des adresses physiques
(emplacement mémoire).
Elles ne sont jamais vues par les programmes utilisateurs.
L’espace d’adressage physique est un ensemble d’adresses
physiques correspondant à un espace d’adresses logiques.

9
5. Espace d’adressage logique versus
physique (2)
• Avec les adresses logiques, tous les programmes sont compilés
comme s’ils devaient être chargés à partir de l’adresse 0 de la
mémoire.
• Tout se passe comme si chaque programme utilisateur s'exécutait
dans une mémoire qui lui appartient.
• Les adresses logiques qu’il utilise sont traduites en adresses
physiques par un circuit MMU (Memory Management Unit)
avant d’être transmises à la mémoire :
L’adresse logique est ajoutée au contenu d’un registre de
translation contenant l’adresse de début de la zone mémoire
allouée au processus.
Remarque: la conversion d’une adresse logique en adresse physique
doit être très rapide puisqu’elle conditionne la vitesse d’exécution
d’un processus
10
5. Espace d’adressage logique versus
physique (3)
Exemple

Conversion Dynamique en utilisant un Registre de Translation


11
6. Systèmes monoprogrammés (1)
• En pratique une partie de l’espace mémoire est dédiée au système
d’exploitation.
• Il ne peut y avoir qu’un seul processus qui s’exécute à un instant
donné.
• L’utilisateur entre une commande sur un terminal et le système
d’exploitation charge le programme demandé en mémoire puis
l’exécute.
• Lorsqu’il se termine, le système d’exploitation affiche une
invitation sur le terminal et attend la commande suivante pour
charger un nouveau processus qui remplace le précédent.
• Exemple: structure des PC sous MS-DOS. Pilotes
(ROM)
Programme utilisateur
(RAM)
Système d’exploitation
(RAM) 12
6. Systèmes monoprogrammés (2)

• Pour protéger le code et les données du système d’exploitation


des changements que peuvent provoquer les programmes des
utilisateurs, nous pouvons utiliser un registre limite qui
contient l’adresse à partir de laquelle commencent les
instructions et données des programmes des utilisateurs.
• Chaque adresse (instruction ou donnée) générée par un
programme est comparée avec le registre limite.
• Si l’adresse générée est supérieure ou égale à la valeur du
registre, on l’accepte,
• sinon on refuse l’accès et on interrompt le processus avec un
message d’accès illégal à la mémoire.

13
6. Systèmes monoprogrammés (3)
Registre limite

Remarque: L’inconvénient majeur de cette stratégie est la vérification à


chaque référence à la mémoire, ce qui implique un ralentissement du
système.
14
7. Systèmes multiprogrammés
Nous pouvons distinguer différentes méthodes d’allocation mémoire
pour la mise en œuvre de la multiprogrammation :
1. Allocation contigüe : Représente une technique d’allocation
mémoire simple. Un programme est un ensemble de mots contigus
insécable. L’espace d'adressage du processus est linéaire. La
mémoire principale est divisée en plusieurs partitions. On trouve
dans cette catégorie, les méthodes d’allocations en partitions fixes
ou variables.
2. Allocation non-contigüe : un programme est un ensemble de mots
contigus sécable, c’est-à-dire que le programme peut être divisé en
plus petites parties, chaque partie étant elle-même un ensemble de
mots contigus. Chaque partie peut alors être allouée de manière
indépendante. On trouve ici les mécanismes de pagination et de
segmentation. 15
8. Allocation mémoire contigüe (1)
8.1 Partitions Fixes (1)
• Cette solution consiste à diviser la mémoire à l’initialisation du
système en partitions qui peuvent être de taille égales ou inégales.
• Chaque partition contiendra un processus afin que plusieurs
programmes puissent partager la mémoire. Ce schéma est appelé
MFT (Multiprogramming with a Fixed number of Tasks).
• Afin de connaître les parties de la mémoire disponibles (hole) et
celles qui sont occupées, une table de description des partitions
(PDT, Partition Description Table) est maintenue par le système
d’exploitation.

16
8. Allocation mémoire contigüe (2)
8.1 Partitions Fixes (2)
Le principe de ce type d’allocation est le suivant :
• Dès qu’une partition devient libre, un processus de la file d’attente
des processus prêts sera sélectionné et chargé dans cette partition.
• La partition une fois libérée pourra alors être occupée par un autre
processus.
• Si la mémoire est subdivisée en partitions de tailles inégale, dans
ce cas une file d’attente doit être utilisée afin de contenir les
processus qui n’ont pas pu se loger en mémoire.
• Cette file d’attente peut être implémentée comme file unique pour
toutes les partitions ou bien une file par partition
17
8. Allocation mémoire contigüe (3)
8.1 Partitions Fixes (3)
• Utilisation de files multiples : Chaque nouveau processus est placé dans la file
d’attente de la plus petite partition qui peut le contenir.
Inconvénient: perte de place au sein de chaque partition, ainsi que le fait d’avoir des
partitions inutilisées (file d’attente vide).
• Utilisation d’une seule file : Dans ce cas, nous pouvons distinguer deux possibilités
d’attribution d’une partition libre :
Dès qu’une partition se libère, on lui affecte le premier processus de la file qui
peut y tenir.
Inconvénient: perte de place dans le cas où la partition est de grande taille par rapport
à la taille du processus.
Dès qu’une partition se libère, on lui affecte le plus grand processus de la file qui
peut y tenir.
Inconvénient : pénalisation des processus de petite taille.
18
8. Allocation mémoire contigüe (4)
8.1 Partitions Fixes (4)

19
8. Allocation mémoire contigüe (5)
8.2 Partitions Variables (1)
• L’utilisation de partition variables a été proposée dans le but de
remédier au problème de gaspillage de mémoire et la
fragmentation engendrés avec les systèmes à partition fixes.
• Dans cette méthode d’allocation, la mémoire est découpée
dynamiquement, suivant la demande.
• Initialement, il n’existe qu’une seule zone libre avec celle
occupée par le système d’exploitation.
• Par la suite, au fur et à mesure qu’un processus désire
s’exécuter, son programme sera chargé dans une partition
exactement égale à sa taille. Le reste devient une nouvelle zone
libre.
20
8. Allocation mémoire contigüe (6)
8.2 Partitions Variables (2)
• Après la terminaison d’exécution d’un programme, sa partition est
récupérée par le système pour être allouée à un autre programme.
• Contrairement à l’utilisation de partitions fixes, avec des
partitions variables, on n’est plus limité par des tailles de
partitions trop grandes ou trop petites.
• Cependant, un mécanisme d’allocation et de libération plus
complexe doit être envisagé, comme la gestion d’une liste de
mémoires disponibles.

21
8. Allocation mémoire contigüe (7)
8.2 Partitions Variables (3)
Exemple
L’état de la mémoire d’un système ainsi que la file des processus sont
décrits comme suit:
Processus Mémoire Temps d’exécution
P1 600 K 10
P2 1000 K 5
P3 300 K 20
P4 700 K 8
P5 500 K 15

Donner les différents état successives de la mémoire après les entrées


et les sorties des processus. 22
8. Allocation mémoire contigüe (8)
8.2 Partitions Variables (4) Exemple

23
8. Allocation mémoire contigüe (9)
8.2 Partitions Variables (5)
Algorithmes de sélection de partition
• Comment satisfaire une requête d’un processus (espace de taille n) à
partir d’une liste de blocs libres?
• On peut utiliser l’un des trois algorithmes de sélection de partition
suivants : first-fit, best-fit et worst-fit.
First-fit (Le premier trouvé) : Allouer au processus le premier bloc
suffisamment grand à partir du début de la mémoire.
Best-fit (Le meilleur choix) : Allouer au processus le bloc dont la
taille est la plus proche de celle du programme; c’est-à-dire celui
qui provoquera le résidu le plus petit possible. Cet algorithme
nécessite le parcours de toute la liste des espaces libres.
Worst-fit (Le plus mauvais choix) : Allouer au processus le bloc le
plus grand qui donnera le résidu le plus utilisable. Cet algorithme
nécessite le parcours de toute la liste des espaces libres.
24
8. Allocation mémoire contigüe (10)
8.2 Partitions Variables (6)
Algorithmes de sélection de partition
Exemple
• En supposant qu’un processus P demande un espace mémoire
de 80K. En fonction de l’algorithme choisi, les blocs mémoire
seront alloués comme suit:
• First-fit: bloc 1
• Best-fit: bloc 3
• Worst-fit: bloc 2 bloc 1

bloc 2

bloc 3

25
8. Allocation mémoire contigüe (11)
8.3 La fragmentation
• Les algorithmes d’allocation de la mémoire contiguë précédents,
produisent la fragmentation de la mémoire.
• Les Allocations et désallocations successives des programmes en
mémoire centrale créent des zones libres de taille insuffisante
pour charger de nouveau processus de manière contigüe: la
mémoire centrale est alors fragmentée.
• Exemple: Si le processus P4 désire
entrer dans le système en occupant 500K,
il ne pourrait pas, alors que l’espace total
disponible est de 700 K.

26
8. Allocation mémoire contigüe (12)
8.4 Le compactage
• La solution au problème de la fragmentation peut être le
compactage.
• Le compactage de la mémoire centrale consiste à déplacer les
programmes en mémoire centrale de manière à ne créer qu'une
seule et unique zone libre.
• Exemple:
Avant compactage Après compactage

27
8. Allocation mémoire contigüe (13)
8.5 Le Swapping (1)
• La taille de la mémoire principale est limitée et peut être insuffisante
pour maintenir simultanément tous les processus.
• Idée: Placer quelques processus en mémoire auxiliaire, donc faire un
swapping (système de va-et-vient) entre la mémoire et le disque.
• Principe:
Faire un swap-out : déplacer temporairement les processus inactifs
(bloqués ou préemptés) sur le disque (mémoire de réserve : swap
area) et permettre le chargement et donc l’exécution d’autres
processus.
Opération de swap-in : effectuée par la suite afin de recharger le
processus déplacé sur le disque en mémoire pour lui permettre de
poursuivre son exécution 28
8. Allocation mémoire contigüe (14)
8.5 Le Swapping (2) Exemple

La zone mémoire de réserve (swap area) peut être allouée de deux manières :

• Soit à la demande: On recherche une place libre directement au moment où le processus est
déchargé de la mémoire centrale. Ces zones mémoire de swapping sont gérées de la même
manière que la mémoire physique.

• Soit au début de l’exécution: Une zone de réserve est mise à disposition du processus une
fois pour toute. 29
9. Allocation mémoire non-contigüe (1)
•Afin de remédier au problème de la fragmentation, il est plus
intéressant de gérer l’espace d’adressage logique d’un processus de
manière non-contiguë.
•L’idée est de diviser le programme en plusieurs unités (appelée
pages ou segments) pour qu’on puisse permettre l’allocation séparée
de chaque unité, par conséquent, les fragments mémoire peuvent être
exploités plus aisément.
•Ceci nous permettra d’assurer une utilisation plus efficace de la
mémoire.
•Il existe dans ce cas plusieurs mécanismes d’allocation mémoire, en
se basant sur la réimplantation dynamique d’adresse, telles que la
pagination, la segmentation et une technique mixte appelée la
segmentation paginée.
30
9. Allocation mémoire non-contigüe (2)
9.1 La pagination (1)
Principe
• La pagination consiste à découper l’espace d’adressage du
programme en blocs de même taille : appelés pages.
• La mémoire physique est également subdivisée en blocs de taille fixe
appelés cases ou cadres.
• La taille d’une case est égale à la taille d’une page. Cette taille est
définie par le matériel, comme étant une puissance de 2, variant entre
512 octets et 8192 octets, selon l’architecture de l’ordinateur.
• Charger un programme en mémoire consiste alors à placer ses pages
logiques dans n’importe quelle case disponible. Un processus peut
alors se trouver éparpillé n’importe où en mémoire physique.
• Il faut donc savoir pour toute page, dans quelle case de la mémoire
centrale celle-ci a été placée : cette correspondance s’effectue grâce à
une structure particulière appelée la table des pages.
31
9. Allocation mémoire non-contigüe (3)
9.1 La pagination (2)
Pagination de la mémoire logique et physique

Remarque: Les cadres de pages sont alloués comme des unités.


Si les besoins en mémoire d’un processus ne tombent pas sur les limites des pages,
le dernier cadre de page peut ne pas être plein. 32
9. Allocation mémoire non-contigüe (4)
9.1 La pagination (3)
Conversion d’adresse logique en adresse physique (1)
• Pour toute opération concernant la mémoire, il faut convertir l’adresse
paginée générée au niveau du processeur en une adresse physique
équivalente.
• L’association d’une page logique avec une case physique est décrite dans
la table des pages et c’est la MMU qui est chargée de faire cette
conversion.
• Chaque adresse logique générée par le processeur est formée par le couple
<N° de page p, Déplacement d par rapport au début de la page> :
Le numéro de page (p, Page Number) est utilisé comme un index de la
table des pages, il nous permet de récupérer le numéro de cadre
correspondant a cette page (f : adresse de base de la page dans la mémoire
physique).
Le déplacement dans la page (d, Page Offset) est combiné avec le numéro
de cadre afin d’obtenir l’adresse mémoire physique associée à cette adresse
33
logique.
9. Allocation mémoire non-contigüe (5)
9.1 La pagination (4)
Conversion d’adresse logique en adresse physique (2)

34
9. Allocation mémoire non-contigüe (6)
9.1 La pagination (5)
La table des pages (1)
• La table des pages est une table contenant autant d’entrées que de
pages dans l’espace d’adressage d’un processus.
• Chaque processus possède sa propre table des pages qui est
sauvegardée dans son PCB.
• Chaque entrée de la Table de pages est composée de plusieurs
champs, notamment :
1. Le bit de présence.
2. Le bit de référence.
3. Les bits de protection.
4. Le bit de modification.
5. Le numéro de case
correspondant à la page.

35
9. Allocation mémoire non-contigüe (7)
9.1 La pagination (6)
La table des pages (2) Temps d’accès mémoire
• La traduction d’adresses est exécutée par des mécanismes
matériels.
• Si la table des pages est en mémoire principale, chaque adresse
logique occasionne au moins 2 références à la mémoire :
- Une pour lire l’entrée de la table de pages;
- L’autre pour lire le mot référencé
Le temps d’accès mémoire est alors doublé
• Utilisation des registres du processeur:
- Avantage: vitesse d’accès.
- Inconvénient: nombre limité de pages par processus.
• Solution: la tables des pages en mémoire centrale, mais les
adresses les plus utilisées dans les registres du processeur. 36
9. Allocation mémoire non-contigüe (8)
9.1 La pagination (7)
Mémoire associative: TLB (1)
(Translation Lookaside Buffer)
• Un TLB est un petit cache de la table des pages, comportant
entre 8 et 64 entrées.
• A chaque instruction, la MMU parcours tout le TLB pour faire
la conversion d’adresse.
- Si aucune correspondance n’est trouvée dans le TLB, alors
l’entrée de la table des pages est utilisée.
- Cette nouvelle entrée de page est mise dans le TLB. Elle
remplace une autre entrée pas récemment utilisée.
• Le TLB conserve une copie des pages utilisées le plus
récemment.
37
9. Allocation mémoire non-contigüe (9)
9.1 La pagination (8)
Mémoire associative: TLB (1)
(Translation Lookaside Buffer)

38
9. Allocation mémoire non-contigüe (10)
9.2 La segmentation (1)
Principe (1)
• La segmentation consiste à découper l’espace logique en un
ensemble de segments.
• Chacun des segments est de longueur variable ; la taille dépend de
la nature du segment dans le programme.
• Chaque segment possède un numéro et une longueur.
• Une adresse logique générée par le processeur est formée par le
couple <N° de segment S, Déplacement d par rapport au début du
segment>.
• La conversion d’une adresse logique en une adresse physique est
faite grâce à une table de segments.
• Chaque entrée de la table de segments possède deux valeurs :
La base : c’est l’adresse de début du segment en mémoire.
La limite : spécifie la taille du segment. 39
9. Allocation mémoire non-contigüe (11)
9.2 La segmentation (2)
Principe (2)

40
9. Allocation mémoire non-contigüe (12)
9.2 La segmentation (3)
Exemple
Soit un espace d’adressage logique contenant quatre segments, en
supposant que les adresses sont représentées en décimale.

41
9. Allocation mémoire non-contigüe (13)
9.2 La segmentation (4)
Exemple
La conversion des adresses logiques en adresses physiques sur un
système utilisant la segmentation se fait de la manière suivante:
Adresse logique Adresse physique
Numéro de segment Déplacement
2 53 4300+53=4353
3 852 3200+852=4052
0 1222 Provoque un déroutement
Car le déplacement est
hors limite
Remarque: La segmentation permet de simplifier le partage et la
protection des données entre plusieurs procédures.
Elle permet d’éliminer la fragmentation interne mais souffre de
fragmentation externe à cause de l’allocation dynamique de l’espace
42
mémoire.
9. Allocation mémoire non-contigüe (14)
9.3 La segmentation paginée (1)
• Dans le cas où les segments ont une taille importante, un temps de
chargement long peut en résulter. Une des solutions les plus
répandue, est de combiner la segmentation avec la pagination.
• En utilisant la segmentation paginée, le programme sera découpé en
segments et chaque segment sera alors composé d'un ensemble de
pages.
• A chaque processus, on associe une table de segments et une table de
pages. Donc chaque adresse de segment n’est plus une adresse de
mémoire, mais une adresse à la table des pages du segment
• Les adresses générées par les compilateurs et les éditeurs de liens,
dans ce cas, sont alors des triplets :
<Numéro du segment S, numéro de page P, déplacement dans la page
d>
43
9. Allocation mémoire non-contigüe (15)
9.3 La segmentation paginée (2)

44
9. Allocation mémoire non-contigüe (16)
9.4 Segmentation vs Pagination
• La segmentation permet la séparation des programmes et des
données dans des espaces d’adressages indépendants.
• La pagination fournit une meilleure utilisation de la mémoire
physique.
• La segmentation permet de simplifier le partage et la protection
des données entre plusieurs procédures.
Exemple: Dans un segment se trouve un type d’objet précis (un tableau,
une procédure, etc.).
• La segmentation requiert un matériel plus complexe pour la
traduction d’adresses (addition au lieu de la concaténation).
• La segmentation souffre de fragmentation externe (partitions
dynamiques).
• La pagination produit de la fragmentation interne.
45
10. Mémoire virtuelle (1)
Principe (1)
• Sur les systèmes actuels, la mémoire paginée est presque toujours
associée à un autre mécanisme appelé la mémoire virtuelle.
• Son but est de permettre l’exécution de processus pouvant ne pas
être chargés en leur totalité en mémoire.
• Dans de nombreux cas, un programme n’a pas besoin que toute ses
pages soient présentes en mémoire pour qu’il puisse s’exécuter
(exemple : code pour manipuler des situations exceptionnelles).
• Donc, les pages qui ne sont pas utiles peuvent être copiées sur le
disque et amenées au moment voulu en mémoire.
• Comme chaque programme utilisateur pourrait occuper moins de
mémoire physique, il serait possible d’exécuter plus de
programmes en même temps (augmenter le taux de la
multiprogrammation) et ne plus être limité par la taille de la
mémoire physique.
46
10. Mémoire virtuelle (2)
Principe (2)
• La mémoire virtuelle met à notre disposition un espace d’adressage
extrêmement grand.
• Ceci est réalisé en utilisant une mémoire auxiliaire (le disque)
comme espace de travail pour charger et décharger les différentes
pages (ou segments) par le système d’exploitation.

47
10. Mémoire virtuelle (3)
Pagination à la demande (1)
• La mémoire virtuelle est couramment implémentée avec la
pagination à la demande.
• La pagination à la demande est semblable à un système de
pagination avec va-et-vient (swapping).
• Au lieu de transférer en mémoire un processus complet, seulement
les pages qui lui sont nécessaires seront chargées. On évite ainsi
de garder en mémoire des pages qui ne seront jamais employées,
ce qui nous permet de réduire le temps de swapping et la quantité
de mémoire dont on a besoin.
• Avec cette technique, le SE doit disposer de moyens pour
distinguer les pages qui sont en mémoire, et celles qui sont sur
disque. On dispose pour cela du bit de présence dans la table des
pages pour décrire si la page est chargée en mémoire ou non.
48
10. Mémoire virtuelle (4)
Pagination à la demande (2)
Exemple de table de pages avec pages absentes

49
10. Mémoire virtuelle (5)
Notion de défaut de page (1)
• L’accès à une page invalide provoque un défaut de page. Ce qui
nécessite un déroutement vers le SE.
• La procédure permettant de traiter ce défaut de page est la
suivante :
1. On fait référence à une page qui n’existe pas en mémoire.
2. Il y a un déroutement vers le SE
3. Lancer une opération d’E/S pour lire la page manquante à partir
de l’unité de la mémoire auxiliaire
4. Trouver un cadre de page libre pour charger la page manquante en
mémoire physique.
5. Mettre à jour la table de pages.
6. Redémarrer l’instruction qui a provoqué le défaut de page. Le
processus peut alors accéder à la page.

50
10. Mémoire virtuelle (6)
Notion de défaut de page (2)

51
10. Mémoire virtuelle (7)
Remplacement de pages (1)
• Lorsque le SE se rend compte au moment de charger une page qu’il
n’existe aucun cadre de page disponible, il doit alors faire recours à
un remplacement de page.
• La procédure de traitement d’un défaut de pages avec prise en
compte du remplacement de page est la suivante :
▪ Trouver l’emplacement de la page désirée sur disque.
▪ Trouver un cadre de page libre. S’il existe un cadre de page libre, l’utiliser, sinon
utiliser un algorithme de remplacement de pages pour sélectionner un cadre de
page victime et effectuer les étapes suivantes:
1. Swap out de la page Victime.
2. Mise à jour de la table de pages (bit de présence de la page Victime = 0).
3. Swap in de la page Désirée.
4. Mise à jour de la table de pages (bit de présence de la page Désirée = 1, N°
cadre=f).
▪ Redémarrer le processus utilisateur. 52
10. Mémoire virtuelle (8)
Remplacement de pages (2)
Procédure de remplacement de page

Remarque : Pour effectuer un remplacement de pages, il est


nécessaire de réaliser deux transferts de pages. Ce qui peut engendrer
un temps de traitement important du défaut de pages.
Une solution consiste à ne réécrire la page victime sur le disque que
si elle a été modifiée depuis son chargement en mémoire. 53
10. Mémoire virtuelle (9)
Algorithmes de remplacement de pages (1)
• Les algorithmes de remplacement de pages ont été proposés dans le
but de choisir un cadre de page victime à libérer de la mémoire
centrale.
• L’évaluation d’un algorithme de remplacement de pages est réalisée
en l’exécutant sur une séquence particulière de références mémoires
appelée chaîne de références et en calculant le nombre de défauts de
page provoqués.
• Il est nécessaire aussi de connaître le nombre de cadres de pages
disponibles pour déterminer le nombre de défauts de pages pour une
chaîne de références donnée.
• Evidemment, au fur et à mesure que le nombre de cadres de pages
augmente, le nombre de défauts de pages doit diminuer. 54
10. Mémoire virtuelle (10)
Algorithmes de remplacement de pages (2)
Algorithme FIFO (1)
• L’algorithme de remplacement FIFO (First In First Out) est le plus
simple à réaliser.
• Les pages présentes en mémoire sont sauvegardées dans une file
FIFO de la page la plus ancienne à la plus récente.
• Lorsqu’on doit remplacer une page, il suffit de sélectionner la plus
ancienne, c’est-à-dire, celle qui se trouve en tête de file.

• Exemple : Considérons un système à mémoire paginée ayant 3


cadres de pages (pages physiques), et soit la chaîne de références
suivante : 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1.
Quel est le nombre de défauts de pages?
55
10. Mémoire virtuelle (11)
Algorithmes de remplacement de pages (3)
Algorithme FIFO (2)
• Afin de calculer le nombre de défauts de pages, il est nécessaire de
faire un déroulement pour avoir les différents états de la mémoire et
marquer les défauts de pages existants de la manière suivante :
Chaîne de 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
références
Cadre 1 7 7 7 2 2 2 2 4 4 4 0 0 0 0 0 0 0 7 7 7
Cadre 2 0 0 0 0 3 3 3 2 2 2 2 2 1 1 1 1 1 0 0
Cadre 3 1 1 1 1 0 0 0 3 3 3 3 3 2 2 2 2 2 1
Défaut de page D D D D D D D D D D D D D D D

Remarque : La lettre D signale l’occurrence d’un défaut de pages.


• Le nombre de défauts de page obtenu en utilisant l’algorithme FIFO est
égal à 15.
56
10. Mémoire virtuelle (12)
Algorithmes de remplacement de pages (4)
Algorithme FIFO (3)
• L’algorithme de remplacement FIFO est simple à implémenter mais ses
performances ne sont pas toujours bonnes.
• Afin d’illustrer les problèmes rencontrés avec un algorithme de remplacement
FIFO, on peut envisager la chaîne de références suivantes : 1, 2, 3, 4, 1, 2, 5, 1, 2,
3, 4, 5.

• On remarque que le nombre de défauts de pages pour 4 cadres de pages, égal à10
est supérieur au nombre de défauts de pages pour 3 cadres de pages, égal à 9.
• Ce résultat fort inattendu est connu sous le nom de l’anomalie de Belady. Elle
décrit une situation où le taux de défauts de pages augmente au fur et à mesure
que le nombre de cadres de pages augmente, contrairement à la règle générale.57
10. Mémoire virtuelle (13)
Algorithmes de remplacement de pages (5)
Algorithme optimal (1)
• L’algorithme optimal (de Belady) consiste à remplacer la page
qui sera référencée le plus tard possible dans le futur, c’est-à-dire,
celle qui mettra le plus de temps à être de nouveau utilisée.
• Malheureusement, l’algorithme optimal est difficile à mettre en
œuvre car il requiert une connaissance future de la chaîne de
références.
• Il est utilisé essentiellement pour faire des études comparatives
car il minimise le nombre de défauts de pages.

58
10. Mémoire virtuelle (14)
Algorithmes de remplacement de pages (6)
Algorithme optimal (2)
• Exemple : Considérons un système à mémoire paginée avec trois
cadres de pages et la chaîne de références utilisée avec l’algorithme
FIFO.
Chaîne de 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
références
Cadre 1 7 7
7 2 2 2 2 2 2 2 2 2 2 2 2 2 2 7 7 7
Cadre 2 0
0 0 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0
Cadre 3 1 1 1 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1
Défaut de page D D D D D D D D D

• Le nombre de défauts de pages obtenu en appliquant l’algorithme


optimal est égal à 9.
• Nous remarquons clairement que le nombre de défauts de pages est
nettement plus bas par rapport à celui généré par l’algorithme
FIFO. 59
10. Mémoire virtuelle (15)
Algorithmes de remplacement de pages (7)
Algorithme LRU
• L’algorithme LRU (Least Recently Used) sélectionne pour le
remplacement d’une page victime, la page la moins récemment
utilisée. Lorsqu’un défaut de page se produit, le système retire la
page qui n’a pas été référencée pendant le plus longtemps.
• Pour l’implémentation de cet algorithme, chaque page chargée doit
disposer de la date du dernier accès à sa zone mémoire.
• Exemple : Si nous reprenons la même chaîne de références utilisée
précédemment, le nombre de défauts de pages généré en appliquant
l’algorithme LRU est égal à 12.
Chaîne de 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
références
Cadre 1 7 7 7 2 2 2 2 4 4 4 0 0 0 1 1 1 1 1 1 1
Cadre 2 0 0 0 0 0 0 0 0 3 3 3 3 3 3 0 0 0 0 0
Cadre 3 1 1 1 3 3 3 2 2 2 2 2 2 2 2 2 7 7 7
Défaut de page D D D D D D D D D D D D 60
Principaux appels système pour la gestion des
fichiers (1)
• Les appels systèmes pour la gestion de fichiers sont les suivants:
open() et creat() pour l’ouverture d’un fichier.
close() pour la fermeture d’un fichier.
read() pour la lecture d’un fichier.
write() pour l’écriture dans un fichier.
lseek() pour déplacer le pointeur de fichier.
stat() pour récupérer des informations d’un fichier
link() pour créer un lien entre deux fichiers.
unlink() pour supprimer un lien ou un fichier.

61
Principaux appels système pour la gestion des
fichiers (2)
• Exemple d’ouverture d’un fichier:
#include <unistd.h>
#include <fcntl.h>
int open(char * filename, int mode);

• Le mode est une combinaison de plusieurs éléments .


• Il faut utiliser l’une de trois constantes :
O_RDONLY: fichier ouvert en lecture exclusive.
O_WRONLY: fichier ouvert en écriture exclusive.
O_RDWR: fichier ouvert en lecture et en écriture.

62

Vous aimerez peut-être aussi