# Virtual DOS Machine

Die Virtual DOS Machine (VDM) ist eine virtuelle Maschine, die in den 32-Bit-x86-Versionen der Windows-NT-Betriebssystem-Familie von Microsoft enthalten ist. Ihr Zweck besteht darin, die Kompatibilität mit älterer Software sicherzustellen, die für MS-DOS (und dazu kompatiblem DOS) entwickelt wurde.

## Funktionsweise

Die Virtual DOS Machine, initiiert durch ntvdm.exe – daher auch „NTVDM“, ist eine Emulationsschicht, die eine DOS-Umgebung und PC-Hardware-Komponenten für Programme simuliert: einen x86-Prozessor im Real Mode, einen Intel 8253/8254 PIT, CGA/EGA/VGA- und PC-BIOS sowie die gängigen DOS-Speicheradressierungsschnittstellen EMS, XMS und DPMI. Für die DOS-Programme erscheint es damit so, als würden sie unter MS-DOS laufen, allerdings sind weit nicht alle Programme mit den Einschränkungen der NTVDM kompatibel – DOS-Programme wurden für die INT-21h-Schnittstelle von DOS und/oder den direkten Hardwarezugriff entwickelt und nicht für die Windows-Programmierschnittstelle Win32.
Unter Windows werden alle Ressourcen einzig vom Kernel verwaltet, sodass ein direkter Zugriff auf die Hardware ausgeschlossen werden muss. Um dies zu garantieren, fängt die Virtual DOS Machine Maschineninstruktionen ab, die unter Windows nicht zulässig sind (und zu Exceptions führen würden), aber in DOS ungeschützt wären. Diese Instruktionen werden entweder emuliert oder übersetzt (z. B. int, in/out, cli/sti, hlt) oder weiterhin unterbunden (z. B. der direkte Zugriff auf Datenträger). Anfragen an das Betriebssystem, wie das Lesen oder Schreiben von Dateien, werden von der VDM in entsprechende Windows-Funktionen übersetzt.
Linearer Framebuffer-Zugriff (LFB), der in VESA 2.0 eingeführt wurde, ist unter Windows in einer Virtual DOS Machine mittels NTVDM nicht möglich, da dessen DPMI nur VESA-Modi ohne linearen Framebuffer-Zugriff unterstützen. Einige DOS-Anwendungen ermöglichen es aber, die höheren VESA-Modi per Kommandozeilenparameter nicht zu nutzen und auf VESA 1.2 zurückzufallen, das kein LFB, sondern Bank Switching nutzt, was von der NTVDM und dessen DPMI unterstützt wird.
Es ist möglich, mehrere Instanzen einer Virtual DOS Machine gleichzeitig auf einem Windows-Betriebssystem auszuführen. Durch spezielle Wrapper-Funktionen können Windows-Anwendungen auf den Inhalt der VDM zugreifen.
Die Virtual DOS Machine macht sich den Virtual 8086 Mode (VM86) der x86-Architektur zunutze, um DOS-Programme auszuführen. Da jedoch der Virtual-86-Modus auf x86-Prozessoren im 64-Bit-Modus Long Mode nicht verfügbar ist, wird die NTVDM bei 64-Bit-Versionen von Windows nicht mehr mitgeliefert. Die für Linux entwickelte virtuelle DOS-Umgebung DOSEMU teilt dieses Schicksal und emuliert den Real Mode deswegen in Software. Alternativen zur NTVDM sind entweder Emulatoren, virtuelle Maschinen oder Interpreter.

## Alternativen

Das aus dem ReactOS-Projekt stammende Pendant unterstützt auch 64-Bit-Varianten von Windows, also die x64-Architektur, indem es (wie DOSEMU) den Real Mode vollständig emuliert. Die ReactOS-NTVDM ist jedoch nicht in gleicher Weise in Windows integrierbar, stattdessen muss jedes DOS-Programm mit dem Kommando ntvdm.exe <program>.exe (analog zum start-Kommando, wobei <program>.exe durch das zu startende Programm zu ersetzen ist) ausgeführt werden. Derzeit funktioniert damit jedoch nur der Fenstertextmodus.
Eine für den Anwender weniger aufwendige Alternative zur NTVDM stellt ein Interpreter dar, wie z. B. DOSBox, weil die Installation eines kompatiblen DOS-Betriebssystems entfällt. Außerdem bietet DOSBox eine Vielzahl weiterer Möglichkeiten zur Steuerung der Umgebung, in der ein DOS-Programm abläuft, und benötigt zudem keine Treiber für emulierte Hardware. DOSBox emuliert auf Nicht-x86-Hardware einen Intel-Prozessor (i386, i486 oder Pentium), virtualisiert hingegen die meisten x86-Instruktionen, wenn es auf einem x86-Prozessor läuft. Komponenten wie die Soundkarte werden hingegen in beiden Fällen emuliert. Ein Treiber ist nicht notwendig, da dessen Funktionen von der virtuellen DOS-Umgebung ebenfalls bereitgestellt werden.
Eine weitere Alternative zur NT Virtual DOS Machine sind vollständige Emulatoren für den IBM-kompatiblen PC, bei dem ein gesamter Computer inklusive Prozessor in Software nachgebildet wird. Darauf muss ein PC-Betriebssystem jedoch von Hand installiert werden. Zur Nutzung als VDM-Alternative muss der Benutzer daher ein PC-kompatibles DOS zur Verfügung haben – beispielsweise das unter der GPL stehende FreeDOS, das daher quelloffen und gratis ist. Zusätzlich zur Installation von DOS sind noch die einzelnen DOS-Treiber für die emulierte Hardware erforderlich, sowie deren im Vergleich mit anderen Betriebssystemen aufwändigere Konfiguration (siehe CONFIG.SYS und AUTOEXEC.BAT), damit bestimmte Funktionen genutzt werden können, beispielsweise die Audio-Ausgabe. Aufgrund der plattformübergreifenden Verfügbarkeit von Emulatoren können DOS-Programme derart nicht nur auf Windows, sondern auf einer Vielzahl weiterer Betriebssysteme und Rechnerarchitekturen ausgeführt werden. Ein Beispiel dafür ist Bochs, aber auch virtuelle Maschinen (kurz: VM) wie QEMU, Virtual PC, VirtualBox und VMware können zum Virtualisieren oder Emulieren von DOS genutzt werden. Weil eine Emulation sehr aufwendig ist, läuft ein emuliertes DOS meist um einiges langsamer ab als das nativ gestartete Betriebssystem. Bei einer Virtualisierung werden Teile der emulierten Hardware ebenfalls nativ ausgeführt, was einen Geschwindigkeitsvorteil bringt, sodass auch Emulatoren auf der x86-Architektur oft u. a. den Prozessor virtualisieren, und somit nur Teile der Hardware emulieren.