Vous êtes sur la page 1sur 29

Chapitre 9

Gestion de la mmoire
mmoire principale est le lieu o se trouvent les programmes et les donnes quand le processeur les excute. On loppose au concept de mmoire secondaire, reprsente par les disques, de plus grande capacit, o les processus peuvent sjourner avant dtre excuts. La ncessit de grer la mmoire de manire optimale est toujours fondamentale, car en dpit de sa grande disponibilit, elle nest, en gnral, jamais sufsante. Ceci en raison de la taille continuellement grandissante des programmes. Nous verrons quil y a plusieurs schmas pour la gestion de la mmoire, avec leurs avantages et inconvnients.
A

9.1 Introduction
9.1.1 Rappels sur la compilation
La production dun programme passe par plusieurs phases, comme illustr la gure 9.1 : criture en langage source (C/C++, Pascal,... ). Compilation en module objet (langage machine). Peuvent inclure des bibliothques. Appel aux bibliothques : point de branchement. Assemblage en image binaire. dition de liens statiques. dition de liens dynamiques. Chargement en mmoire pour excution. 1

2
Modules source

CHAPITRE 9. GESTION DE LA MMOIRE


Traducteur Modules objet

Bibliothque statique

diteur de liens

Module excutable

Chargeur

Bibliothque dynamique

Liaison et Chargement dynamiques

Image mmoire

F IG . 9.1 Phases de la compilation. Reprsentation des adresses mmoire Code source : adresses symboliques. Par exemple : int compteur Module objet : adresses traduites. Par exemple le 50me mot depuis le dbut despace mmoire. Module excutable, chargement : adresses absolues. Par exemple lemplacement mmoire situ ladresse FFF7 Liaison dadresses Le programme rside sur disque comme Fichier excutable. Il est ensuite charg en mmoire pour tre excut. Il peut rsider, le plus souvent, dans une partie quelconque de la mmoire. On les appelle Programmes translatables 1 . Les programmes .com de MS/DOS constituent cependant une exception car la compilation est statique.
Translation sera synonime de traduction dans notre contexte, et pourront tre utiliss indistinctement.
1

9.1. INTRODUCTION
Liaison des instructions des adresses mmoire

Pendant la compilation : Si lemplacement du processus en mmoire est connu, le compilateur gnre des adresses absolues. Pendant le chargement : Code translatable si lemplacement du processus en mmoire nest pas connu. Pendant lexcution : dplacement dynamique du processus possible. Utilise des fonctions du matriel. Espace dadressage logique ou physique Lunit centrale manipule des adresses logiques (emplacement relatif). Les programmes ne connaissent que des adresses logiques, ou virtuelles. Lespace dadressage logique (virtuel) est donc un ensemble dadresses pouvant tre gnres par un programme. Lunit mmoire manipule des adresses physiques (emplacement mmoire). Elles ne sont jamais vues par les programmes utilisateurs. Lespace dadressage physique est un ensemble dadresses physiques correspondant un espace dadresses logiques.

9.1.2 La gestion de la mmoire


La mmoire centrale peut avoir une reprsentation Linaire et uniforme ou Diffrencie : Linaire et uniforme : Mmoire non diffrencie, avec un espace dadressage linaire ou plat (One level at address space ). Diffrencie : Avec des segments linaires spciques et disjoints pour les procdures, la table de symboles, les programmes, etc. ou avec un adressage segment laide de deux index, un qui contrle le numro de segment et un autre qui contrle ladresse dans le segment. La gestion de la mmoire a deux objectifs principaux : dabord le partage de mmoire physique entre les programmes et les donnes des processus prts, et ensuite la mise en place des paramtres de calcul dadresses, permettant de transformer une adresse virtuelle en adresse physique. Pour ce faire le gestionnaire de la mmoire doit remplir plusieurs tches : Connatre ltat de la mmoire (les parties libres et occupes de la mmoire). Allouer de la mmoire un processus avant son excution. Rcuprer lespace allou un processus lorsque celui-ci se termine.

CHAPITRE 9. GESTION DE LA MMOIRE

Traiter le va-et-vient (swapping ) entre le disque et la mmoire principale lorsque cette dernire ne peut pas contenir tous les processus. Possder un mcanisme de calcul de ladresse physique (absolue) car, en gnral, les adresses gnres par les compilateurs et les diteurs de liens sont des adresses relatives ou virtuelles. En gnral, pour ne pas ralentir laccs la mmoire le calcul des adresses est ralis par le matriel. Comme nous allons le voir, les techniques de gestion de la mmoire sont trs conditionnes par les caractristiques du systme (monoprogramm ou multiprogramm) et du matriel (registres de base et limite, MMU). Nous passerons en revue un certain nombre de mthodes de gestion de la mmoire.

9.2 Systme monoprogramm


9.2.1 Machine nue
Il sagit dun des schmas de gestion de mmoire les plus simples. Lutilisateur a tout le contrle sur lespace de mmoire, comme le montre la gure 9.2. Cette gestion a comme avantages la exibilit : lutilisateur peut contrler sa guise lusage de la mmoire et un cot minime, car il ny a pas besoin de matriel spcique pour limplanter. Parmi ses limitations, on peut citer linexistance des services dentres-sorties, des priphriques externes et de gestion derreurs. Ce schma est utilis en systmes ddis des tches spciques dune grande simplicit. 0 1 . . . n-1 F IG . 9.2 Machine nue.

9.2.2 Moniteur rsident


Le schma suivant est celui qui divise la mmoire en deux sections, une pour les programmes des utilisateurs et une autre pour le moniteur rsident du systme. Le moniteur rsident se retrouve typiquement dans les

9.2. SYSTME MONOPROGRAMM

