Académique Documents
Professionnel Documents
Culture Documents
• le programme de l’utilisateur
• Mémoire:
• contigüe
• paginée
Englander, ch. 18
Algorithmes d’allocation de mémoire
• Il existe plusieurs algorithmes afin de déterminer l’emplacement d’un
programme en mémoire (allocation contiguë). Le but de tous ces
algorithmes est de maximiser l’espace mémoire occupé.
• Première allocation (« First Fit »): Le programme est mis dans le premier
bloc de mémoire suffisamment grand à partir du début de la mémoire.
• Souvent utilisé malgré sa simplicité apparente!
• Prochaine allocation (« Next Fit »): Le programme est mis dans le premier
bloc de mémoire suffisamment grand à partir du dernier bloc alloué.
• Crée souvent un peu plus de fragmentation que « First Fit »
• Meilleure allocation (« Best Fit »): Le programme est mis dans le bloc de
mémoire le plus petit dont la taille est suffisamment grande pour l’espace requis.
• Semble meilleur, mais demande beaucoup de temps de calcul!
• Pire allocation (« Worse Fit »): Le programme est mis dans le bloc de
mémoire le plus grand.
Démonstration
Exercice mémoire contigüe #1
• Effectuez les étapes suivantes pour un système ayant
une mémoire de 16Mo:
• Les processus suivants sont alloués en mémoire (dans l’ordre)
• P1, 3Mo
• P2, 5Mo
• P3, 2Mo
• P4, 2Mo
• P1 et P3 se terminent
P1 3Mo 0 3
P2 2Mo 1 3
P3 4Mo 2 3
P4 2Mo 3 3
P5 3Mo 4 3
P1 3Mo 0 3
P2 2Mo 1 3
P3 4Mo 2 3
P4 2Mo 3 3
P5 3Mo 4 3
Programme 1
Programme 2
MMU
Mémoire
limites
CPU
Adresse
virtuelle Programme
base
Exercice mémoire virtuelle #1
• Dans un système en allocation contigüe avec partitions
à taille variable, un processus P1 occupe les adresses
mémoire 0x2000 à 0x4FFF.
• Aux « yeux » de P1, quelle est sa plage d’adresses
(virtuelles) disponible?
Mémoire
Programme 1
Programme 2
• Il peut y avoir une table par programme ou une table pour tous les programmes.
• Dans notre exemple, les pages ont 4Ko. Combien de bits avons-nous
besoin pour encoder la position de chaque octet dans la page?
10
• il y a 4K octets dans une page, donc 4K = 4 x 2
10 2 10 12
• log2(4 x 2 ) = log2(2 x 2 ) = log2(2 ) = 12 bits
Englander, ch. 18
Taille de la table des pages
• La table des pages est définie par:
• le nombre de lignes: il y a une ligne par page, donc c’est
équivalent au nombre de pages
Englander, ch. 18
Table des pages et table des pages inversée
Table des pages
• Caractéristiques du système: # page # trame
• Pages de 4Ko 0 1
1 2
• Mémoire physique (RAM) de 16Ko
2
• Mémoire virtuelle de 32Ko 3 0
• Charger valeur (e.g. LDR) à l’adresse 0x0A38 Table des pages inversée
• Écrire une valeur (e.g. STR) à l’adresse 0x3B97 # trame # page
0 page 3
• Charger la valeur (e.g. LDR) à l’adresse 0x2928
1 page 0
• Brancher (e.g. B) à l’adresse 0x7BF0 2 page 1
3
Table des pages et table des pages inversée
Table des pages
• Caractéristiques du système: # page # trame
• Pages de 4Ko 0 1
1 2
• Mémoire physique (RAM) de 16Ko
2
• Mémoire virtuelle de 32Ko 3 0
0 page 3
• Charger la valeur (e.g. LDR) à l’adresse 0x2928
1 page 0
• Brancher (e.g. B) à l’adresse 0x7BF0
2 page 1
3
Table des pages et table des pages inversée
Table des pages
• Caractéristiques du système: # page # trame
• Pages de 4Ko 0 1
1 2
• Mémoire physique (RAM) de 16Ko
2
• Mémoire virtuelle de 32Ko 3 0
• Écrire une valeur (e.g. STR) à l’adresse 0x3B97 Table des pages inversée
• l’adresse physique est 0x0B97 # trame # page
0 page 3
• Charger la valeur (e.g. LDR) à l’adresse 0x2928
1 page 0
• Brancher (e.g. B) à l’adresse 0x7BF0
2 page 1
3
Table des pages et table des pages inversée
Table des pages
• Caractéristiques du système: # page # trame
• Pages de 4Ko 0 1
1 2
• Mémoire physique (RAM) de 16Ko
2 ?
• Mémoire virtuelle de 32Ko 3 0
• Écrire une valeur (e.g. STR) à l’adresse 0x3B97 Table des pages inversée
# trame # page
• Charger la valeur (e.g. LDR) à l’adresse 0x2928
0 page 3
• Faute de page!
1 page 0
• Brancher (e.g. B) à l’adresse 0x7BF0
2 page 1
3
Allocation et désallocation des pages
• Les pages allouées à un programme peuvent se
retrouver séparées dans la mémoire. L’allocation de
pages est très simple: il suffit de maintenir une liste des
pages libres et de retirer une page libre pour l’allouer.
• Il est possible que plusieurs programmes utilisent une
même page s’ils ont du code en commun.
• Désallouer des pages est simple: il suffit de mettre une
page dans les pages libres.
• Qu’arrive-t-il si un programme a besoin d’une page qui
n’existe pas?
Fautes de page
• Une faute de page survient lorsque la page d’un
programme qui est requise n’est pas en mémoire.
• S’il y a de la place dans la table des pages
• la chercher sur le disque dur, la copier en mémoire, et mettre
à jour la table des pages
• Sinon
• il faut remplacer une autre page par la page requise.
Plusieurs algorithmes permettent de déterminer quelle page
sera remplacée. Par exemple, il est possible de remplacer la
page qui a été inutilisée depuis le plus longtemps ou il est
possible de remplacer la plus vieille page allouée.
Fautes de page
Englander, ch. 18
Table des pages et table des pages inversée
Table des pages
• Caractéristiques du système: # page # trame
• Pages de 4Ko 0 1
1 2
• Mémoire physique (RAM) de 16Ko
2 3
• Mémoire virtuelle de 32Ko 3 0
• Écrire une valeur (e.g. STR) à l’adresse 0x3B97 Table des pages inversée
# trame # page
• Charger la valeur (e.g. LDR) à l’adresse 0x2928
0 page 3
• L’adresse physique est 0x3928
1 page 0
• Brancher (e.g. B) à l’adresse 0x7BF0
2 page 1
3 page 2
Table des pages et table des pages inversée
Table des pages
• Caractéristiques du système: # page # trame
• Pages de 4Ko 0 1
1 2
• Mémoire physique (RAM) de 16Ko
2 3
• Mémoire virtuelle de 32Ko
3 0
• Effectuez la séquence d’opérations suivantes en 4
mettant à jour les tables à droite, et indiquez les 5
adresses physiques correspondantes
6
• Charger valeur (e.g. LDR) à l’adresse 0x0A38 7 ?
• Écrire une valeur (e.g. STR) à l’adresse 0x3B97 Table des pages inversée
• Charger la valeur (e.g. LDR) à l’adresse 0x2928 # trame # page
0 page 3
• Brancher (e.g. B) à l’adresse 0x7BF0
• Faute de page! Quelle trame utiliser? Que faire avec le 1 page 0
contenu de cette trame?
2 page 1
3 page 2
Table des pages et table des pages inversée
Table des pages
• Caractéristiques du système: # page # trame
• Pages de 4Ko 0 1
1 2
• Mémoire physique (RAM) de 16Ko
2 3
• Mémoire virtuelle de 32Ko 3 0
• Écrire une valeur (e.g. STR) à l’adresse 0x3B97 Table des pages inversée
# trame # page
• Charger la valeur (e.g. LDR) à l’adresse 0x2928
0 page 3
• Brancher (e.g. B) à l’adresse 0x7BF0 1 page 0
• L’adresse physique est 0x2BF0
2 page 7
3 page 2
Table des pages et table des pages inversée
Table des pages
# page # trame
0 1
2 3
3 0
5
• Tables finales: 6
7 2
0 page 3
1 page 0
2 page 7
3 page 2
Adresse d’un programme vs adresse de mémoire
• Lorsqu’un programme est écrit, des références à des adresses
logiques ou variables/fonctions sont définis.
• Lors de la compilation, un fichier objet est créé. Le fichier objet
contient le code et des tables pour les références.
• L’éditeur de lien utilise le code et les tables de plusieurs fichiers
objets afin de construire un programme.
• Le programme est sur le disque dur. Lorsqu’il est chargé en mémoire
à plusieurs endroits ou même à un seul, les adresses du programme
ne correspondent pas nécessairement aux adresses de la mémoire:
le MMU fera la translation entre l’adresse contenue dans le
programme et l’adresse physique.
• L’adresse utilisée dans le code d’un programme est rarement
l’adresse véritable d’une instruction ou d’une variable.
Exercice 1: Exemple de calculs reliés aux tables de pages
• Supposons une mémoire de 16 Mo et un système d’exploitation supportant des
pages de 4Ko pour des programmes ayant 64 Mo maximum. Supposons que 4 bits
par page de programme sont utilisés pour donner des informations supplémentaires
• Supposons l’extrait de la table de page pour le programme X suivant:
… … …
0x13 4 En mémoire
0x11 2 En mémoire
… … …
• Le nombre d’entrée dans la table de page sera le nombre de page virtuelle: nombre d’entrée = taille de
prog./taille des pages = 16k
• La taille d’une entrée est le nombre de bits qu’il faut pour d’écrire le numéro de page de mémoire + les
4 bits d’information. Le nombre de bits requis pour décrire le numéro de page de mémoire est
log2(nombre de page de mémoire). Donc:
• Q2
• Pour trouver l’adresse physique, il faut trouver le numéro de page virtuelle et le remplacer par le numéro
de page physique selon la table de page
• Le numéro de page virtuelle est l’adresse virtuelle divisée par la taille d’une page. Le reste de la division
est la position dans la page (offset)
• Selon la table de pages, la page 14h du programme est placé à la page B de la mémoire.