Gestion de la mémoire Abdelouahed Gherbi Hiver 2014 LOG 710 Hiver 2014 1 Plan • • • • • • Introduction Systèmes monoprogramés Protection Relocation Va-et-vient (Swapping) Systèmes multiprogrammés – Partition fixes – Partition variables • État de la mémoire • Algorithmes de placement et libération de mémoire LOG 710 Hiver 2014 2 Introduction • Les programmes résident sur le disque dans des fichiers binaires exécutables • Pour être exécuté, un programme doit être chargé en mémoire et placé dans un processus • Un programme utilisateur passe par plusieurs étapes avant d’être exécutable • Les adresses sont représentées de différentes façons selon l’étape – Code source : adresses symboliques. (P. ex. compteur) – Module objet : adresses relative. (P. ex. 250 ième mot depuis le début d'espace mémoire) – Binaire chargé en mémoire : adresses absolues. (P.ex. 0xFFF7) LOG 710 Hiver 2014 Étapes de compilation, édition des liens et chargement d’ un programme utilisateur [1] 3 Rôle du gestionnaire de mémoire • Le gestionnaire de la mémoire est le composant du système d’exploitation qui se charge de gérer l’allocation d’espace mémoire aux processus • La fonction de gestion de mémoire traite les problèmes suivants : – Organisation de la mémoire • Nombre et la taille des partitions • Partition fixes ou variables – Politique d’allocation de la mémoire • une zone contiguë pour chaque processus ? • Allocation totale ou partielle de l’espace nécessaire – Gestion de l’espace libre • Mémorisation de l’état de la mémoire • Politique de placement : Parmi les parties libres en mémoire, lesquelles allouées au processus? – Libération d’espace mémoire en cas d’insuffisance : • Retirer un processus complétement ou partiellement • Politique de remplacement : Choix du processus à retirer de la mémoire – Protection des processus et du système d’exploitation • Exigences – Efficacité, relocation, protection LOG 710 Hiver 2014 4 Systèmes monoprogrammés • Un seul processus ayant son programme en mémoire • Le système d’exploitation est aussi en mémoire • Trois organisations simples ont souvent été utilisés Trois organisations de la mémoire d’un système monoprogrammé [3] LOG 710 Hiver 2014 5 Protection • Il est nécessaire de protéger le code et les données du SE des processus ainsi que les processus entre eux • Pour cela, on utilise un registre limite qui indique la limite de la zone réservée aux programmes utilisateurs. • Chaque adresse référencée par la CPU est comparée avec le registre limite. LOG 710 Hiver 2014 6 Relocation • Lors de la compilation et l’édition des liens les adresses des instructions et des données d’un programmes sont relatives au début du programme 0 • Ces adresses relatives (dites logiques ou virtuelles) seront ensuite translatées en adresse physiques. • La translation peut se faire lors du chargement du processus • Cette solution a un inconvénient : – il ne sera plus possible de déplacer le processus. LOG 710 Hiver 2014 7 Relocation • • Une autre solution consiste à faire la translation au cours de l’exécution Cette solution doit être supportée par le matériel – Doter la machine (MMU) de 2 registres spéciaux : • Le registre de base (de translation) • Le registre limite. • Quand un processus est sélectionné par l’ordonnanceur, le SE charge – L’adresse du début de la zone mémoire allouée au programme dans le registre de base – La longueur de l’espace d’adresses du programme dans le registre limite. • Durant l’exécution d’une instruction : – – • Support matériel pour la relocation et protection [1] chaque adresse relative référencée par l’instruction est comparée avec le registre limite, afin d’interdire tout accès en dehors de la partition courante (protection). Les adresses physiques sont obtenues en ajoutant le contenu du registre de base aux adresses relatives. Avantage : le processus peut être déplacé en mémoire. LOG 710 Hiver 2014 8 Va-et-vient (Swapping) • Un processus doit être chargé en mémoire pour être exécuté • Un processus peut être permuté (swapped out) temporairement à l’extérieur de la mémoire • Les processus permutés résident dans disque rapide (backing store) • Le processus sera ramené (swapped in) vers la mémoire pour continuer sont exécution • Le va-et-vient ou permutation (swapping) permet de libérer de la mémoire en cas d’ insuffisance • La technique de swapping est limitée pour les programme non relogeables (non déplaçables) – Contrainte : ramener le programme non déplaçable dans la même zone en mémoire • Va-et-vient [1] Le temps nécessaire pour le swapping augmente le coût de la commutation de contexte LOG 710 Hiver 2014 9 • Multiprogrammation avec partitions fixes La mémoire est divisée en un ensemble de partitions. • Le nombre et la taille des partitions sont fixés à l'avance – lors du chargement du système. • Les partitions peuvent être égales ou non. • La choix du nombre et de la taille des partitions dépend du niveau de multiprogrammation voulu. • L’unité d’allocation est une partition. LOG 710 Hiver 2014 Partition fixes avec tailles égales et inégales [2] 10 • Multiprogrammation avec partitions fixes Problèmes avec la partition fixe • Un programme peut ne pas correspondre à aucune partition – La programmeur se trouve obligé de concevoir le programme utilisant des techniques comme les recouvrements (overlays) • Utilisation inefficace de la mémoire – Un programme aussi petit qu’il soit occupe une partition entière – Ceci résulte en le problème de fragmentation interne LOG 710 Hiver 2014 11 Multiprogrammation avec partitions variables (dynamiques) • Initialement, l’espace mémoire réservé aux programmes constitue une seule partition. • Quand un nouveau processus doit être chargé, on lui alloue une zone contiguë de taille suffisamment grande pour le contenir. • Le nombre et les tailles des partitions varient au cours du temps. Évolution de l’état d’allocation de la mémoire [3] LOG 710 Hiver 2014 12 • Multiprogrammation avec partitions variables Exemple : – Taille de la mémoire 256K – OS occupe 40K – 5 processus ayant les caractéristiques suivante • Évolution de la mémoire Processus Besoin en mémoire Temps d’exécution P1 60K 10 P2 100K 5 P3 30K 20 P4 70K 8 P5 50K 15 Que peut on remarquer ? LOG 710 Hiver 2014 13 Multiprogrammation avec partitions variables (dynamiques) • L’allocation de la mémoire avec partitions variables conduit éventuellement à l'apparition de trous trop petits pour les allouer à d’autres processus : – c'est la fragmentation externe • Solutions ? LOG 710 Hiver 2014 14 Multiprogrammation avec partitions variables (dynamiques) • L’allocation de la mémoire avec partitions variables conduit éventuellement à l'apparition de trous trop petits pour les allouer à d’autres processus : – c'est la fragmentation externe • Solutions – Compactage • Solution coûteuse • Les processus doivent être relogeables (déplaçables) – Allocation discontinue!!! LOG 710 Hiver 2014 15 État de la mémoire • Table de bits (bitmaps) – La mémoire est un ensemble d’unités d’allocation. – Un bit est associé à chaque unité. – Lorsqu'on doit charger un processus de k unités, le gestionnaire de la mémoire doit chercher dans la table des bits une séquence de k zéros consécutifs. – Cette méthode est rarement utilisée car la méthode de recherche est lente (k zéros consécutifs). • Liste chainée Table des bits et liste chainée [3] LOG 710 Hiver 2014 16 Algorithmes de placement • Le gestionnaire de mémoire doit décider quel est le bloc libre qu’il doit utiliser pour satisfaire la requête d’un processus LOG 710 Hiver 2014 17 Algorithme de placement • Algorithme de la première zone libre convenable – first fit – Allouer La première zone libre qui convient. – La recherche commence au début de la liste chainée – On s’arrête dés que on trouve un zone libre suffisamment large pour contenir le processus LOG 710 Hiver 2014 18 Algorithme de placement • Algorithme du meilleur ajustement – best fit – Allouer la plus petite zone libre qui est suffisamment grande pour contenir le processus – On cherche dans toute la liste chainée à moins que la liste est ordonnée par la taille des trous – Pourquoi ? LOG 710 Hiver 2014 19 Algorithme de placement • Algorithme du meilleur ajustement – best fit – Allouer la plus petite zone libre qui est suffisamment grande pour contenir le processus – On cherche dans toute la liste chainée à moins que la liste est ordonnée par la taille des trous – Stratégie : La zone qui laisse le plus petit espace non occupé. LOG 710 Hiver 2014 20 Algorithme de placement • Algorithme du pire ajustement – worst fit – Allouer la plus grande zone libre – On cherche dans toute la liste chainée sauf si la liste est ordonnée par ordre décroissant des tailles des trous – Pourquoi ? LOG 710 Hiver 2014 21 Algorithme de placement • Algorithme du pire ajustement – worst fit – Allouer la plus grande zone libre – On cherche dans toute la liste chainée sauf si la liste est ordonnée par ordre décroissant des tailles des trous – Stratégie : Choisir la zone qui laisse le plus grand espace non occupé qui sera plus utile qu’un petit trou • Pour tous les algorithme : – Si la zone sélectionnée est plus grande que celle du processus à charger, elle est scindée en deux parties : la première est alloué au processus, la seconde est libre. LOG 710 Hiver 2014 22 Allocation par subdivision (Buddy System) • • • Les tailles des blocs sont des puissances de 2. Initialement, on a un seul bloc libre. Exemple : – – • La taille maximale est de 1 Mo Un processus demande 70 Ko . Le gestionnaire détermine d’abord la taille du bloc à allouer – – La plus petite puissance de 2 supérieure à la taille demandée Notre exemple : 70Ko, soit 128 Ko. • La mémoire est récursivement divisée en deux blocs jusqu’à l’obtention d’un bloc adéquat • Notre exemple – – – – – • Comme il n’y a pas de blocs libres de taille 128 Ko, 256 Ko ou 512 Ko la mémoire de 1 Mo est divisée en deux blocs de 512 Ko. Le premier bloc est divisé en deux blocs de 256 Ko. Enfin, le premier des deux blocs nouvellement créés est divisé en deux blocs de 128 Ko. L’espace alloué au processus est situé entre l’adresse 0 et 128 Ko. L’allocation par subdivision est rapide mais elle est assez inefficace en ce qui concerne l’utilisation de la mémoire (arrondir les tailles à une puissance de 2, fragmentation interne). LOG 710 Hiver 2014 23 Allocation par subdivision (Buddy System) • Exemple Exemple d’allocation par subdivision (Buddy System) [2] LOG 710 Hiver 2014 24 Allocation par subdivision (Buddy System) • Représentation par un arbre de l’allocation par subdivision juste après Release B [2] LOG 710 Hiver 2014 25 Libération de la mémoire • Un processus qui termine a deux voisins – Excepté quand il est en haut de la mémoire ou en bas de la mémoire – Ses voisins sont soit des processus ou des trous (zones mémoire non allouées) • On a donc quatre (4) combinaisons • 1er cas : (a) mise à jour de la liste en remplaçant l’état d’occupation (PH) • 2ième cas : (b) et (c) – Deux entrées (éléments) de la liste sont combinées en une seule et suppression d’un élément • 3ième cas (d) – Trois entrées de la liste sont combinées et suppression de deux éléments de la liste LOG 710 Hiver 2014 26 Références [1] SILBERSCHATZ, A. et P.B. GALVIN, Operating System Concepts. 8th Edition, Addison Wesley. [2] William Stallings, Operating Systems : Internals and Design Principles, 5th edition, Pearson [3] Andrew Tanenbaum, Modern Operating Systems, 3rd edition, 2008 LOG 710 Hiver 2014 27