La memoire virtuelle
Transcription
La memoire virtuelle
Gestion de la mémoire Le S.E: Gestion de la mémoire Rappels Le CPU accède à la mémoire RAM en lisant des mots de 16, 32, 64, voire 128 bits (2, 4, 8, 16 octets). Chaque octet de 8 bits est rangé dans une « case » de la mémoire. Chaque case d’un octet est numérotée (de zéro à N-1, N étant la taille en octet de la mémoire physique disponible) ; ce numéro est appelé « adresse physique » de la case mémoire qui contient la donnée. Le CPU accède aux données de la RAM en positionnant l’adresse du mot à lire (ou à écrire) dans un registre d’adresse. Espace d’adressage Espace de la RAM où un processus a le droit d’écrire ou de lire des données. Cet espace contient plusieurs zones : le code machine à exécuter par le CPU, la pile à l’exécution du CPU, l’espace de données. Le S.E: Gestion de la mémoire Espace d’adressage physique : C’est l’ensemble des adresses physiques de la RAM. Espace d’adressage logique (virtuel) C’est l’ensemble des adresses logiques accessibles par un processus. A partir de cet espace on peut pointer vers des zones de l’espace d’adressage physique, ou sur une zone sur le disque dur qui s’appelle le fichier d’échange de mémoire virtuelle, ou fichier de swap. Le processeur doit convertir chaque adresse logique manipulée par le processus en adresse physique. Cette conversion est appelée mapping et est réalisé par le MMU (Memory Management Unit). La mémoire est virtuellement découpée en zones. Il existe deux philosophies différentes : La segmentation : Découpage de la mémoire en morceaux de tailles variables appelés segments, caractérisés par leur adresse de début (décalage) et leur taille. La pagination : la mémoire est découpée en « blocs » de taille fixe appelés pages. Le S.E: Gestion de la mémoire La segmentation L’adresse virtuelle possède deux composantes : Un numéro de segment, Un déplacement dans ce segment. Le MMU contient une table des segments, qui est indexée par le numéro de segment, et qui, pour chaque entrée, contient : La taille du segment, et son adresse de base. Traduction d’une adresse virtuelle : 1.Le MMU cherche l’entrée correspondant au numéro de segment dans la table des segments. 2.Vérifie que le déplacement contenu dans l’adresse virtuelle est inférieur à la taille du segment. 3.Si c’est le cas, il additionne le déplacement à l’adresse de base du segment pour obtenir l’adresse physique Le S.E: Gestion de la mémoire La pagination Le processeur émet des adresses virtuelles indiquant la position d'un mot dans la mémoire virtuelle ; Cette mémoire virtuelle est formée de zones de même taille, appelées pages. Une adresse virtuelle est donc un couple (numéro de page, déplacement dans la page). La mémoire physique est également composée de zones de même taille, appelées « cadres » (frames en anglais), dans lesquelles prennent place les pages. A noter que la taille d’un cadre est égale à la taille d’une page ; Le MMU assure la conversion des adresses virtuelles en adresses physiques, en consultant une « table des pages » pour connaître le numéro du cadre qui contient la page recherchée. L'adresse physique obtenue est le couple (numéro de cadre, déplacement) ; Il peut y avoir plus de pages que de cadres : les pages qui ne sont pas en mémoire sont stockées sur un autre support (disque dur), elles seront ramenées dans un cadre si besoin. Chaque processus possède sa propre table des pages, qui est indexée par le numéro de page. Le S.E: Gestion de la mémoire Protection des accès mémoire entre processus Il existe trois bits de gestion des accès pour chaque partie de l’espace d’adressage d’un processus: (lecture, écriture et exécution de code) Chaque processus ne peut accéder qu’à sa propre table des pages. Lors de chaque accès à la mémoire, les droits sont vérifiés. S’il y’a besoin de partager des zones de mémoire (exemple : shared memory ), dans ce cas, chacun des processus référence les pages communes dans sa propre table des pages. Les deux processus doivent être indiqués comme propriétaires dans la table des pages pour chacune de ces pages. N° de N° de Processus cadre/frame page propriétaire number Cadre 1 1 Processus 1 Exemple : Table des pages avec des pages partagées en lecture/écriture : Cadre 2 3 Processus 1 Cadre 3 2 Processus 1, Processus 2 Cadre 4 5 Processus 2 Le S.E: Gestion de la mémoire Principe de la mémoire virtuelle – swap Allouer en premier tous les cadres disponibles dans la mémoire physique. Manque de cadre disponible: Libérer certains cadres en plaçant leurs contenus sur disque. Le processus élu avec des pages swapées sur le disque devra connaître cette information. Le bit validation « bit V » est à 1 si la page fait référence à un cadre en mémoire centrale, et vaut 0 si le contenu de la page a été stocké sur disque. Les pages contenant du code (programme) ne sont jamais swapées. Le S.E: Gestion de la mémoire Algorithmes de remplacement de pages : • l’algorithme optimal, • l’algorithme FIFO (First In, First Out/premier entré, premier sorti), • l’algorithme LRU (Least Recently Used/la moins récemment utilisée), • l’algorithme de la seconde chance, • L’algorithme de l’horloge • l’algorithme LFU (Least Frequently Used, « la moins souvent utilisée »). • …. Le S.E: Gestion de la mémoire L’algorithme optimal ( de Belady) • Consiste à retirer la page qui sera référencée le plus tard possible dans le futur. • Impossible à mettre en œuvre: Difficile de prévoir les références futures d'un programme. • Référence pour les autres stratégies, car il minimise le nombre de défauts de page. Exemple: Soit un système avec m= 3 cases de mémoire et une suite de références w={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1}. La figure montre une ligne pour chaque case et une colonne pour chaque référence. Chaque élément de ligne i et colonne j montre la page chargée dans la case i après avoir été référencée. Les entrées soulignées en rouge sont des pages chargées après un défaut de page. L'algorithme optimale fait donc 9 défauts de page. Le S.E: Gestion de la mémoire L’algorithme FIFO : • Il mémorise dans une file de type FIFO (premier entré, premier sorti) les pages présentes en mémoire. • Lorsqu'un défaut de page se produit, on retire la plus ancienne, c'est à dire celle qui se trouve en tête de file. Exemple: La suite de références w={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1} Avec m=3 cases fait 15 défauts de page avec l'algorithme FIFO comme le montre la figure Le S.E: Gestion de la mémoire L’algorithme LRU (Least Recently Used) • L'algorithme LRU mémorise dans une liste chaînée toutes les pages en mémoire. La page la plus utilisée est en tête de liste et la moins utilisée est en queue. • Lorsqu'un défaut de page se produit, la page la moins utilisée est retirée. • Pour minimiser la recherche et la modification de la liste chaînée, ces opérations peuvent être réalisées par le matériel. Cet algorithme est coûteux. • Problème: Difficulté d'implémentation, qui requiert un support du hardware. Il faut une manière de mémoriser le temps à chaque fois qu'une page est référencée Exemple: La suite de références w={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1} Avec m= 3 cases fait 12 défauts de page avec l'algorithme de remplacement de la page la moins récemment utilisée, comme le montre la figure Le S.E: Gestion de la mémoire L'algorithme de remplacement de page de la seconde chance Modification simple à l'algorithme FIFO afin d'éviter la suppression d'une page à laquelle on a couramment recours Il s'agit d'inspecter le bit R de la page la plus ancienne. R=0 : La page est à la fois ancienne et inutilisée, elle est donc remplacée immédiatement. R=1 : le bit est effacé, la page est placée à la fin de la liste des pages, et son temps de chargement est mis à jour comme si elle venait d'arriver en mémoire. La recherche continue alors. Exemple: Les pages de A à H se trouvent dans une liste chaînée, triées par leur temps d'arrivée en mémoire. Supposons qu'un défaut de page se produise à l'instant 20. La page la plus ancienne est A, qui est arrivée à l'instant 0, quand le processus a démarré. Si le bit R de la page A est à 0, elle est évincée de la mémoire. Si le bit R est à 1, A est placée à la fin de la liste et son temps de chargement est mis à jour avec le temps courant (20). Le bit R est aussi mis à 0. La recherche d'une page convenable continue alors avec B. Le S.E: Gestion de la mémoire L'algorithme de remplacement de page de l'horloge Consiste à garder tous les cadres de pages dans une liste circulaire formant une horloge, comme l'illustre la figure ci-dessous. Un pointeur se trouve sur la page la plus ancienne. Quand un défaut de page survient, la page pointée est examinée. Si son bit R est à 0, la page est évincée, la nouvelle page est insérée dans l'horloge à sa place, et le pointeur est avancé d'une position. Si le bit R est à 1, il est effacé et le pointeur est avancé sur la prochaine page. Ce processus est répété jusqu'à ce qu'une page R = 0 soit trouvée. Cet algorithme de l'horloge diffère de l'algorithme de la seconde chance uniquement dans son implantation. Le S.E: Gestion de la mémoire L’algorithme LFU Dans cet algorithme, le système garde un compteur qui est incrémenté à chaque fois que le cadre est référencé. La victime sera le cadre dont le compteur est le plus bas. Cet algorithme, bien qu’intuitivement correct, souffre de deux inconvénients, qui le rendent peu utilisé : Au démarrage des programmes, quelques pages peuvent être intensément utilisées, puis plus jamais par la suite. La valeur du compteur sera si élevée qu'ils ne seront remplacés que trop tardivement ; Il faut aussi gérer le cas de dépassement de capacité du compteur, ce qui est coûteux en CPU.