Page 1

Ecole Nationale d’Ingénieurs de Sousse

Principes généraux des systèmes d’exploitation

Gestion de la Mémoire Centrale

1 A - ENISO 2009 / 2010

1


Cycle de vie D’un programme

1 A - ENISO 2009 / 2010

2


Liaison d’adresse    

Habituellement, un programme réside comme un fichier binaire exécutable sur disque. Le programme doit être chargé en mémoire et placé dans un processus afin d’être exécuté. La plupart des systèmes autorisent un processus à résider n’importe ou dans la mémoire. En général : un programme traversera plusieurs pas avant d’être exécuté.

1 A - ENISO 2009 / 2010

3


Liaison d’adresse On peut effectuer la liaison d’instructions et de données à des adresses mémoire :

  

Au moment de la compilation Au moment du chargement Au moment de l’exécution

1 A - ENISO 2009 / 2010

4


Moment de compilation 

Si on connaît au moment de la compilation où réside le processus en mémoire, on peut générer du code absolu. Par exemple, si on sait à priori qu’un processus utilisateur réside en commençant à l’adresse R, le code du compilateur généré démarrera donc à cet emplacement et s’étendra à partir de là. Si plus tard, l’emplacement change, il sera donc nécessaire de compiler à nouveau le code. 1 A - ENISO 2009 / 2010

5


Moment de chargement 

Si on ne connaît pas au moment de la compilation l’endroit où résidera le processus en mémoire, le compilateur doit donc générer du code translatable. Dans ce cas, la liaison finale est reportée jusqu’au moment du chargement. Si l’adresse de début change, nous devons seulement recharger le code utilisateur 1 A - ENISO 2009 / 2010

6


Moment de l’exécution 

Si on peut déplacer le processus pendant son exécution d’un segment de mémoire à un autre, la liaison doit donc être retardée jusqu’au moment de l’exécution.

1 A - ENISO 2009 / 2010

7


Chargement dynamique 

On ne charge pas une routine avant qu’elle soit appelée. Une routine non utilisée n’est jamais chargée. Quand des grandes quantités de code sont nécessaires pour manipuler des cas qui se produisent rarement : routines d’erreur. 1 A - ENISO 2009 / 2010

8


Edition de liens dynamiques 

Editions de liens statiques : les bibliothèques des langages du système sont traitées comme tout autre module objet et sont combinés par le chargeur dans une image binaire. Editions de liens dynamiques : plutôt que de reporter le chargement jusqu’au temps d’exécution, on reporte l’édition des liens. Cette caractéristique peut être étendue à des actualisations de la bibliothèque. On peut remplacer une bibliothèque par une nouvelle version. Ce système est également connu comme bibliothèques partagées. 1 A - ENISO 2009 / 2010

9


Recouvrement 

Afin qu’un processus puisse être plus grand que la quantité de mémoire que l’on lui a allouée, on utilise le recouvrement L’idée est de maintenir en mémoire seulement les instructions et les données nécessaires à chaque moment donné ; quand on besoin d’autres instructions, elles sont chargées dans l’espace précédemment occupé par des instructions qui ne sont plus nécessaires. 1 A - ENISO 2009 / 2010

10


Swapping 

Un processus doit être en mémoire pour être exécuté. Cependant, un processus peut être transféré temporairement de la mémoire principale à une mémoire auxiliaire et être ensuite ramené en mémoire pour continuer son exécution. Quand une tranche de temps expire, le gestionnaire de la mémoire commencera à transférer en mémoire auxiliaire (swap out) le processus qui vient de finir et à ramener (swap in) un autre processus à l’espace mémoire libéré 1 A - ENISO 2009 / 2010

11


Swapping

1 A - ENISO 2009 / 2010

12


Swapping 

  

Normalement, un processus transféré en mémoire auxiliaire est ramené au même espace mémoire qu’il occupait précédemment. Cette restriction est imposée par la méthode de liaison d’adresses : Moment de chargement déplacement impossible Moment de l’exécution déplacement possible Le système assure la maintenance d’une file d’attente des processus prêts constituée de tous les processus dont les images mémoire se trouvent dans la mémoire auxiliaire ou dans la mémoire principale et qui sont prêts à être exécutés.