premires adresses du systme, comme illustr la gure 9.3. Les composantes principales dun systme dexploitation prsentes dans la section du moniteur sont le vecteur dinterruptions qui donne accs aux services dE/S et les tables PCB (Bloc de Contrle de Processus). 0 Moniteur . . . n-1 F IG . 9.3 Moniteur rsident. Un exemple de tel type de moniteur est celui de MS-DOS. Un seul processus utilisateur est en mmoire un instant donn (cette technique nest plus utilise de nos jours). On trouve en mmoire, par exemple, le systme dexploitation en mmoire basse, les pilotes de priphriques en mmoire haute (dans une zone allant de 640 Ko 1 Mo) et un programme dutilisateur entre les deux (voir gure 9.4). Pilotes en ROM (BIOS) Programme dutilisateur (RAM) Systme dexploitation (RAM) F IG . 9.4 Organisation de la mmoire du PC sous MS-DOS. Lorsque la mmoire est organise de cette manire, il ne peut y avoir quun seul processus qui sexcute un instant donn. Lutilisateur entre une commande sur un terminal et le systme dexploitation charge le programme demand en mmoire puis lexcute. Lorsquil se termine, le systme dexploitation afche une invitation sur le terminal et attend la commande suivante pour charger un nouveau processus qui remplace le prcdent. Pour protger le code et les donnes du systme dexploitation des changements que peuvent provoquer les programmes des utilisateurs, il

Programmes

CHAPITRE 9. GESTION DE LA MMOIRE

y a un registre limite (montr la gure 9.5) qui contient ladresse partir de laquelle commencent les instructions et donnes des programmes des utilisateurs. Chaque adresse (instruction ou donne) gnre par un programme est compare avec le registre limite. Si ladresse gnre est suprieure ou gale la valeur du registre, on laccepte, sinon on refuse laccs et on interrompt le processus avec un message daccs illgal de mmoire.
Registre limite

UCT

adresse reg. lim

Mmoire

Erreur: Adressage illgal

F IG . 9.5 Registre limite. Toute rfrence la mmoire doit tre vrie, ce qui implique un ralentissement du systme. Il y a plusieurs stratgies pour implanter le registre limite. Lune dentre elles consiste utiliser une valeur xe, enregistre au niveau matriel ou au dbut du dmarrage du systme. Cependant si la valeur choisie est trop petite et que le systme dexploitation grandisse, il se retrouvera dans une zone non protge, ou au contraire, lespace pour les programmes serait diminu. Une solution est lexistence dun registre variable pour permettre dinitialiser diffrentes valeurs dadresses au registre limite. Celui-ci peut tre charg par le systme dexploitation qui utilise des privilges spciaux, cest dire, on excute le systme dexploitation en mode moniteur.

9.3 Systme multiprogramm


La multiprogrammation permet lexcution de plusieurs processus la fois. Elle permet doptimiser le taux dutilisation du processeur en rduisant notamment les attentes sur des entres-sorties. Cette technique nces-

9.3. SYSTME MULTIPROGRAMM

site la prsence de plusieurs processus en mmoire. La mmoire est donc partage entre le systme dexploitation et plusieurs processus. Il se pose cependant le problme suivant : comment organiser la mmoire de manire faire cohabiter efcacement plusieurs processus tout en assurant la protection des processus ? Deux cas sont alors distinguer : Multiprogrammation sans va-et-vient. Dans ce cas, un processus charg en mmoire y sjournera jusqu ce quil se termine (pas de va-etvient entre la mmoire et le disque). Multiprogrammation avec va-et-vient. Dans ce cas, un processus peut tre dplac temporairement sur le disque (mmoire de rserve : swap area ou backing store ) pour permettre le chargement et donc lexcution dautres processus. Le processus dplac sur le disque sera ultrieurement recharg en mmoire pour lui permettre de poursuivre son excution. Ce schma pose dautres difcults : tant donn que les processus sont chargs diffrentes adresses, les adresses relatives gnres par les compilateurs et les diteurs de liens sont diffrentes des adresses physiques, alors comment raliser la translation dadresses ? Dun autre cot, la cohabitation de plusieurs processus en mmoire doit assurer leur protection : il ne faut pas permettre un processus dun utilisateur dadresser la mmoire des processus des autres utilisateurs. Quelle est la meilleur manire dassurer la protection des processus contre les intrusions des autres ?

9.3.1 Translation des adresses lors du chargement et protection


Utiliser un registre limite a des consquences. Dabord les programmes doivent possder un mcanisme pour leur permettre de dterminer si un changement dans la valeur du registre limite sera ou non illgal. Pour viter cela, la solution triviale consiste recompiler le programme. Mais ceci nest pas optimal. La solution optimale est la gnration de code relocalisable, cest dire un code o les instructions et les donnes vont se lier leurs adresses dnitives en mmoire en temps de chargement et pas en temps de compilation. Cependant, le registre limite ne peut pas tre modi pendant lexcution dun programme : le systme dexploitation doit attendre quaucun programme ne sexcute avant de le modier. Il existe alors deux manires pour que le systme dexploitation puisse changer la taille du moniteur : la premire o les programmes des utilisateurs sont chargs depuis de hautes positions de mmoire vers le moniteur (voir la gure 9.6). La deuxime

CHAPITRE 9. GESTION DE LA MMOIRE

consiste effectuer les liens des adresses dans le temps dexcution, et ajouter chaque adresse gnre par le programme la valeur du registre limite. De cette faon les programmes vont manipuler des adresses logiques et le matriel de gestion de mmoire les convertira en adresses physiques, comme montr la gure 9.7. 0 Moniteur

Programmes

. . . n-1

