La Mémoire Virtuelle
La Mémoire Virtuelle
La mémoire virtuelle
La mémoire virtuelle :
Recouvrement
Le recouvrement (Overlay) est une technique qui permet de remplacer une partie de la
MC par une autre.
À un instant donné, un programme n'utilise qu'une petite partie du code et des données
qui le constituent. Les parties qui ne sont pas utiles en même temps peuvent donc se
“recouvrir” ; c'est-à-dire, occuper le même emplacement en mémoire physique.
Considérons un code assembleur composé deux passes. Passe 1, Passe 2, table des symboles
et des routines communes. La taille de chaque élément est:
• Passe 1: 8K
• Passe 2: 10K
• Table des symboles : 14K
• Routines communes: 5K.
#include <stdio.h>
La taille de mémoire disponible est de 32Ko.
int main() {
int a = 5;
int b = 3;
Exemple d’un programme int sum = a + b;
int a = 5; _start:
int b = 3; mov eax, 5 ; Charger la valeur 5 dans eax (pour a)
mov ebx, 3 ; Charger la valeur 3 dans ebx (pour b)
int sum = a + b; add eax, ebx ; additionner eax et ebx et stocker dans eax
mov [sum], eax ; stocker le résultat dans sum
push dword [sum] ; Mettre la somme au sommet de la pile
printf("La somme est : %d\n", sum); push dword msg ; Mettre l'adresse du message sur la pile
return 0; call printf ; Appeler printf
mov eax, 1 ; Code du syscall pour "exit"
} xor ebx, ebx ; Code de retour 0
int 0x80 ; Appel système pour quitter
Passe 1 = 8 Ko
Passe 1 Passe 2
Passe 1 Passe 2
8 ko 10 ko
Déroutement !
(défaut de page)
Algorithme de remplacement :
Il existe plusieurs algorithmes de remplacement de pages. Ces algorithmes sont
conçus dans l’objectif de minimiser le taux de défaut de pages à long terme.
L’évaluation de ces algorithmes s’effectue en comptant sur une même séquence de
références mémoires, le nombre de défauts de pages provoqués. Cette séquence est
appelée chaîne de références (Reference String) et elle est définie par la séquence
des numéros de pages référencées successivement au cours de l’exécution d’un
processus.
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
Frame 1 7 7 7 2 2 2 2 4 4 4 0 0 0 0 0 0 0 7 7 7
Frame 2 0 0 0 0 3 3 3 2 2 2 2 2 1 1 1 1 1 0 0
Frame 3 1 1 1 1 0 0 0 3 3 3 3 3 2 2 2 2 2 1
Défauts D D D D D D D D D D D D D D D
de page
Taux de défauts de pages 15/20*100=75%
L’algorithme FIFO est simple à mettre en œuvre. Cependant, cet algorithme ne tient
pas compte de l'utilisation de chaque page. Par exemple, à la dixième référence la page
0 est retirée pour être remplacée par la page 3 puis tout de suite après, la page retirée
est rechargée. L'algorithme est rarement utilisé car il y a beaucoup de défauts de page.
Algorithme Optimal:
Algorithme Optimal:
Appliquer l’algorithme de Belady (optimal) sur la chaîne de références ci-après, avec trois (03)
blocs disponibles.
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
Frame 1 7 7 7 2 2 2 2 2 2 2 2 2 2 2 2 2 2 7 7 7
Frame 2 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0
Frame 3 1 1 1 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1
Défauts D D D D D D D D D
de page
Taux de défauts de pages 9/20*100=45%
Cette stratégie consiste à suivre le nombre d'accès de chaque page à l’aide d’un compteur.
La page ayant le nombre d’accès le plus bas sera celle qui sera déchargée en priorité.
Remarque:
Lorsque deux éléments ont le même compteur dans l'algorithme LFU, il existe plusieurs
stratégies pour décider laquelle enlever. La plus courante est de retirer l'élément le plus
ancien parmi ceux ayant le même compteur.
Trouve_Page_Victime()
Début
Etiq: Si (P.Bit_Ref = 0) alors
page_victime.find = VRAI;
Ecrire_Disque(page_victime);
Lire_Disque(page);
P P.svt;
sinon
P.Bit_Ref 0;
P P.svt;
Goto Etiq;
Fsi;
Fin.
Appliquer l’algorithme de la seconde chance sur la chaîne de références ci-après, avec trois
(03) blocs disponibles.
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
Frame 1 7 7 7 2 2 2 2 4 4 4 4 3 3 3 3 0 0 0 0 0
Frame 2 0 0 0 0 0 0 0 2 2 2 2 2 1 1 1 1 7 7 7
Frame 3 1 1 1 3 3 3 3 3 0 0 0 0 2 2 2 2 2 1
Défauts D D D D D D D D D D D D D D
de page
Taux de défauts de pages 14/20*100=70%
• Cet algorithme utilise les bits R et M ensemble pour déterminer les pages non
récemment utilisées.
• Le bit M (Modification Bit) désigne si une page a été modifié récemment, si c’est le
cas, une sauvegarde de cette dernière sur le disque est nécessaire.
• M = 1 désigne une page modifiée et M = 0 désigne une page non modifié.
• A chaque référence, si le bit de référence R d’un page modifiée est égale à 1. Le bit
de modification M = 0*
• L'Astérix (*) désigne que la page doit être sauvegarder sur le disque.
60
50
40
30
20
10
0
2 3 4 5 6 7 8 9 10 11
S1AS1A
8
_Page_2 Table Base Bit_V
3
Seg Base L 12
S2A _Page_1 S1A 12288 8 Ko P1 - 0 16
4
S2AS2A
_Page_2 S2A 36864 12 Ko P2 36864 1 20
5
S3AS3A
_Page_1 Table Base Bit_V
28
7
8
P1 20480 1
32
Processus B Table Base Bit_V 36
9
10
S1B _Page_1 P1 - 0 40
11
S1B _Page_2 P2 40960 1 44
S1B 12
S1B _Page_3 Seg Base L P3 4096 1 48
13
S1B _Page_4 S1B 40960 16 Ko P4 - 0 52
14
S2B _Page_1 Table Base Bit_V 56
S2B S2B 57344 8 Ko 15
S2B _Page_2 P1 57344 1 60
P2 - 0 Mémoire Centrale
Dr. Hamza Nemouchi Système d’exploitation 2
Introduction
Définition Mémoire centrale
1. Recouvrement
Objectifs du gestionnaire de la MC
2. Pagination à la demande
Caractéristiques liées au chargement d’un programme
Stratégies d’allocation
Introduction
2. Soit l’adresse logique <S1A, 4108>. Quelle adresse réelle lui correspond-elle ?
<S1A, 4108>
(4018o < 8Ko) alors
P = 4108 div 4096 = 1
d = 4018 mod 4096 = 12
<S1A, P1, 12>
(Bit_V_P1 = VRAI) alors Seg Base L
S1A 12288 8 Ko
@physique = @_base_page + d
S2A 36864 12 Ko
@physique = 12288 + 12 = 12300
S3A 20480 4 Ko
Table S1A Base Bit_V Table S2A Base Bit_V Table S3A Base Bit_V
P1 12288 1 P1 - 0 P1 20480 1
P2 16384 1 P2 36864 1
P3 - 0
3. Soit l’adresse logique <S2B, 8202>. Quelle adresse réelle lui correspond-elle ?
P3 4096 1
P4 - 0
@ linéaire 4098 est dans S1A car S1A [0, 8192[ (taille 8 Ko)
P = 4098 div 4096 = 1 et d = 4098 mod 4096 = 2
Donc @virtuelle = <S1A, 1, 2>
@physique = @base_page + d = 12290 (Bit_V_P1 = VRAI)
@ linéaire 12292 est dans S2A car S2A [8192, 20480[ (Taille 12 Ko)
P = 12292 div 4096 = 3 et d = 12292 mod 4096 = 4
Donc @virtuelle = <S2A, 3, 4>
Défaut de page (Bit_V_P2 = FAUX )
@ linéaire 8212 est dans S1B car S1B [0, 16384[ (Taille 16 Ko)
P = 8212 div 4096 = 2 et d = 8212 mod 4096 = 20
Donc @virtuelle = <S1B, 2, 20>
@physique = @base_page + d = 40980 (Bit_V_P2 = VRAI)
Dr. Hamza Nemouchi Système d’exploitation 2