1 A - ENISO 2009 / 2010

13


Contraintes Si on désire transférer un processus, on doit être sûr qu’il est complètement inactif. Les entrées/sorties en cours sont d’un intérêt particulier. Si un processus attend une opération d’E/S ? ? ?

Deux possibilités :

 

ne jamais transférer un processus avec des E/S en cours exécuter les opérations d’E/S seulement dans les buffers du système. 1 A - ENISO 2009 / 2010

14


Allocation contigüe de la MC 

La mémoire est habituellement divisée en deux partitions, une pour le système d’exploitation résident et l’autre pour les processus utilisateur Mémoire centrale MC

1 A - ENISO 2009 / 2010

15


Allocation d’une partition unique 

 

La totalité d’un processus est chargé dans une seule partition : on doit protéger le code et les données du système contre les modifications (accidentelles) des processus utilisateur. On a besoin également de protéger les processus utilisateur entre eux. registre translation et registre limite Le registre de translation contient la valeur de l’adresse physique la plus petite ; le registre limite contient l’étendue des adresses logiques.

1 A - ENISO 2009 / 2010

16


Allocation d’une partition unique

1 A - ENISO 2009 / 2010

17


Allocation de plusieurs partitions      

subdiviser la mémoire en un certain nombre de partitions fixes chaque partition peut contenir exactement un processus le degré de multi-programmation est limité par le nombre de partitions quand une partition est libre, on sélectionne un processus à la queue d’entrée et on le charge dans la partition libre. Quand le processus se termine, la partition devient disponible pour un autre processus. Le SE maintient une table indiquant les partitions mémoire disponibles et celles qui sont occupées. Au début, toute la mémoire est disponible pour les processus utilisateur, et elle est considérée comme un grand bloc libre

1 A - ENISO 2009 / 2010

18


Les partitions de taille fixe

Tout espace inutilisé dans la partition est perdu car on ne cumule pas des espaces appartenant à des partitions voisines : c’est un problème de fragmentation interne. La description de la mémoire nécessite la connaissance des adresses d'implantation de chaque partition. Pour chaque partition :  Un registre de base renferme l'adresse de début,  Un registre limite permet de pointer la dernière adresse. Quand le processus se termine, la partition redevient libre pour un autre processus.


Les partitions de taille fixe 0 @1 @2

@ limite

Partition 2

Processus 2 @3 Processus 3

Partition 1

@ de base

@4

Partition 3 Partition 4 ….

@N Partition N

Espace utilisateur

Processus 1

Système d’exploitation


Les partitions de taille variable 

Considérer la mémoire disponible pour les utilisateurs comme un seul espace, Plutôt que de diviser la mémoire en un ensemble fixe de partitions, un SE peut choisir de placer des processus dans tout emplacement de mémoire inutilisé quel qu'il soit. Quand un processus arrive en demandant de la mémoire, nous recherchons un espace suffisamment grand pour ce processus. Nous allouons seulement la quantité de mémoire nécessaire, laissant le reste disponible pour satisfaire des futures requêtes. Si l’espace est trop grand, il est découpé en deux : une partie est allouée au processus, l'autre est renvoyée à l'ensemble des espaces libres. inconv: une demande peut ne pas être satisfaite faute d'un espace de taille suffisante, bien que la somme des tailles des zones libres soit supérieure à cette demande : c’est la fragmentation externe.


Exemple

1 A - ENISO 2009 / 2010

22


Exemple : Exécution

1 A - ENISO 2009 / 2010

23


Algorithmes d’allocation Quand un processus arrive, on cherche dans cet ensemble un trou suffisamment grand pour le processus : Allocation dynamique de la mémoire. Les stratégies employées pour sélectionner un trou libre à partir d’un ensemble de trous sont :

First-fit (le premier trouvé) : alloue le premier trou suffisamment grand.

 

Best-fit (le meilleur choix) : alloue le trou le plus petit suffisamment grand. Worst-fit (le plus mauvais choix) : alloue le trou le plus grand. 1 A - ENISO 2009 / 2010

24


First fit

Espace = structure { adresse_debut : entier ; taille : entier ; état : logique } M P V = vecteur [1..N M AX ] de espace