F IG . 9.6 Chargement des programmes depuis les hautes positions.


Registre base 1200

UCT

Adresse logique 346

Adresse physique 1546

Mmoire

F IG . 9.7 Registres limite.

9.4 Swapping
Le schma de moniteur rsident a t utilis depuis lintroduction des premiers systmes dexploitation multiprogramms. On utilise une partie de la mmoire pour le moniteur rsident et le reste pour les programmes des utilisateurs. Quand le systme dexploitation rend le contrle au programme suivant, le contenu de la mmoire est copi un stockage temporaire, et les donnes et les instructions dun nouveau programme sont rcu-

9.5. PARTITIONS FIXES SANS VA-ET-VIENT

prs depuis le stockage secondaire vers la mmoire principale. Ce schma est connu sous le nom de swapping . Le stockage temporaire peut tre un disque rapide, ayant lespace ncessaire pour contenir les images mmoire de tous les programmes en excution (rsidents dans la le de prts). videmment le temps de swapping est trop grand compar au temps de lUCT, cest pourquoi il est prfrable que chaque processus qui obtient le contrle de lUCT sexcute pour un temps suprieur au temps de swap (voir gure 9.8).
Stockage temporaire Moniteur buffer 1 3 buffer 2 1 swap-out 2 1 swap-in 1 Prog. utilisateur 1 Prog. utilisateur 2

programme en excution Mmoire

F IG . 9.8 (1) Tant que le programme sexcute, le systme dexploitation fait un swapping de 2 processus, lun qui sort (swap out) et lautre qui rentre (swap-in). (2) Quand le processus en excution se termine, ses donnes et instructions passent au buffer 2 pour ensuite faire swap-out de ce processus. (3) Depuis le buffer 1 on extrait les donnes et les instructions dun nouveau processus sexcuter.

9.5 Partitions xes sans va-et-vient


Dans ce schma, plusieurs programmes peuvent partager la mmoire. Pour chaque utilisateur il existe une partition. La mthode la plus simple consiste diviser la mmoire en partitions qui peuvent tre de tailles gales ou ingales. On appelle ceci Mutiprogramming with a Fixed Number of Tasks (MFT). 2
Ce partitionnement peut tre fait par loprateur au dmarrage du systme, comme cest le cas du OS/MFT 360 de IBM.
2

10

CHAPITRE 9. GESTION DE LA MMOIRE

Avec MFT, le nombre et la taille des partitions sont xs lavance. Par exemple, avec une mmoire de 32 Ko, et un moniteur utilisant 10 Ko, le reste de 22 Ko peut tre divis en 3 partitions xes de 4Ko, 6 Ko et 12 Ko. La dcision sur le nombre et la taille des partitions dpend du niveau de multiprogrammation voulu. En tout cas, le programme avec le plus grand besoin de mmoire doit avoir au moins, une partition pour y mettre ses donnes et instructions. MFT doit implanter des mcanismes de protection pour permettre plusieurs programmes de sexcuter sans envahir lespace dadresses dautre programme. Pour cela il existe deux registres qui indiquent la plage des adresses disponibles pour chaque programme. Les deux interprtations courantes sont les registres limite et les registres base-limite.

9.5.1 Registres limite


Dans ce cas, les valeurs des registres indiquent la valeur de ladresse de mmoire la plus petite et la plus grande quun programme puisse atteindre. Il y a une paire de valeurs de ces registres limite pour chaque programme en excution. Chaque accs en mmoire entrane deux vrications : la premire pour ne pas aller en dessous de la limite infrieure, et la seconde pour ne pas aller au dessus de la limite suprieure de mmoire, comme illustr sur les gures 9.9 et 9.10. Moniteur processus 1 . . . processus i . . . processus n F IG . 9.9 Registres limite et mmoire.

reg. limite infrieur reg. limite suprieur

9.5.2 Registres de base et limite


Pour viter les problmes de translation dadresse au cours du chargement dun processus et de protection, une autre solution consiste doter la machine de deux registres matriels spciaux : le registre de base et le registre limite, comme montr sur la gure 9.11.

9.5. PARTITIONS FIXES SANS VA-ET-VIENT


Registre limite infrieur Registre limite suprieur

11

SE CPU
adresse <

adresse

Mmoire

Erreur: Adressage illgal

F IG . 9.10 Registres limite.


Registre limite Registre base

SE UCT
adresse <

Mmoire F

Erreur: Adressage illgal

F IG . 9.11 Registres de base et limite. Quand on lance un processus, on charge dans le registre de base la limite infrieure de la partition qui lui est attribue (adresse absolue du dbut de la partition) et dans le registre limite la longueur de la partition. Pendant lexcution dune instruction, les adresses relatives rfrences par linstruction sont translates en adresses physiques en ajoutant le contenu du registre de base chaque adresse mmoire rfrence, on vrie ensuite si les adresses ne dpassent pas le registre limite an dinterdire tout accs en dehors de la partition courante3 . Un important avantage du registre de base est que les programmes peuvent tre dplacs en mmoire aprs le dbut de leur excution. Il suft
Le PC sous MS-DOS utilise une version simplie de ce mcanisme. Voir la note la n de ce chapitre.
3

12

CHAPITRE 9. GESTION DE LA MMOIRE

pour cela de changer la valeur du registre de base, et ventuellement celle du registre limite.

9.5.3 Fragmentation
Avec le schma MFT, on fait face au problme de fragmentation, puisquon gnre deux types despaces de mmoire non utiliss : la partie dune partition non utilise par un processus est nomme fragmentation interne. Ceci est d au fait quil est trs difcile que tous les processus rentrent exactement dans la taille de la partition. Les partitions qui ne sont pas utilises, engendrent la fragmentation externe. Le phnomne de fragmentation est montr sur la gure 9.12.
Moniteur Partition 2K Fragmentation interne

