Virtual DOS Machine
Die Virtual DOS Machine (VDM) ist eine virtuelle Maschine, die in einigen Betriebssystemen der Microsoft-Windows-NT-Familie enthalten ist, um die Kompatibilität mit älterer, für MS-DOS entwickelter Software sicherzustellen.
Funktionsweise
Ausgehend von ntvdm.exe simuliert eine Virtual DOS Machine weitgehend eine DOS-Umgebung, einige PC-Hardware-Komponenten (z. B. Prozessor in Real Mode, Intel 8253/8254 PIT, CGA/EGA/VGA-/PC-BIOS), sowie gängige DOS-Speicheradressierungsschnittstellen (EMS/XMS/DPMI) für Programme, die nicht für das Win32-API ausgelegt wurden, sondern für die INT-21h-Schnittstelle bzw. direkten Hardwarezugriff programmiert sind. Über diese Emulationsschicht können die meisten DOS-Programme unter Windows ausgeführt werden. Für die Programme scheint es, als ob sie sich auf einer DOS-Maschine befänden, sie haben jedoch keinen direkten Kontakt zu den Ressourcen des Windows-Betriebssystems oder zu der Hardware. Anforderungen an das Betriebssystem (z. B. Dateien lesen oder schreiben) werden durch die Virtual DOS Machine in die entsprechenden Windows-Funktionen übersetzt. Maschineninstruktionen, die unter Windows nicht zulässig sind (diese führen zu Exceptions), aber in DOS ungeschützt wären, werden abgefangen und dann entweder emuliert oder übersetzt (z. B. die int, in/out, cli/sti, hlt Instruktionen), oder weiterhin unterbunden (z. B. den direkten Zugriff auf Datenträger). Es können mehrere Instanzen einer Virtual DOS Machine ausgeführt werden. Somit können auf einem Windows-Betriebssystem mehrere virtuelle DOS Maschinen gleichzeitig laufen. Über spezielle Wrapper-Funktionen ist es möglich, von Windows aus auf den Inhalt der VDM zurückzugreifen.
Die Virtual DOS Machine macht sich den Virtual 8086 Mode von x86-Prozessoren 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.[1] 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 zu 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.[2]
Siehe auch
Literatur
- Andrew S. Tanenbaum, Moderne Betriebssysteme, Pearson Studium Verlag 2003, ISBN 3-8273-7019-1
Einzelnachweise
- http://support.amd.com/TechDocs/24593.pdf "AMD64 Architecture Programmer’s Manual – Volume 2: System Programming", Seite 11 ff.
- http://www.sierrahelp.com/XPHelp/VESAModesAndXP.html