Algorithme First-Fit (liste_espace_libre, taille_demandée) Liste_espace_libre : vecteur [1..N] de espace Début i1 Tant que ( (i<=N) et (liste_espace_libre[i].taille < taille_demandée) )

fin

Faire ii+1 Fin faire Si (i>N) alors erreur ; Si non charger (taille_demandée, liste_espace_libre[i]) Fin si

1 A - ENISO 2009 / 2010

25


Fragmentation de la MC Fragmentation externe

Au fur et à mesure que les processus sont chargés et supprimés de la mémoire ; l’espace de mémoire libre est découpé en petites parties. La fragmentation externe se présente quand il existe un espace mémoire total suffisant pour satisfaire une requête, mais il n’est pas contigu.

1 A - ENISO 2009 / 2010

26


Fragmentation interne 

La figure suivante illustre un autre problème rencontré avec le schéma d’allocation de plusieurs partitions. Si nous allouons exactement le bloc requis, il reste un trou de 2 octets. Ainsi la mémoire allouée peut être légèrement plus grande que la mémoire requise : cette différence est appelée fragmentation interne.

1 A - ENISO 2009 / 2010

27


Algorithme worst-Fit (liste_espace_libre, taille_demandée) Liste_espace_libre : vecteur [1..Nmax] de espace max , indice_max : entier Début Max  liste_espace_libre[1].taille indice_max  1 Pour i  1 jusqu’à N faire si (liste_espace_libre[i].taille >max) alors max liste_espace_libre[i].taille indice_max  i fin si Fin pour Si (max < taille_demandée) alors erreur ; Si non

charger (taille_demandée, liste_espace_libre[indice_max])

fin

Fin si

1 A - ENISO 2009 / 2010

28


Algorithme Best-Fit (liste_espace_libre, taille_demandée) Liste_espace_libre : vecteur [1..Nmax] de espace best, indice_best : entier Début best  100000000000 indice_best  0 Pour i  1 jusqu’à N faire si (liste_espace_libre[i].taille >= taille_demandée) alors si ( liste_espace_libre[i].taille <= best) alors best  liste_espace_libre[i].taille indice_best  i fin si fin si Fin pour Si (indice_best = 0) alors erreur ; Si non charger (taille_demandée, liste_espace_libre[indice_best]) Fin si fin 1 A - ENISO 2009 / 2010

29


Exercice d’application

On considère un système dont l'espace mémoire compte 1 Mo. On décide d'effectuer une partition fixe de cet espace mémoire en 3 partitions de tailles respectives 600 Ko, 300 Ko, 100 Ko. Donner les états de la mémoire dans le cas suivant :  L'ordonnanceur est en SJF et le mode d'allocation utilise un algorithme de Best Fit. File des demandes

Processus A B C D E F

Taille mémoire 200 Ko 400 Ko 400 Ko 80 Ko 200 Ko 300 Ko

Temps d’arrivée 0 10 30 40 50 70

Durée d’exécution 35 65 35 25 55 15


t = 10 SE

t = 30 SE

t = 35 SE

t = 40 SE

t = 50 SE

t = 65 SE

B 65

B 45

B 40

B 35

B 25

B 10

200 Ko

200 Ko

200 Ko

200 Ko

200 Ko

200 Ko

A 25 100 Ko 100 Ko

A5 100 Ko 100 Ko

300 Ko

300 Ko

100 Ko

A 35 100 Ko 100 Ko

100 Ko

D20 25 Ko

E 55 100 Ko D20 15 Ko

E 40 100 Ko 100 Ko

t = 70 SE

t = 75 SE

t = 90 SE

t = 105 SE

t = 125 SE

B5

F 15

C 35

C 20

200 Ko

300 Ko

200 Ko

200 Ko

E 35 100 Ko 100 Ko

E 30 100 Ko 100 Ko

E 15 100 Ko 100 Ko

300 Ko

300 Ko

100 Ko

100 Ko

SE 600 Ko

300 Ko

t=0 SE 600 Ko

600 Ko

gestion memoire  

gestion memoire

Read more
Read more
Similar to
Popular now
Just for you