Le gestionnaire de mémoire virtuelle est un circuit électronique (MMU) qui permet de réaliser le mécanisme de la mémoire virtuelle, à savoir la translation des adresses virtuelles en adresses physiques.
Le concept de mémoire virtuelle est assez ancien, il a été implémenté dans les années 1960 et il est toujours très utilisé. Son but est d'augmenter la taille de la mémoire utilisable, de mettre en place des mécanismes de protection et de faciliter l'allocation de la mémoire utilisée par un processus en simplifiant le travail des développeurs. L'origine de cette découverte est la différenciation entre l'espace d'adressage virtuel et l'espace d'adressage physique.
Même si les mécanismes mis en jeu rendent de grands services, ils ont un coût en matière de performance, celle-ci est un enjeu important actuellement ; les internautes sont très sensibilisés aux temps de réponse. Le paradoxe est le suivant : Les applications sont de plus en plus complexes et demandeuses de mémoire toutefois, les utilisateurs sont de plus en plus exigeants en ce qui concerne la performance.
L'autre défi majeur relevé par la mémoire virtuelle, c'est la protection de la mémoire. De fait, une étanchéité entre les différents programmes doit être assurée. Le problème actuel est de garantir cette sécurité face aux différentes attaques (attaques par relais, par codes arbitraires).
Le concept de Mémoire Virtuelle est en constante évolution, il est remis en cause dans certains types d'architectures tels que : ou les Systèmes Big Data car trop coûteux en temps.
Généralités
Définitions Principe de base : toutes les informations d’un programme ne peuvent être référencées par le processeur que lorsqu’elles se trouvent en Mémoire centrale. L’information qui a besoin d’être référencée rapidement doit résider en mémoire centrale et toutes les autres informations doivent être en mémoire auxiliaire (mémoire de masse). Il serait trop couteux en ressource de charger l'intégralité des programmes exécutés par un ordinateur en mémoire, c'est une des raisons pour lesquelles le procédé de mémoire virtuelle a été mis au point à la fin des années 1950...
Les mémoires La mémoire physique correspond à la mémoire physiquement installée, c'est-à-dire principalement à la mémoire vive dynamique, la RAM.. Il s'agit d'une zone de stockage temporaire, une mémoire de travail, dans laquelle sont chargés les données et les programmes.. qui seront traitées par le processeur. On utilise également d'autres dispositifs, tels que les disques durs, les disques SSD comme espace d'échange (zone de swap).
Une hiérarchie des mémoires s'établit suivant les principales caractéristiques qui sont : le temps d'accès, la persistance des données, l'espace d'adressage.
Les mémoires vives (RAM) sont dites volatiles et possèdent un temps d'accès aux données de quelques dizaines de nanosecondes, et les mémoires comme celle du disque dur ont des accès plus lents : quelques millisecondes, on les appelle aussi Mémoire de masse..
Espace d'adressage vignette|300px|gauche|Espace d'adressage virtuel et espace d'adressage physique. L'espace adressable par le processeur se distingue de l'espace réellement adressable dans la mémoire physique : L'espace d'adressage virtuel (Virtual address space) est généré par le processeur au moment de l’exécution des instructions. C'est l'espace accessible, qui dépend donc du nombre de bits utilisés par le processeur pour coder les adresses.. Cet espace d’adressage est constitué du code, des données, de la pile d’exécution (stack) ; L'espace d'adressage physique (Physical address space) correspond aux adresses chargées réellement en mémoire centrale, physique, pour qu'un programme puisse s'exécuter..
Un processus pour qu'il puisse s'exécuter doit être chargé en mémoire centrale. Si plusieurs programmes sont concurrents, il est nécessaire : d'allouer suffisamment de place en mémoire centrale pour le code et les données de chaque processus ; de garantir un espace d’adressage étanche pour chaque processus..
Les mécanismes de la mémoire virtuelle permettent de répondre à ces deux besoins principaux.
Mécanisme matériel de la mémoire virtuelle Unité de Gestion Mémoire La MMU (Memory Management Unit ou PMMU Paged Memory Management Unit) est le circuit électronique qui rend possible la mémoire virtuelle, c'est par son intermédiaire que seront converties (en anglais mapping) les adresses mémoires virtuelles en adresses physiques...
TLB (Translation Lookaside Buffer) vignette|Schéma de principe du fonctionnement d'un MMU.|droite Pour améliorer le temps d'accès à la mémoire, un ensemble de registres attachés à la MMU, met en œuvre une mémoire cache : TLB (Translation Lookaside Buffer)...
Le TLB mémorise les dernières correspondances entre les adresses virtuelles et les adresses physiques pages, cadres utilisées par un processus.
Cette mémoire cache contient les numéros de page ainsi que l'adresse de la case contenant la plus récemment accédée. La MMU cherche en premier lieu dans le cache s'il existe une déjà une correspondance entre la page et l'adresse d’implantation de la case..
La pagination Principe de la pagination Les données sont organisées dans la mémoire virtuelle sous forme de pages ou de segments, il y a aussi un autre mode d'organisation qui combine les deux.
Dans la mémoire physique elles sont organisées sous forme de cadres, une page correspond à un cadre. Donc quand un programme a besoin d'être chargé en mémoire centrale, il faut donc placer les pages dans n’importe quelle case (ou cadre) disponible.
La correspondance entre les pages de la mémoire virtuelle et les cases de la mémoire centrale se fait par la table de pages..
Tables de pages 300px|vignette|Pagination et swapping.|gauche La taille d'une page est en moyenne de 4Ko. Les adresses des données dans une page sont constituées d'un couple numéro de page et déplacement à partir du début de cette page.
La MMU permet d'associer une adresse virtuelle à une adresse mémoire physique.. Elle reçoit en entrée une adresse virtuelle et vérifie qu'elle correspond bien à une adresse physique si c'est le cas, elle transmet l'information à la mémoire physique sinon il se produit ce qu'on appelle un défaut de page...
S'il n'existe plus de cases mémoire disponibles en mémoire physique, la mémoire virtuelle peut combiner ces mécanismes avec le swapping, pour trouver de la disponibilité mémoire sur le disque...
Il y a de nombreux mécanismes pour traduire les adresses virtuelles en adresses mémoire physiques, cela dépend de la manière dont sont stockées les données en mémoire : sous forme de pages de taille fixe, ou en segments de tailles variables ou en segments divisés en pages..
La MMU a aussi pour rôle de protéger le Système d'exploitation des accès non autorisés à des zones de la mémoire. Dans la table des pages, on trouve pour chaque entrée, un bit de validité qui indique s'il existe bien une page physique correspondant à la page virtuelle demandée, ainsi que des informations sur les droits d'accès en écriture ou en exécution, à l'accès autorisé en mode utilisateur ou non...
Le mécanisme de conversion d'adresse s'effectue grâce à la table des pages. Dès qu'un processus est chargé en mémoire principale sa table de page est chargée aussi, son rôle est de conserver l'information suivante : les adresses de pages (numéro de page + numéro de déplacement dans la page) et les adresses de cadres correspondant à ce même processus, il faut noter qu'on se sert du numéro de page comme index dans la table des pages..
Quelles sont les étapes dans la traduction de page ? vignette|Organigramme TLB.. Une fois l'adresse virtuelle générée par le processeur, on vérifie d'abord en mémoire cache TLB, s'il existe une correspondance entre la page et la case (TLB hit), l'adresse physique est directement accessible en mémoire centrale.
Si aucune correspondance n'est trouvée (TLB miss), il faut alors se rendre dans la table de pages pour déterminer l'adresse physique..
Une fois l'adresse physique déterminée, si le cadre de page existe, l'adresse physique est alors accessible en mémoire centrale. Si le cadre de page n'est pas trouvé en mémoire il se produit un défaut de page (page fault), il faut alors utiliser l'un des algorithmes de remplacement de page.
Pagination 64 bits Une adresse virtuelle est divisée en un numéro de page et un déplacement (Offset). Le numéro de page est ensuite lui-même divisé en une séquence d'index, chaque index pointant vers l'entrée de la table suivante et ainsi de suite jusqu'à la dernière table. Au fur et à mesure que la taille des adresses virtuelles augmente, le nombre de table de pages augmente également (Par exemple, il y a quatre niveaux de table pour un processeur AMD Opteron de façon à prendre en charge une adresse virtuelle 64 bits, voir ci-dessous). À chaque décennie, la profondeur du nombre de tables augmente d'un niveau...
Illustration de la pagination en mode 64 bits Ci-dessous la répartition des tables de pages sur 4 niveaux pour les processeurs AMD et Intel.. : vignette|Tables de pages pour les processeurs AMD et Intel.|700px Niveau 0 PML4 (Page Map Level 4 Offset) Niveau 1 PDP (Page Directory- Pointer Offset) Niveau 2 PD (Page Directory Offset) Niveau 3 PT (Page Table Offset)
Le registre CR3 est utilisé pour pointer vers l'adresse de base de la table de traduction de page du plus haut niveau.
Une fois que cette adresse de base est trouvée, la MMU prend les bit 39 à 47 (total de 9 bits) comme un index dans la table de page PML4. La valeur dans cet index donne l'adresse de base de la page de la table PDP.
De même, les prochains 9 bits (30 à 38) donnent l'index dans la table de page PDP qui donne l'adresse de base de la table de page d'entrée PD.
De la même façon, on trouve l'index dans la table PD pour l'adresse de base de la table PT en utilisant les 9 bits suivants (21 à 29). Les 9 bits suivants (12 à 20) donnent l'index dans la table PTE qui donne l'adresse de base de la page physique réelle contenant les données et le code du processus..
Les 12 derniers bits correspondent au décalage (Offset) dans les 4Ko de la mémoire physique.
+ x86_64 Paging Bits Affectation des bits 4 KiB Page 2 MiB Page 1 GiB Page 63... 48 Inutilisés 47... 39 Index dans la table PML4 (engl. page mapping layer 4) 38... 30 Index dans la table PDP (engl. page directory pointer) 29... 21 Index dans la table PD (engl. page directory) 30-Bit-Offset 20... 12 Table de page PT (engl. page table) 21-Bit-Offset 11... 0 12-Bit-Offset
La mémoire virtuelle : Réponse à plusieurs besoins Comme l'indique dans un article de 2008, la mémoire virtuelle répond à plusieurs besoins.. Principalement, elle permet : la gestion automatique de l’allocation de mémoire : permet de résoudre le problème du manque d'espace mémoire physique disponible dans un ordinateur, c'est ce qui est à l'origine de cette découverte ; la protection : Comme indiqué dans le chapitre protection de la mémoire virtuelle. La mémoire virtuelle met en jeu des mécanismes afin que deux processus ne puissent pas écrire en même temps dans le même espace d'adressage ; la modularité des programmes : Les programmes sont développés sous forme des modules séparés partageables et réutilisables qui seront liés entre eux qu'au moment de l'exécution dans un espace d'adressage unique ; pour les programmes orientés objets : elle permet de définir des objets et des classes que le gestionnaire de mémoire peut accéder et modifier ; la programmation de données centralisées : d'après Peter Denning . Les objets peuvent être liés à un traitement sur demande . En effet en cliquant sur un lien on déclenche un traitement dans le navigateur (Applets Java) mais celui-ci ne doit pas avoir d'impact sur les objets locaux ;