Ma compréhension est que les tables de la page Shadow éliminent la nécessité d'imiter la mémoire physique à l'intérieur du VM.
c'est à dire.
À la place de:
oS GOUVERNE -> Mémoire physique virtuelle VMM + -> OS hôte -> Hôte Hardware
C'est juste:
oS invité -> VMM -> OS hôte -> Hôte Hardware
Les tables de la page Shadow permettent simplement au processus d'accéder correctement à la mémoire du matériel hôte. Je ne comprends pas non plus comment les défauts de page fonctionnent (ou que toute la mémoire physique est traitée par l'hôte, l'hôte prend en charge les défauts de page, l'échange, etc.).
Les tables de la page Shadow sont utilisées par l'hyperviseur pour garder une trace de l'état dans lequel le client "pense" que ses tables de page devraient être. L'invité ne peut pas être autorisé à accéder aux tables de la page du matériel car elle aurait essentiellement le contrôle de la machine. Donc, l'hyperviseur conserve les "réels" mappages (invité virtuel -> physiques hôte) dans le matériel lorsque l'invité concerné est exécutant et conserve une représentation des tables de page que l'invité pense qu'il utilise "dans l'ombre" ou à moins c'est comme ça que j'aime y penser.
Notez que cela évite l'étape de traduction GVA-> GPA.
En ce qui concerne les défauts de page, rien ne change du Hardware's point de vue (rappelez-vous que l'hyperviseur le fait ainsi que les tables de page utilisées par le matériel contiennent des mappages GVA-> HPA), Un défaut de page générera simplement une exception et une redirection du gestionnaire d'exception approprié. Toutefois, lorsqu'un défaut de page survient alors qu'un VM est exécuté, cette exception peut être "transmise" à l'hyperviseur, ce qui peut ensuite le gérer de manière appropriée.
L'hyperviseur doit constituer ces tables de page Shadow car elle voit des défauts de page générés par l'invité. Lorsque l'invité écrit une cartographie dans l'une de ses tables de page, l'hyperviseur ne saura pas tout de suite, de sorte que les tables de la page d'ombre ne seront pas instantanément "être synchronisées" avec ce que l'invité entend. Donc, l'hyperviseur construira les tables de la page de l'ombre dans, par ex., La manière suivante:
0xdeadbeef
Dans ses tables de page (un emplacement en mémoire), mais rappelez-vous que ce mappage n'est pas utilisé par le matériel.0xdeadbeef
, qui provoque une faute de page car les tables de page réelles n'ont pas été mises à jour pour ajouter la cartographie0xdeadbeef
encore"0xdeadbeef
-> Cartographie HPA pour le matériel à utiliser.Le cas précédent s'appelle A Shadow Page de page car il est provoqué uniquement par l'introduction de la virtualisation de la mémoire. Donc, la manipulation de la faute de la page s'arrête à l'hyperviseur et que le système d'exploitation invité n'aura aucune idée de ce que cela se produise. Notez que l'invité peut également générer de véritables défauts de page en raison de mappages qu'il n'a pas encore essayé de créer et l'hyperviseur les transmettra à l'invité. Réalisez également que tout ce processus implique que chaque Défaut de page qui se produit pendant que l'invité est exécutant doit provoquer une sortie sur la VMM afin que les tables de la page Shadow puissent rester fraîches. Ceci est coûteux et l'une des raisons pour lesquelles le support matériel a été introduit pour la virtualisation de la mémoire. ( ICI est une introduction rapide aux tables de page imbriquées ou étendues)
Une bonne référence pour cela est ce livre