Accueil
Qui suis-je ?
 
Mes livres
Les pompes rotodynamiques
Commander un livre
 
Mes programmes
Nopopup
Aide française
Télécharger
English help
Download
 
Optipump
English help
Download
 
SaveRes
Aide française
Télécharger
English help
Download
 
TTFName
Aide française
Télécharger
 
Mes articles
Composant ASP en C/C++
VxD W9x en ASM
 
Mes photos
Afrique australe
Autres photos
 
 visiteurs.
 pages vues.
 connecté(s).
Accueil-->VxD W9x en ASM - Chapitre 2

Le Virtual Machine Manager

1 Introduction

Le Virtual Machine Manager (VMM) est le véritable système d’exploitation caché derrière Windows 9x. Il bâtit et entretient le support chargé de piloter les machines virtuelles. Il fournit aussi beaucoup de prestations aux autres. Les trois plus importantes sont la gestion de la mémoire, le traitement des interruptions, et le partage de temps.

2 Gestion de la mémoire

2.1 Généralités

Le VMM exploite les possibilités de pagination des processeurs Intel 80386 et ultérieurs pour créer un espace virtuel d’adressage pour la machine virtuelle système.

2.2 Les espaces d’adressage

2.2.1 L’espace d’adressage V86 de l’adresse 0h à 10FFEFh.

Cette région appartient à la machine virtuelle en cours.

2.2.2 L’espace d’adressage privé de l’application de 4Mo à 2Go.

C’est dans cette zone que les applications win32 fonctionnent. Chaque process win32 dispose de son propre espace privé de 2GB (moins 4 MB).

2.2.3 L’espace d’adressage partagé de l’application de 2 Go à 3 Go.

Cette région est partagée entre toutes les applications fonctionnant dans la machine virtuelle système. Ces ici que les DLL système (user32, kernel32, et gdi32) résident. Toutes les applications fonctionnent dans set espace. Les fichiers mappés en mémoire sont stockés ici, ainsi que la mémoire allouée pour les appels DPMI.

2.2.4 L’espace d’adressage partagé système de l’adresse 3Go à 4Go.

Cette zone est réservée au VMM ainsi qu’aux VxD.

2.3 Mode de gestion de la mémoire des VxD par la VMM

2.3.1 Gestion par page.

Cette fonctionnalité alloue et gère la mémoire par pages de 4 Ko. C’est le mode de gestion de plus bas niveau. Tous les autres modes dérivent de ce mode primaire.

2.3.2 Gestion par tas (Heap)

Allocation et gestion par petits blocs. C’est le mode de gestion de plus haut niveau, construit à la base sur une gestion de pages.

2.3.3 Gestion par blocs fixes.

Allocation et gestion par blocs de taille fixe convenant aux listes chaînées.

3 Traitement des interruptions

3.1 Généralités

Les interruptions en mode protégé se font via la table de description des interruptions (IDT). VMM supervise les IDT de chaque VM avec l’appui des VxD.

Normalement le VMM traite la plupart des entrées des IDT. Il contient le gestionnaire d’interruption de premier niveau qui sauvegarde l’état du programme interrompu sur la pile et se contente de transférer le contrôle au gestionnaire d’interruption de second niveau pouvant être dans un VxD quelconque et chargé du traitement par lui-même. Quand le gestionnaire de second niveau termine son travail, il transfère le contrôle à la routine de ré acheminement chargée de restaurer l’état du programme interrompu et de reprendre l’exécution a l’endroit interrompu.

3.2 Restrictions

Cette description est toutefois par trop simplifiée de par les faits suivants :

  • Le ré acheminement peut ne pas être immédiat car la tranche de temps allouée aux VM peut se terminer.
  • Les VxD peuvent installer des gestionnaires d’interruption via des services VMM comme Hook_V86_Int_Chain.
  • Les VxD ne devraient pas modifier directement les entrées de l’IDT (mais vous pouvez si vous êtres vraiment sur de ce que vous faites)

4 Partage de temps

4.1 Introduction

Le VMM utilise des programmateurs pour implémenter le multitâche préemptif dans les unités d’exécution (Threads) et les VM : les ordonnanceurs primaire et secondaire.

4.2 L’ordonnanceur primaire

L’ordonnanceur primaire dont la tache est de sélectionner et basculer l’exécution vers le thread ayant la plus haute priorité. Cette sélection se produit même si le VMM est en train de traiter une interruption comme les interruptions du timer). Le résultat détermine à quel thread ou VM sera donné le contrôle quand le VMM aura fini de traiter l’interruption. L’ordonnanceur primaire marche suivant des règles simplistes.

  • Soit un thread est en cours soit-il ne l’est pas
  • Seul un thread à la fois est sélectionné.

VMM et les autres VxD peuvent modifier l’ordre de priorité des threads par les services VMM. Par exemple, si une interruption hardware survient, le VMM augmentera la priorité du gestionnaire d’interruption pour qu’il ait une plus grande chance de se terminer le plus vite possible.

4.3 L’ordonnanceur secondaire

L’ordonnanceur secondaire utilise le service de l’ordonnanceur primaire pour allouer des tranches de temps et répartir le temps CPU parmi les threads qui ont tous le même niveau de priorité le plus élevé. Quand un thread s’exécute jusqu’à ce que sa tranche de temps expire, l’ordonnanceur secondaire accélère la priorité du thread suivant de manière à ce qu’il soit sélectionné par l’ordonnanceur primaire.

4.4 Références

Vous pouvez obtenir plus de détails à ce sujet en lisant le livre de Walter Oney's intitulé Systems Programming for Windows 95 ainsi que la documentation du DDK Windows 9x.

Page:  1  3  4  5  6  7  8  9 

Précédent       Suivant

Copyright © Jean-Pierre Fayeulle