Virtual 8086 Mode
aus Wikipedia, der freien Enzyklopädie
Der Betriebsmodus Virtual 8086 Mode wurde mit dem Intel 80386-Prozessor eingeführt. Da damals – im Jahre 1985 – sich Protected-Mode-Betriebssysteme noch nicht am Markt gegen das Real-Mode-Betriebssystem DOS durchgesetzt hatten, wurde mit dem Virtual 8086 Modus (kurz: VM86) die Möglichkeit geschaffen, innerhalb eines Protected-Mode-Betriebssystems Real-Mode-Programme (also vor allem DOS-Programme) auszuführen, ohne die Protected-Mode-Umgebung zu verlassen.
Bekanntestes Beispiel hierfür ist die so genannte DOS-Box, die ab Microsoft Windows 3.0 existierte.
Im Protected Mode (PM) können mehrere Programme (so genannte Tasks) quasi parallel ablaufen. Für jeden dieser Tasks kann über ein bestimmtes Bit im Flag-Register festgelegt werden, ob er ein VM86-Task sein soll.
Im Virtual 8086 Modus verhält sich der Prozessor aus Programmsicht wie ein (sehr schneller) 8086. Jedem VM86-Task stehen maximal ein Mebibyte Arbeitsspeicher zur Verfügung. Dies muss – im Gegensatz zum Real Mode – jedoch nicht das erste Mebibyte im Speicher sein, da die Protected-Mode-Umgebung im Hintergrund automatisch eine Umsetzung der virtuellen Adressen in physische Adressen vornimmt.
Da ein VM86-Task in der Regel unprivilegiert läuft, hat er nur eingeschränkte Zugriffsrechte auf die Hardware oder bestimmte CPU-Register. (Dies ist notwendig, da sonst ein Programm in einer „DOS-Box“ das Protected-Mode-Betriebssystem und somit den Speicherschutz umgehen könnte.) Jeder Hardwarezugriff, den ein VM86-Task macht, wird daher vom Prozessor abgefangen und als Exception an das PM-Betriebssystem gemeldet, welches dann entweder das Verhalten der Hardware nachbilden (simulieren) muss, oder bei unerlaubten Zugriff den VM86-Task und das in ihm laufende Programm beendet. Da unter DOS solche direkten Hardwarezugriffe recht häufig vorkommen, stellt dies an das PM-Betriebssystem große Anforderungen, da eine Vielzahl an Hardwareverhalten nachgebildet werden muss. Da das Abfangen und Simulieren der Hardwarezugriffe außerdem meist langsamer ist als der direkte Hardwarezugriff, laufen viele DOS-Programme im VM86-Modus spürbar langsamer als im „echten“ Real Mode.
Der VM86-Modus wurde jedoch nicht nur für DOS-Boxen z.B. unter Windows, OS/2, Linux (über das Programm DosEmu) benutzt, sondern auch von DOS selbst. Der Speichertreiber EMM386.EXE von MS-DOS schaltete – vom Benutzer meist unbemerkt – in den Protected Mode, um Zugriff auf den Speicher jenseits der 1-Mebibyte-Grenze zu bekommen. Anschließend startete er einen VM86-Task, in den das bereits laufende DOS dann verlegt wurde. EMM386.EXE benutzte die ebenfalls ab dem 80386er verfügbare Paging-Technik, um den DOS-Programmen mehr Speicher zur Verfügung zu stellen, indem es Speicher von jenseits der 1-Mebibyte-Grenze in den DOS-Adressraum einblendete. (so genannte Upper Memory Blocks UMB und Expanded Memory EMS) Solche Speichermanager existierten auch für die anderen MS-DOS-kompatiblen Betriebssysteme. Sie hießen dort anders, aber ihre prinzipielle Arbeitsweise war identisch.
Beim 486er und Pentium kamen weitere Features für den VM86-Modus hinzu, die es erlauben, dass bestimmte Interrupt-Serviceroutinen komplett im VM86-Modus abgearbeitet werden können, ohne dass aufwändige Task-Wechsel in das Protected-Mode-Betriebssystem erfolgen müssen. Dies ermöglicht eine Ausführungsgeschwindigkeit, die dem echten Real Mode sehr nahe kommt.
Mit der schwindenden Bedeutung des Betriebssystems DOS ist auch der VM86-Modus heutzutage eher als historisch anzusehen und wird daher kaum noch verwendet, auch wenn er in jeder aktuellen x86-kompatiblen CPU noch verfügbar ist. Im "Compatibility Mode" der AMD64-Architektur wird der Virtual86 Mode nicht mehr unterstützt. Allerdings existieren Software-Emulatoren wie DOSBox, die eine 8086-kompatible CPU incl. PC-typischer Hardwareumgebung komplett in Software emulieren können.