Partition 4K

Fragmentation externe

Partition 6K

Mmoire

F IG . 9.12 Fragmentation interne et externe.

9.5.4 Files dentre


Un autre aspect important est celui de la gestion des requtes de la mmoire. Il peut y avoir une le unique qui stocke toutes les requtes pour toutes les partitions ou bien une le pour chaque partition. La gure 9.13 gauche montre une conguration les dentre multiples, et droite, une le unique pour les requtes.

9.5. PARTITIONS FIXES SANS VA-ET-VIENT


SE

13

Nouveaux processus

Nouveaux processus

F IG . 9.13 File dentre multiple gauche, et le unique droite. Files dentre multiples Chaque nouveau processus est plac dans la le dattente de la plus petite partition qui peut le contenir. Lespace inutilis dans une partition alloue un processus est perdu cause de la fragmentation interne. La situation suivante peut se produire : des processus en attente alors quil y a des partitions vides. La solution ce problme consiste en lutilisation dune seule le dattente. File dentre unique Les processus sont placs dans une seule le dattente jusqu ce quune partition se libre. Lorsquune partition se libre, il faut choisir dans la le dentre le prochain processus charger dans la partition. Le processus charg rsidera en mmoire jusqu ce quil se termine (pas de va-et-vient). Il y a cependant des inconvnients comme la fragmentation interne et le fait que le nombre de processus en excution est xe. Exemple 1. Considrez la conguration montre sur la gure 9.14 pour une le dentre unique, on voit que le processus qui a besoin de 5 Ko entre dans la partition de 6 Ko, le processus de 2 Ko dans la partition de 2 Ko. Le troisime processus de la le reste en attente, bloquant le quatrime processus, qui pourrait sexcuter dans la partition de 4K, qui est libre, mais

14

CHAPITRE 9. GESTION DE LA MMOIRE

aussi le processus de 1 Ko pourrait tre excut dans cette partition. Cette dcision montre lalternative entre le concept best-t-only (cest dire, excuter le processus le plus adquat en termes despace) et rst-t only, o on excute le processus avec une priorit plus haute, qui est en tte de la liste.
Moniteur Partition 2K

4K 1K 5K 3K 1K 2K 5K

Partition 4K

Partition 6K

Mmoire

F IG . 9.14 Conguration de le dentre unique.

Moniteur 1K 2K Partition 2K

Partition 4K 4K 3K

6K 6K

Partition 6K

Mmoire

F IG . 9.15 Conguration de les multiples. Pour assurer la protection des processus dans le systme IBM 360, IBM fut oblige :

9.6. PARTITIONS VARIABLES ET VA-ET-VIENT

15

Diviser la mmoire en blocs de 2Ko et assigner 4 bits de protection chaque bloc. Le mot dtat ou PSW (program status word ) contenait une cl de 4 bits. Le 360 droutait toutes tentatives daccs la mmoire dont les codes de protection diffraient de la cl du PSW. Ce mcanisme interdisait les interactions entre les processus ou entre les processus et le systme dexploitation. Lorganisation de la mmoire en partitions xes sans va-et-vient est une mthode facile mettre en uvre pour les systmes traitement par lots. Mais avec les systmes temps partag, la situation est diffrente. Puisque la mmoire ne peut pas contenir les processus de tous les utilisateurs, il faut placer quelques uns sur le disque, en utilisant le va-et-vient. Il faut, bien sr, ramener ces processus en mmoire principale avant de les excuter. Le mouvement des processus entre la mmoire principale et le disque est appel va-et vient (swapping en anglais). Un autre inconvnient de la partition xe est la perte de place cause des programmes qui sont plus petits que les partitions.

9.6 Partitions variables et va-et-vient


Le problme principal avec MFT est la dtermination optimale des tailles des partitions pour minimiser la fragmentation externe et interne. En systmes hautement dynamiques, o on ignore le nombre et la taille des processus cela est impossible. Mme dans des systmes avec une charge connue lavance, ceci peut devenir problmatique. Par exemple, imaginez un systme simple avec une mmoire de 120 Ko, tous les processus utilisent moins de 20 Ko, sauf un qui utilise 80 Ko et qui sexcute une fois par jour. videment pour permettre tous les processus de sexcuter le systme doit possder au moins une partition de 80 Ko, et les autres partitions de 20 Ko. Ainsi le systme utilisera seulement une fois par jour les 80 Ko, et le reste du temps elle sera inutilise, avec une fragmentation externe de 80 Ko ; ou bien elle sera occupe partiellement par un processus de 20 Ko avec une fragmentation interne de 60 Ko. Dans les deux cas on nutilise que la moiti de la mmoire du systme. La solution consiste faire que les zones de mmoire varient dynamiquement. Cette technique sappelle assignation de multiples partitions de mmoire taille variable (MVT). Le systme dexploitation a une liste de toutes les zones de mmoire non utilises et de toutes celles utilises, ainsi

16

CHAPITRE 9. GESTION DE LA MMOIRE

quand un nouveau processus doit sexcuter, on trouve un espace de mmoire assez grande pour lui contenir et on met toutes ses donnes et instructions dans cet espace pour lexcuter. Avec des partitions variables le nombre et la taille des processus en mmoire varient au cours du temps. Lallocation de la mmoire varie en fonction de larrive et du dpart des processus et de la mmoire principale. Cette forme dallocation conduit ventuellement lapparition des trous. Exemple 2. Considrez les caracteristiques suivantes dun ensemble de processus : Processus 1 2 3 4 5 Besoins de mmoire 60K 100K 30K 70K 50K Temps 10 5 20 8 15

