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 MS-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 1 MiB 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 war 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-MiB-Grenze zu bekommen. Anschließend startete er einen VM86-Task, in der das normale DOS gestartet 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-MiB-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.
Mit der schwindenen Bedeutung des Betriebssystems DOS ist auch der VM86-Modus heutzutage eher als historisch anzusehen und wird daher kaum noch verwendet.