Machine DOS virtuelle
# Machine DOS virtuelle

« Virtual DOS machine » (Machine DOS virtuelle) (VDM) est le nom des technologies de Microsoft permettant d'exécuter des programmes MS-DOS sur les ordinateurs équipés de processeurs Intel 80386 ou plus récents quand il y a un autre système d'exploitation présent qui contrôle le matériel.

Les machines DOS virtuelles dépendent du mode virtuel 8086 du processeur Intel 80386, qui permet d'exécuter des logiciels écrits pour le processeur 8086 en mode réel dans un environnement contrôlé en attrapant et envoyant au système d'exploitation présent (comme les manipulations d'exceptions) toutes les opérations qui demandent l'accès au matériel. Le système d'exploitation peut ensuite faire l'émulation et continuer le logiciel DOS.

Les machines DOS virtuelles sont apparues avec Windows 2.1 386 et sont présentes dans toutes les versions subséquentes de Windows. Dans la famille Windows NT, elles sont toutefois reléguées à émuler DOS et ne s'occupent plus de l'API Windows. L'exécutable de Windows NT qui est utilisé pour émuler un seul environnement DOS (et Windows 3.x) est appelé ntvdm.exe.

Les machines DOS virtuelles étaient aussi utilisées dans OS/2 2.0 et plus récent.

Quand un programme DOS à l'intérieur d'une machine DOS virtuelle demande l'accès à un périphérique, Windows lui permettra un accès direct (rarement), ou lui présentera un Virtual Device Driver (VxD en abrégé) qui émule le matériel en utilisant les fonctions du système d'exploitation. Une VDM utilisera systématiquement l'émulation pour les contrôleurs d'interruptions Intel 8259A, les « puces compteur » 8254, le DMA 8237, etc.

Les VDM pour l'OS Linux s'appellent Dosemu.

La version SCO UNIX était Merge.

En général, les technologies VDM (incluant même VMware) ne permettent pas d'exécuter de manière satisfaisante plusieurs vieux programmes DOS sur les ordinateurs d'aujourd'hui. L'émulation est utilisée seulement pour les périphériques de base (bien que Windows XP ait ajouté l'émulation de la carte son Sound Blaster et d'autres périphériques multimédia). L'émulation des périphériques supportés est incomplète et bizarre (les versions Windows de la famille NT ne mettent à jour l'écran que quelques fois par seconde quand un programme DOS écrit dans la mémoire et n'émulent pas les modes de haute résolution graphique). Parce que le logiciel est exécuté en grande partie en mode natif, toutes les boucles de temporisation vont expirer prématurément. Cela fait en sorte que le logiciel fonctionne beaucoup trop vite ou que les périphériques émulés ne sont pas détectés parce que le temps d'attente n'est pas assez grand pour leur permettre de donner une réponse.

Une solution plus intéressante dans de tels cas est d'utiliser un programme qui émule un processeur en entier tel DOSBox. Le désavantage est qu'il ne permet pas une intégration totalement transparente avec le système d'exploitation primaire.