TAB . 9.1 Leur ordonancement et besoins mmoire sont montrs sur les gures 9.16 et 9.17.
0K Moniteur 40K processus 1 100K 100K 40K processus 1 0K Moniteur

processus 2 200K 230K 256K a) 200K 230K 256K b)

processus 3

processus 3

F IG . 9.16 Sous un ordonnanceur robin-round (a) le premier qui termine et libre de la mmoire est le processus 2. On peut runir les espaces inutiliss en une seule partition en dplaant tous les processus vers le bas, comme le fait le compactage de mmoire montr sur la gure 9.18. Cette mthode nest gnralement pas utilise car

9.6. PARTITIONS VARIABLES ET VA-ET-VIENT


0K Moniteur 40K processus 1 100K processus 4 170K 200K 230K 256K c) 40K 90K 100K processus 5 0K Moniteur

17

processus 4

processus 3

200K 230K 256K

processus 3

d)

F IG . 9.17 Selon FCFS (b) le processus 4 entre. Aprs le processus 1 termine (c) et le processus 5 entre en excution (d). elle requiert beaucoup de temps processeur. En revanche, elle est utilise sur les grands ordinateurs car ils possdent des circuits spcialiss 4 . Lallocation est simple si les processus ont une taille xe quils ne modient jamais. Si par contre, les tailles des segments de donnes des processus peuvent varier (par exemple par lutilisation dallocation dynamique), on a des difcults ds quun processus demande de la mmoire. Sil existe un espace libre adjacent au processus, ce dernier pourra occuper cet espace mmoire. Si cela nest pas le cas, il faut soit le dplacer dans un emplacement plus grand qui peut le contenir, soit dplacer un ou plusieurs processus sur le disque pour crer un emplacement de taille sufsante. Si la mmoire est sature et si lespace de va-et-vient sur le disque ne peut plus contenir de nouveaux processus, il faut tuer le processus qui a demand de la mmoire. La taille des processus augmente, en gnral, au cours de leur excution. On peut donc allouer chaque processus dplac ou recopi partir du disque un peu plus de mmoire quil en demande an de rduire le temps systme perdu pour cette gestion. Il faut cependant recopier sur disque uniquement la mmoire rellement utilise par le processus. Pour grer lallocation et la libration de lespace mmoire, le gestionnaire doit connatre ltat de la mmoire. Il existe trois manires de mmoriser loccupation de la mmoire :
Il faut 1 seconde pour compacter la mmoire de 1 Mo sur un PC. La CDC Cyber a de circuits qui compactent la mmoire la vitesse de 40 Mo/s.
4

18
0K SE 40K 90K 100K processus 5

CHAPITRE 9. GESTION DE LA MMOIRE


0K SE 40K 90K processus 5

processus 4 160K 200K 230K 256K 190K processus 3 256K

processus 4 processus 3

F IG . 9.18 Compactage de mmoire. 1. Les tables de bits ou bitmaps. 2. Les listes chanes. 3. Les subdivisions.

9.6.1 Gestion de la mmoire par table de bits


La mmoire est divise en units dallocation dont la taille peut varier de quelques mots plusieurs Ko. A chaque unit, on fait correspondre un bit dans une Table de bits ou bitmap qui est mis 0 si lunit est libre et 1 si elle est occupe (ou vice versa), comme illustr la gure 9.19. Plus lunit dallocation est faible plus la table de bits est importante. En augmentant la taille de lunit dallocation, on rduit la taille de la table de bits mais on perd beaucoup de place mmoire (fragmentation interne). 0 0 1 1 0 0 0 1 1 1

F IG . 9.19 Table de bits. Inconvnient : Lorsquon doit ramener un processus de k units, le gestionnaire de la mmoire doit alors parcourir la table de bits la recherche de k zros conscutifs. Cette technique est rarement utilise car la mthode de recherche est lente. La gure 9.20 montre ltat de la mmoire avec trois processus qui tournent et la table de bits correspondante.

9.6. PARTITIONS VARIABLES ET VA-ET-VIENT


0 P1 8 16 P2 24 32 P3

19

11111100 00001111 11111100 00000000 000111

F IG . 9.20 tat de mmoire avec trois processus et son bitmap.

9.6.2 Gestion de la mmoire par liste chane


Pour mmoriser loccupation de la mmoire, on utilise une liste chane des segments libres et occups. Un segment est un ensemble dunits dallocations conscutives. Un lment de la liste est compos de quatre champs qui indiquent : Ltat libre ou occup du segment. Ladresse de dbut du segment. La longueur du segment. Le pointeur sur llment suivant de la liste. Les listes peuvent tre organises en ordre : de libration des zones, croissant des tailles, dcroissant des tailles, des adresses de zones. Par exemple, pour une mmoire ayant ltat doccupation montr sur la gure 9.21a) on aurait la liste 9.21b). Libration despace Cet exemple, pris de [?], montre que quatre cas peuvent se prsenter lors de la libration de lespace occup par un processus X. 1er cas. Modier lindicateur de ltat du segment (il passe libre). A X B A B 2me cas. Fusionner les deux segments (il passe libre). A X A 3me cas. Modier lindicateur de ltat du segment (il passe libre). Fusionner les deux segments. X B B

20
0 5 7

CHAPITRE 9. GESTION DE LA MMOIRE


12 32 35

occup
a)

libre

O 0 5

L 5 2

O 7 5

L 12 20

O 32 3

b)

