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 :
-
La gestion de la mémoire (Memory management)
-
Le traitement des interruptions (Interrupt handling)
-
La planification du lien (Thread scheduling)
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.
-
La région V86 s'étendant
de l'adresse 0h à 0010FFEFh. Cette région appartient à la machine virtuelle actuellement en service.
-
La région privée appartenant à
l'application s'étendant d'une adresse vers le 4Mo jusqu'à 2Go. C'est le secteur où les
applications win32 (les programmes) sont exécutés. Chaque process win32 aura son propre espace privé de
2Go (moins 4 Mo).
-
La 3e région est partagée par plusieurs
applications et elle s'étendant de l'espace d'adresses de 2Go à 3Go. Ce secteur est partagé
par TOUTES les applications du système VM (le système gérant les
Machines Virtuelles) . Cette région est celle où le système lui-même réside, on parle ici des DLLs
(user32, kernel32 et gdi32). Toutes les applications (progs) Win16 tournent également ici parce qu'elles ont un comportement différent :
Elles sont habituées à lire/écrire dans d'autres progs win16 en mémoire. Dans cette région, chaque
application Win16 peut être côte à côte d'autres applications Win16. Les fichiers
Memory-Mappés sont stockés ici en tant que mémoire réservée pour les appels du DPMI.
-
La région 'système partagé' s'étendant de l'adresse 3Go à 4Go. C'est l'emplacement où le VMM et les VxDs fonctionnent.
Le Manager de Machines Virtuelles (VMM) fournit trois types de services en mémoire aux VxDs
-
Services de mémoire Page-based . Cette sorte de services alloue/gère la mémoire dans des pages de 4 Ko. Ce sont les services de mémoire de plus bas niveau disponibles. Tous les autres services de mémoire emploient les 'Services de mémoire Page-based' comme leur base.
-
Heap
memory services. Les services de mémoire de masse (de grande quantité). Ils gèrent de multiples petits blocs de mémoire. C'est un service de gestion de mémoire de haut-niveau, construits à partir des services de mémoire Page-based. Qui sont un peu les briques unitaires de ceux-ci.
-
Les services de liste . Ils gèrent des blocs de mémoire de taille fixe, qui conviennent parfaitement pour la réalisation de listes liées.
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.
-
Le planificateur primaire
-
Le 'time-slicer' (le temps de latence)
ou Planificateur secondaraire
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