Virtual DOS Machine
# Virtual DOS Machine

Die Virtual DOS Machine (VDM) ist eine virtuelle Maschine, die in einigen Betriebssystemen der Microsoft-Windows-NT-Familie enthalten ist. Ihr Zweck besteht darin, die Kompatibilität mit älterer Software sicherzustellen, die für MS-DOS entwickelt wurde.

## Funktionsweise

Die Virtual DOS Machine (VDM), initiiert durch ntvdm.exe, ist eine Emulationsschicht, die eine DOS-Umgebung und verschiedene PC-Hardware-Komponenten (wie den Prozessor im Real Mode, Intel 8253/8254 PIT, CGA/EGA/VGA-/PC-BIOS) sowie gängige DOS-Speicheradressierungsschnittstellen (EMS/XMS/DPMI) für Programme simuliert, die für die INT-21h-Schnittstelle oder direkten Hardwarezugriff entwickelt wurden, anstatt für das Win32-API.

Diese Emulation ermöglicht es, die meisten DOS-Programme unter Windows auszuführen. Für die Programme erscheint es, als würden sie auf einer DOS-Maschine laufen, sie erhalten jedoch keinen direkten Zugriff auf die Ressourcen des Windows-Betriebssystems oder die Hardware. Anfragen an das Betriebssystem, wie das Lesen oder Schreiben von Dateien, werden von der Virtual DOS Machine in entsprechende Windows-Funktionen übersetzt.

Die VDM fängt 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).

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 der x86-Architektur zunutze, um DOS-Programme auszuführen. Da jedoch der Virtual-86-Modus nicht mehr funktioniert, wenn der Prozessor bereits in den 64-Bit-Modus Long Mode geschaltet wurde, wird NTVDM bei 64-Bit-Versionen von Windows nicht mehr mit ausgeliefert. 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.

Mithilfe eines Emulators, bei dem ein gesamter PC inklusive Prozessor in Software nachgebildet wird, können DOS-Programme 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 wie QEMU, Virtual PC, VirtualBox und VMware können zum Virtualisieren oder Emulieren von DOS genutzt werden. Weil ein vollständiger PC emuliert bzw. virtualisiert wird, muss in jedem Fall zuerst ein DOS-Betriebssystem in der virtualisierten Umgebung installiert werden. FreeDOS steht unter der GPL und ist somit frei (quelloffen und gratis) verfügbar, es kann aber auch ein bereits vorhandenes oder gekauftes MS-DOS oder ein dazu kompatibles Betriebssystem verwendet werden. Zusätzlich sind DOS-Treiber nötig, damit bestimmte Funktionen wie etwa Audio-Ausgabe genutzt werden können. Weil eine Emulation zudem 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.

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.

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 Anwendungen ermöglichen daher, die höheren VESA-Modi per Kommandozeilenparameter nicht zu nutzen und auf VESA 1.2 zurückzufallen. In VESA 1.2 gibt es noch keinen Linearen Framebuffer-Zugriff, sondern nur Bank Switching, was wiederum von NTVDM und dessen DPMI unterstützt wird.