F IG . 9.21 a) tat de mmoire. b) Liste chane. 4me cas. Modier lindicateur de ltat du segment (il passe libre). Fusionner les trois segments. X Allocation despace Lallocation dun espace libre pour un processus peut se faire suivant quatre stratgies principales : le premier ajustement ou rst t, la zone libre suivante , le meilleur ajustement ou best t et le pire ajustement ou worst t. 1re zone libre (rst t ) Dans le cas du premier ajustement , on recherche le premier bloc libre de la liste qui peut contenir le processus quon dsire charger. La zone est scinde en deux parties : la premire contient le processus et la seconde est lespace inutilis (sil noccupe pas toute la zone). Inconvnient : Fragmentation externe (Segments libres entre processus). Zone libre suivante Il est identique au prcdent mais il mmorise en plus la position de lespace libre trouv. La recherche suivante commencera partir de cette position et non partir du dbut. Meilleur ajustement (best t ) On cherche dans toute la liste la plus petite zone libre qui convient. On vite de fractionner une grande zone dont on pourrait avoir besoin ultrieurement. Cet algorithme est plus lent que le premier. Il a tendance remplir la mmoire avec de petites zones libres inutilisables.

9.6. PARTITIONS VARIABLES ET VA-ET-VIENT

21

Plus grand rsidu ou pire ajustement (worst t ) Il consiste prendre toujours la plus grande zone libre pour que la zone libre restante soit la plus grande possible. Les simulations ont montr que cette stratgie ne donne pas de bons rsultats.

9.6.3 Algorithme utilisant deux listes spares


La complexit de la gestion est accrue car cela ncessite des dplacements dlments dune liste une autre. Lalgorithme de placement rapide utilise des listes spares pour les tailles les plus courantes (la liste des zones de 4 Ko, la liste des zones de 8 Ko, et ainsi de suite). La recherche est plus rapide, mais lors de la libration il faut examiner les voisins an de voir si une fusion est possible, sinon on aura une fragmentation en petites zones inutilisables.

9.6.4 Gestion de la mmoire par subdivision


Dans le schma de gestion par subdivision ou Buddy system ), le gestionnaire de la mmoire mmorise une liste des blocs libres dont les tailles sont de 1, 2, 4, . . . octets jusqu la taille maximale de la mmoire. Initialement, on a un seul bloc libre. Lorsquil ny a plus de bloc de taille    , on subdivise un bloc de taille en deux blocs de taille . Sil ny a   plus de bloc de taille , on casse un bloc de taille , et ainsi de suite.  Lors dune libration de bloc de taille , si le bloc compagnon est libre,  . Pour un systme binaire5 la il y a reconstitution dun bloc de taille relation de rcurrence sur les tailles est donc :
! " 

Par exemple, supposons que la taille maximale de mmoire principale est de 1 Mo et que un processus de 70 Ko demande tre charg. Le gestionnaire dtermine dabord la taille du bloc qui lui sera allou : qui est gale la plus petite puissance de 2 qui lui est suprieure, soit 128 Ko. Comme il ny a pas de blocs libres de taille 128 Ko, 256 Ko ou 512 Ko, la mmoire de 1 Mo est divise en deux blocs de 512 Ko. Le premier bloc est divis en deux blocs de 256 Ko. Enn, le premier des deux blocs nouvellement crs est divis en deux blocs de 128 Ko. Lespace allou au processus est situ entre ladresse 0 et 128 Ko.
Il peut y avoir dautres systmes, comme par exemple celui de Fibonnaci, o la relation de rcurrence est : #%$'&)(01#2$435#%$768(@9A#%BC01#)(0ED
5

22

CHAPITRE 9. GESTION DE LA MMOIRE

Lallocation par subdivision est rapide mais elle est assez inefcace en ce qui concerne lutilisation de la mmoire, car arrondir les tailles une puissance de 2 implique une certaine fragmentation interne. Linux utilise cet algorithme pour lassignation de mmoire [?].

9.7 Allocation despace de va-et-vient


Le va-et-vient est mis en uvre lorsque tous les processus ne peuvent pas tenir simultanment en mmoire. On doit alors dplacer temporairement certains dentre eux sur une mmoire provisoire, en gnral une partie rserve du disque (appele mmoire de rserve, swap area ou encore backing store ), comme montr la gure 9.22. Sur le disque, la zone de va-et-vient dun processus peut tre alloue la demande dans la zone de va-et-vient gnrale. Quand un processus est dcharg de la mmoire centrale, on lui recherche une place. Les places de va-et-vient sont gres de la mme manire que la mmoire centrale. La zone de va-et-vient dun processus peut aussi tre alloue une fois pour toute au dbut de lexcution. Lors du dchargement, le processus est sr davoir une zone dattente libre sur le disque.
Stockage temporaire

swap-in Prog. utilisateur 1 swap-out Prog. utilisateur 2

Mmoire utilisateur

F IG . 9.22 Espace de va-et-vient. Le systme de va-et-vient, sil permet de pallier le manque de mmoire ncessaire plusieurs processus, nautorise cependant pas lexcution de programmes de taille suprieure celle de la mmoire centrale. Une solution consiste permettre lutilisateur de diviser son programme en segments (segments de recouvrement ou overlays en anglais) et charger un segment en mmoire. Le segment 0 sexcute en premier. Lorsquil se termine, il appelle un autre segment de recouvrement.

9.8. PROJECTION DE FICHIERS EN MMOIRE

23

Cette solution nest pas intressante, car cest le programmeur qui doit se charger du dcoupage de son programme en segments de recouvrement. Une autre solution consiste dcharger le programmeur de cette tche. Le systme dexploitation charge en mmoire les parties du programme qui sont utilises. Le reste du programme est stock sur le disque. On peut ainsi excuter des programmes dont la taille dpasse celle de la mmoire. Ces techniques appeles mmoire virtuelle seront lobjet dtude du Chapitre ??, Mmoire virtuelle.

