Manager de Machine Virtuelle (VMM)

(Virtual Machine Manager)



Le Manager de Machine Virtuelle (VMM) est le véritable système d'exploitation qui se cache derrière Windows 95. Il construit et entretient la structure de la gestion des machines virtuelles. Il fournit aussi beaucoup de services importants à d'autres VxDs. Les trois services importants sont :

Gestion de la mémoire (Memory Management)

Le VMM (Le Manager de Machine Virtuelle) emploie la particularité de pagination du processeur Intel 80386 (et des suivants) pour créer un espace d'adresses 32 bits virtuel pour le système de VM (Machine Virtuelle). Il divise l'espace d'adresse en quatre secteurs distincts. Le Manager de Machines Virtuelles (VMM) fournit trois types de services en mémoire aux VxDs

Traitement des interruptions (Interrupt handling)

Ici on parle du fait de suspendre un programme un court instant pour pouvoir poursuivre le cours d'un autre qui tourne en parallèle puis reprendre le fil de ce premier là où on en était. Et ainsi de suite...
Il y a les interruptions du mode protégé, consignées dans la Table Descriptive des Interruptions (IDT). Le VMM (Manager de Machines Virtuelles)surveille l'IDTs (les interruptions) des VMs (des machines virtuelles) avec l'aide de VxDs (Virtuals Devices, matériels virtuels). Normalement le VMM contrôle pratiquement toutes les entrées de la table des interruptions (l'IDT) . Le VMM contrôle des VxDs, et fait en sorte que la première interruption sauvegarde sur la pile l'état du programme interrompu puis transfert le contrôle à d'autres VxDs qui s'occupent à leur tour du nouveau process en cours et de ses interruptions. Quand ce second process sera à son tour interrompu, le VMM transférera le contrôle à la routine de réexpédition qui rétablira l'état du premier programme interrompu et reprendra l'exécution au point pile où a eu lieu l'interruption.

Cependant, cette description reste un peu simplette. Le renvoi ne peut pas être immédiat parce que le temps d'attente du VM interrompu peut expirer. Les VxDs ont la possibilité d'installer des manipulateurs d'interruption grâce à certains services du VMM tels que Set_PM_Int ou Hook_V86_Int_Chain. Les VxDs ne doivent pas modifier directement les entrées de l'IDT (Table Descriptive des Interruptions) (mais vous pouvez le faire si vous êtes sûrs de ce que vous faîtes.)

La planification du lien (Thread scheduling)

Le VMM emploie deux moyens de planification pour parvenir à créer le mode Multi-Taches entre les liens et les VMs. La tâche du planificateur primaire est de choisir un lien pour lui attribuer la priorité d'exécution la plus haute et ainsi le lancer. Ce choix se produit alors même que le VMM entretient une interruption (un peu comme un timer pour interruption). Ce résultat fait que l'on donnera au lien/VM le contrôle dès que le VMM arrêtera d'entretenir l'interruption. Le planificateur primaire travaille sous la règle: 'sans compromis'. Donc pour un lien, soit il sera relancé soit il restera suspendu. Uniquement un seulement lien est choisi. Le VMM ou d'autres VxDs ont la possibilité d'augmenter ou de réajuster la priorité d'exécution d'un lien, au travers des services du VMM. Par exemple, si une interruption matériel se produit, alors le VMM augmentera la priorité d'exécution du manipulateur d'interruptions pour qu'il ait le droit de l'achever au plus vite.
Le planificateur secondaire emploie les services du planificateur primaire pour répartir le temps du CPU (de l'Unité Centrale) entre les différents liens. Ainsi chacun d'eux se partagent la priorité d'exécution la plus haute pendant un même laps de temps. Quand un lien reste ouvert et que sa tranche de temps expire, alors le planificateur secondaire augmente la priorité d'exécution du lien suivant pour que ce dernier soit choisi à son tour par le planificateur primaire. Et c'est lui qui prend la alors la main.

Vous pouvez obtenir plus de détails sur ces sujets grâce aux documents Walter Oney's Systems Programming for Windows 95 ainsi que la documentation Windows 95 DDK.


[Iczelion's Win32 Assembly Homepage]


Traduit par Morgatte