Title: Etienne Tremblay
1Etienne Tremblay
- Ordinateurs, Structure et Applications
GIF-16116
Cours 15, Gestion de la mémoire
Université Laval, Hiver 2007
2Rappel Allocation de la mémoire pour le DOS
- La mémoire du DOS est séparée en deux une partie
pour le système dopération, - Nous avons vu que le DOS allouait de la mémoire
pour un seul programme à la fois. - Le programme exécuté est segmenté (Le DOS a été
construit pour fonctionner avec le 8086 qui opère
avec des segments).
3Rappel Allocation de la mémoire pour Minos
- La mémoire du MINOS est séparée en six partitions
de taille fixe. - Une partition de MINOS est réservée au système
dexploitation. Les cinq autres partitions
contiennent des programmes. - Lusager décide où seront placés les programmes
en mémoire. Minos se contente de vérifier les
tailles des programmes afin de sassurer quelles
ne dépassent pas la taille de la partition.
4Allocation contiguë et translation dadresse
- Lallocation contiguë de mémoire consiste à
placer les programmes entiers dans une zone
unique de la mémoire. - Chaque programme a ses adresses internes (adresse
logique) et une adresse réelle (adresse physique)
en mémoire. - Pour faire la transition entre ladresse réelle
et ladresse logique, le MMU (voir le cours 3)
peut être conçu de façon très simple il suffit
de dadditionner ladresse de base du programme
(sa première adresse dans la mémoire physique) à
son adresse dans le programme. Il sagit dune
translation dadresse.
5Allocation contiguë, partitions de taille
variable ou fixe
- Lespace mémoire pour les programmes peut être
alloué dans des partitions de tailles fixes.
Lemplacement des partitions est alors
prédéterminé. - Lespace mémoire pour les programmes peut être
alloué dans des partitions de tailles variables.
Dans ce cas, les partitions sont créées de la
même taille que les programmes quelles
contiennent. Cela implique que lemplacement de
chaque partition est variable. - Lallocation contiguë de mémoire dans des
partitions à taille fixe est la méthode
dallocation de mémoire la plus simple, mais
beaucoup despace peut être perdu si les
programmes chargés en mémoire sont plus petits
que les partitions. Lallocation contiguë de
mémoire dans des partitions de taille variable
est mieux, mais plus difficile à gérer. Par
exemple, il faut maintenir une liste des espaces
mémoires disponibles.
6Fragmentation de la mémoire
- On définit un bloc de mémoire comme était un
espace contigu de mémoire. - La fragmentation de mémoire est une mesure du
nombre de blocs de la mémoire qui sont libres
(qui ne contiennent pas le OS ou un processus).
Une mémoire fragmentée est une mémoire dans
laquelle plusieurs blocs de mémoires non
contiguës sont libres. - Lallocation contiguë de partitions à taille fixe
crée de la fragmentation interne. Entre chaque
partition de taille fixe, un peu de mémoire est
perdue parce que le programme contenu dans la
partition na pas nécessairement la même taille
que la partition. - Lallocation contiguë de partitions à taille
variable crée de la fragmentation externe.
Lorsquun programme est retiré de la mémoire, il
laisse un bloc de mémoire libre. Il est possible,
par la suite, que ce bloc soit rempli
partiellement par un processus de taille moindre
(dans une nouvelle partition). Il reste alors de
la mémoire libre à lextérieur des partitions. - Une mémoire très fragmentée est une mémoire lente
et une mémoire dans laquelle des blocs
(programmes) de grandes dimensions ne peuvent
plus être mis, car lespace libre est répartie
partout dans le mémoire. Il existe des méthodes
de compaction (pour la mémoire) et
défragmentation (pour un disque dur) afin de
réduire la fragmentation.
7Un mot sur les algos dordonnancement de la
mémoire
- Il existe plusieurs algorithmes afin de
déterminer lemplacement dun programme en
mémoire (allocation contiguë). Le but de tous ces
algorithmes est de maximiser lespace mémoire
occupé. - First Fit Le programme est mis dans le premier
bloc de mémoire suffisamment grand à partir du
début de la mémoire. - Next Fit Le programme est mis dans le premier
bloc de mémoire suffisamment grand à partir du
dernier bloc alloué. - Best Fit Le programme est mis dans le bloc de
mémoire le plus petit dont la taille est
suffisamment grande pour lespace requis. - Worse Fit Le programme est mis dans le bloc de
mémoire le plus grand. - Même si Best Fit semble le meilleur, ce nest pas
lalgo retenu en pratique il demande trop de
temps de calcul. Par ailleurs, Next Fit crée plus
de fragmentation que First Fit. Aussi First Fit,
malgré sa simplicité apparente, est souvent
utilisé.
8Mémoire paginée
- Un gros programme peut être difficile à placer de
manière contiguë en mémoire. La solution à ce
problème consiste à séparer le programme en
petite parties de taille fixes des pages. Chaque
partie se retrouve à un endroit différent de la
mémoire. - Il faut maintenir une table de correspondance
entre les pages des programmes et les pages de la
mémoire (appelées frames). La table de
correspondance sappelle Table des pages (page
table). Il peut exister une table par programme
ou une table pour tous les programmes. - Le principe de localité (les prochaines
instructions à exécuter dun programme sont
probablement adjacentes à linstruction en cours)
permet de conclure quavoir quelques pages dun
programme seulement dans la mémoire physique est
suffisant. Ainsi mettre une partie seulement du
programme dans la mémoire peut permettre
déconomiser de lespace mémoire précieux. - Ajouter de linformation dans la table des pages
permet de dire si les pages dun programme sont
dans la mémoire ou encore sur le disque. Cet
ajout conduit au concept de mémoire virtuelle
présenté dans le cours 3.
9Allocation, désallocation et remplacement de pages
- Les pages allouées à un programme peuvent se
retrouver séparées dans la mémoire. Lallocation
de pages est très simple il suffit de maintenir
une liste des pages libres et de retirer une page
libre pour lallouer. - Il est possible que plusieurs programmes
utilisent une même page sils ont du code en
commun. - Désallouer des pages est simple il suffit de
mettre une page dans les pages libres. - Une faute de page survient lorsque la page dun
programme qui est requise nest pas en mémoire.
Si toute la mémoire est occupée, 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 long temps ou il est
possible de remplacer la plus vieille page
allouée.
10Table des pages
Tiré de The architecture of computer hardware
and software, p. 484
11Illustration de la mémoire virtuelle
Tiré de The architecture of computer hardware
and software, p. 484
12Traduction dadresse, MMU et TLB
- Le MMU dune mémoire paginée est plus complexe
que celui dune mémoire allouée de façon
contiguë. En effet, pour tous les accès à la
mémoire, il faut accéder à la table de pages afin
de décoder ladresse à lire. Comme la table de
page est souvent volumineuse, elle est elle-même
en mémoire il faut faire deux lectures de la
mémoire pour aller chercher une instruction, ce
qui est très long et quasi-inadmissible. - Le TLB, Translation Lookaside Buffer, est une
table de registres très rapides à lintérieur du
CPU. Le TLB contient quelques entrées de la table
de pages, les dernières utilisées. Il sagit
dune forme de cache. Pour faire de la traduction
dadresse, le MMU regarde dabord si la page à
traduire est dans le TLB. Puisque le TLB contient
les dernières entrées de la page de table
utilisées, alors le MMU y trouve presque toujours
la page à lire. Lorsquun hit se produit dans le
TLB, le temps daccès à la mémoire nest pas
augmenter par la pagination.
13Table des pages inversée
- Pour plusieurs raisons, il peut être utile de
savoir quel page de quel processus utilise quel
page physique. Afin davoir cette information, il
faut construire une page de table inversée. Une
page de table inversée est donc une table pour
laquelle lindice de la table est un numéro de
frame et le contenu de la table est une page de
processus. - La taille dune page de table inversée est fixe
et directement proportionnelle à la taille de la
mémoire ou à la taille des pages.
14Segmentation
- Il est possible de séparer la mémoire physique en
segments plutôt quen page. Les segments sont
identifiés par des registres spéciaux (comme par
exemple CS,DS,ES et SS du 8086). - Pour le 8086, les registres segments sont
multipliés par 16 afin dobtenir ladresse de
base dun segment. - Pour les processeurs x86 plus récents (ex.
pentium) les registres segments sont en fait des
sélecteurs ils contiennent un numéro de segment.
À partir de ce numéro, ladresse de base dun
segment est extraite dune table, la table des
segments.
15Segmentation vs pagination
- Les segments sont décrits par des registres et
une petite table de segments alors que les pages
sont décrites par une table volumineuse. - La méthode de calcul de ladresse physique en
fonction de ladresse logique nest pas la même
pour la segmentation que pour la pagination - Pour la pagination, le numéro de page est
remplacé par un numéro de frame et loffset est
conservé afin dobtenir ladresse physique. - Pour la segmentation, le numéro de segment permet
de déterminer une adresse qui est additionnée à
loffset afin dobtenir ladresse physique.
16Segmentation vs pagination (système 16 bits)
17Adresse dun programme vs adresse de mémoire
- Lorsquun 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. Lorsquil est
chargé en mémoire à plusieurs endroits ou même à
un seul, les adresses du programmes ne
correspondent pas nécessairement aux adresses de
la mémoire le MMU fera la translation entre
ladresse contenue dans le programme et ladresse
physique. - Ladresse utilisée dans le code dun programme
est rarement ladresse véritable dune
instruction ou dune variable.
18Références et exercices
- Références
- Irv Englander 15.5 et 15.6
- IFT-10544 Systèmes dexploitation, Notes de cours
Édition 2004. - William Stallings section 8.3
- Exercices
- 15.11, 15.21 et 15.22