9.8 Projection de chiers en mmoire


On peut utiliser une technique pour projeter un chier dans la mmoire. Si un programme accde une adresse mmoire qui appartient la zone associe au chier, il sera en correspondance directe au chier. Le programme naura plus besoin des services du systme dexploitation pour lire (read) et/ou crire (write) dans le chier. Il y a quelques avantages de cette technique par rapport laccs conventionnel des chiers par des appels au systme. Diminution du nombre dappels au systme pour accder au chier. On vite les copies intermdiaires, car le systme dexploitation transfre directement linformation entre la zone de mmoire et le chier. Plus de facilits de programmation des accs au chier. Une fois que le chier est projet, on peut laccder de la mme manire que nimporte quelle structure de donnes du programme.

9.9 Services Posix de projection de chiers


Les tches de gestion de mmoire faites par le systme dexploitation sont plutt internes. Cest pourquoi il ny a pas beaucoup de services Posix ddis aux programmes dutilisateur [?] 6 . Les services principaux sont en rapport avec la projection de chiers. Projection dun chier Ce service permet dinclure dans la mmoire dun processus un chier au complet ou une partie. Cette opration cre une zone en mmoire associe lobjet stock dans le chier. Il est possible de spcier quelques proprits de la zone mmoire, par exemple le type de protection, ou si la zone est partage ou prive.
Dautres techniques de partage de variables et zones mmoire seront vues au Chapitre ?? Communications IPC, dans la section ?? Mmoire partage.
6

24

CHAPITRE 9. GESTION DE LA MMOIRE

Libration de la projection Ce service limine une projection entire ou une partie.

9.9.1 Projection dun chier


Lappel au systme mmap() a le prototype :
#include <sys/mman.h> caddr_t mmap(caddr_t adresse, size_t longueur, int protection, int attribut, int fd, off_t dcalage);

adresse : indique ladresse o on projettera le chier. Normalement on met la valeur NULL pour laisser au systme le choix. longueur : longueur de la projection. protection : mode de protection. PROT_READ (lecture), PROT_WRITE (criture) ou PROT_EXEC (excution) ou leurs combinaisons. Le mode de protection doit tre compatible avec le mode daperture du chier. fd : descripteur du chier. attribut : permet dtablir des certaines proprits de la zone. dcalage : correspond la position dans le chier de la projection. On nest pas oblig de projeter tout le chier. MAP_SHARED : Zone partage. Les modications vont affecter le chier. Un processus ls partage cette zone avec le pre. MAP_PRIVATE : Zone prive. Les modications naffectent pas le chier. Un processus ls ne partage pas cette zone avec son pre, il obtient un dupliqu. MAP_FIXED : Le chier va se projeter exactement dans ladresse spcie par le premier paramtre sil est F 0.

9.9.2 Libration de la projection


Lappel au systme munmap() avec le prototype : int munmap(void *zone, size_t longueur); libre la projection dune certaine longueur qui se trouve dans la zone indique. Lorsquil russit il renvoi 0. Exemple 3. Lexemple suivant, inspir de [?] montre lutilisation des appels systme7 mmap() et munmap(). Il projettera un chier comme un taLemploi de lappel systme stat() sera aussi utilis pour dterminer la taille du chier en question. stat() fait partie des appels systme pour la gestion du Systme de chiers (voir chapitre ??).
7

9.9. SERVICES POSIX DE PROJECTION DE FICHIERS

25

bleau de caractres, et ensuite manipulera cette projection en mmoire pour changer le premier caractre avec le dernier, le deuxime avec lavant dernier, etc. Effectuer la mme tche avec des oprations read() et write() peut savrer beaucoup plus compliqu.
G
# include # include # include # include # include < f c n t l . h> < s t d i o . h> < u n i s t d . h> < sys/ s t a t . h> < sys/mman . h>

Listing 9.1 mmap1.c


H

10

i n t main ( i n t a r g c , char I argv [ ] ) { char I projection ; int fichier ; struct stat etat_fichier ; long taille_fichier ; int i; char tmp ; i f ( argc ! = 2 ) { p r i n t f ( " Syntaxe : % s f i c h i e r a i n v e r s e r\n " , argv [ 0 ] ) ; exit (1); } f i c h i e r = open ( argv [ 1 ] , O_RDWR) ; s t a t ( argv [ 1 ] , & e t a t _ f i c h i e r ) ; taille_fichier = etat_fichier . st_size ; p r o j e c t i o n = ( char I ) mmap(NULL , t a i l l e _ f i c h i e r , PROT_READ | PROT_WRITE , MAP_SHARED , f i c h i e r , 0 ) ; i f ( p r o j e c t i o n = = ( char I ) MAP_FAILED) { p e r r o r ( "mmap" ) ; exit (0); } close ( fi c h ie r ) ; f o r ( i = 0 ; i < t a i l l e _ f i c h i e r / 2 ; i ++) { tmp = p r o j e c t i o n [ i ] ; projection [ i ] = projection [ t a ille _ fic h ier P p r o j e c t i o n [ t a i l l e _ f i c h i e r P i P 1 ] = tmp ; } munmap ( ( void I ) p r o j e c t i o n , t a i l l e _ f i c h i e r ) ; return 0 ;

20

30

i P 1];

40 }

26
Q

CHAPITRE 9. GESTION DE LA MMOIRE


R

leibnitz> cat > test.txt No hay nada que canse mas a una persona que tener que luchar, no contra su espiritu, sino contra una abstraccion. -Jos Saramago. ^D leibnitz> mmap1 test.txt leibnitz> cat test.txt .ogamaraS soJ.noiccartsba anu artnoc onis ,utiripse us artnoc on ,rahcul euq renet euq anosrep anu a sam esnac euq adan yah oNleibnitz> leibnitz> mmap1 test.txt leibnitz> cat test.txt No hay nada que canse mas a una persona que tener que luchar, no contra su espiritu, sino contra una abstraccion. -Jos Saramago. leibnitz>

9.10 Note sur MS-DOS


Le systme MS-DOS dispose dun modle de mmoire nettement plus compliqu que ceux dUnix et Linux. Il faut interprter cette complexit comme un dfaut : la simplicit dUnix/Linux nest en aucune faon synonyme de mdiocrit, bien au contraire. La gestion de mmoire du DOS est, par ailleurs, trs dpendante du matriel sous-jacent Intel 80x86 quelle exploite jusqu la corde. Larchitecture originale sur laquelle le MS-DOS a t dvelopp disposait dun bus dadresses de 16 bits, permettant dadresser jusqu 64 Ko de mmoire. Ultrieurement, ladressage sest fait partir dune base dont la valeur est contenue dans des registres spciques de 16 bits. Ces registres correspondent gnralement des fonctions de pile (SS), de donnes (DS) et de code (CS). Les registres contiennent les bits de poids forts dune adresse de 20 bits, ce qui correspond un intervalle de 1 Mo, comme montr sur la gure 9.23.

9.11. EXERCICES
16M Mmoire tendue 1M + 64K Zone de mmoire trs haute 1M Zone de mmoire haute 64K 0 Mmoire conventionnelle programmes E/S, ROM Pilotes Cache et RAM disque

27

F IG . 9.23 Mmoire dans MS-DOS.

9.11 Exercices
1. Expliquez la fonction principale dun diteur de liens dans la gnration de lespace adresse dun processus. Pourquoi doit-on relocaliser les adresses dans le chier excutable qui est gnr par lditeur de liens ? Quels lments du code doivent tre relocaliss ? Pourquoi doit-on aussi relocaliser des adresses lors de lexcution dun programme ? 2. Expliquez lune des raisons pour laquelle un processus peut tre dallou de la mmoire principale avant la n de son excution. 3. Comparez la fragmentation interne la fragmentation externe pour la mmoire, et expliquez laquelle pnalise le plus la performance du systme. 4. Identiez les zones de mmoire o sont sauvegards les divers lments dun programme en tat dexcution. 5. Donnez un avantage pour lutilisation de partitions xes de mmoire, et un avantage pour lutilisation de partitions variables de mmoire. 6. Laquelle des stratgies dallocations de partitions (rst t, best t, worst t ) minimise le plus la fragmentation ? 7. Quel avantage procure au systme dexploitation lutilisation de registres de relocation ? 8. Lequel des algorithmes dallocation de mmoire nous fournirait le meilleur degr de multiprogrammation ? Expliquer.

28

CHAPITRE 9. GESTION DE LA MMOIRE

9. Parmi les algorithmes dordonnancement de processus, lequel rsulterait en un meilleur degr de multiprogrammation ? Expliquez. 10. Considrez un systme dont lespace mmoire utilisateur compte 1 Mo. On dcide deffectuer une partition xe de cet espace mmoire en trois partitions de tailles respectives 600 Ko, 300 Ko, 100 Ko. On suppose que les processus arrivent dans le systme comme montr sur la table 9.2. Instant t t=0 t = 10 t = 30 t = 40 t = 50 t = 70 vnement A(200 Ko, 35) arrive B(400 Ko, 65) arrive C(400 Ko, 35) arrive D(80 Ko, 25) arrive E(200 Ko, 55) arrive F(300 Ko, 15) arrive

TAB . 9.2 Besoins de mmoire et temps darrivage. A(200 Ko, 35) veut dire que le processus A ncessite une partition de 200 Ko et que son temps de sjour en mmoire centrale est 35 units de temps. Bien entendu, un processus qui ne peut pas tre charg en mmoire est plac sur la le des processus en attente de chargement en mmoire. Un processus charg en mmoire y sjournera jusqu la n de son excution. Donnez les tats successifs doccupation de la mmoire si : Lordonnanceur de haut niveau fonctionne selon le schma plus court dabord (SJF) et le mode dallocation des trous utilise un algorithme du type best t. Lordonnanceur fonctionne selon PAPS (FCFS) et le mode dallocation des trous utilise un algorithme du type First Fit. 11. Considrez un gestionnaire de mmoire utilisant la stratgie de partitions variables. Supposez que la liste de blocs libres contient des blocs de taille de 125, 50, 250, 256, 160, 500, et 75 octets. Le bloc de 125 octets est en tte de liste et le bloc de 75 octets est en n de liste. Lequel des blocs reprsente le meilleur espace disponible pour un processus ncessitant une taille de mmoire de 84 octets. Lequel des blocs reprsente le plus grand espace disponible pour un processus ncessitant une taille de mmoire de 221 octets. Lequel des blocs reprsente le premier espace disponible pour un processus ncessitant une taille de mmoire de 178 octets.

9.11. EXERCICES

29

12. Pour chacune des stratgies dallocation de blocs de mmoire libre (meilleur, plus grand, ou premier), expliquez de quelle faon la liste de blocs libres devrait tre organise an dobtenir une performance optimale. 13. Considrez un systme nutilisant pas de registres de relocation. Par consquent, cest le chargeur de programme qui soccupe de la relocation des instructions dans limage mmoire partir de lexcutable. Serait-il possible de dcharger et de recharger limage mmoire du programme durant le cycle dexcution ? Expliquez comment cela pourrait tre ralisable ou pourquoi cela ne pourrait pas tre ralisable.