Real Mode
Der Begriff
, eigentlich
oder eingedeutscht Real-Modus, bezeichnet eine Betriebsart der x86-Architektur, die ab dem 80286 von Intel unter diesem Namen für den ursprünglich einzigen Betriebsmodus des 8086 existiert.
Charakteristika
Im
benutzt der Prozessor die gleiche Methode wie der 8086/8088-Prozessor, um auf den Hauptspeicher zuzugreifen. Das heißt, aus Sicht des Programmierers ist er wie ein (schnellerer) 8086 anzusprechen. Jeder x86-Prozessor startet nach dem Reset im
. Durch eine spezielle Variante des MOV-Befehls kann man den Prozessor in den
versetzen.
Bedeutung
Der
ist der Standardmodus für PC-kompatibles DOS, wie es mit PC DOS und MS-DOS mit dem IBM PC, Modell 5150, 1981 eingeführt wurde. Dazu kompatible Betriebssysteme sind u. a. DR-DOS, PTS-DOS und FreeDOS. Er wird auch in weiteren zum IBM-PC kompatiblen Betriebssystemen wie CP/M-86 verwendet und in den frühen Versionen von Windows, das bis Windows 3.x von DOS aus gestartet wird, unterstützt. Neuere Betriebssysteme verwenden ihn nur noch während der Startphase, wobei praktisch alle modernen Betriebssysteme bereits zu einem sehr frühen Zeitpunkt in den
umschalten. Zur Ausführung von
-Betriebssystemen und der dazugehörigen historischen Software bieten sich heute Emulatoren wie z. B. DOSBox, QEMU, Bochs etc. an.
Zugriffsschutz
Im
existiert kein Zugriffsschutz. Das heißt, dass jedes laufende Programm auf den gesamten Hauptspeicher und die Hardware zugreifen kann – ein einzelnes abstürzendes Programm also zu einem kompletten Systemabsturz führen kann. Dies ist für moderne Multitasking-Betriebssysteme allerdings nicht akzeptabel.
Segmentregister
Im
benutzt der Prozessor eine sogenannte Segment:Offset-Adressierung. Es existieren vier Segmentregister: CS (
), DS (
), ES (
) und SS (
); ab dem 80386 kommen noch zwei weitere Segmentregister (FS und GS) dazu. Alle Segmentregister enthalten im
lediglich 16-Bit-Segmentadressen. Zur Errechnung der realen, linearen Adressen werden die Inhalte mit 16 multipliziert und zum Offset addiert. Da die Offset-Adresse ebenfalls auf 16 Bit begrenzt ist, ergibt sich eine 20-bittige lineare Adresse, wodurch der direkt und ohne Tricks nutzbare Adressraum auf ein MiB (220 Byte) beschränkt bleibt. Ab dem 80286er werden bei „Überadressierung“ und offener A20-Adressleitung noch einmal 64 KiB (minus 16 Byte) im Bereich von FFFF:0010 bis FFFF:FFFF im
erreichbar. Dieser Speicherbereich wird auch als
bezeichnet.
Unechter Realmodus („Unreal Mode“, „Big Real Mode“)
Die Beschränkung auf ein Megabyte Hauptspeicher war schon zu MS-DOS-Zeiten für viele Anwendungen völlig unzureichend. Es gibt aber zwei Tricks, mit denen man auch im
die Segmentregister auf vier GiB erhöhen kann; das Arbeiten im
jenseits von einem MiB nennt man den „
“. Dieser spezielle Modus gilt als undokumentiert und stellt keine eigene Betriebsart dar. Der einfache „
“ wurde vor allem in der ersten Hälfte der 1990er-Jahre für PC-Spiele genutzt, da diese damals meist noch direkt unter dem
-System MS-DOS abliefen. Windows war zwar damals bereits ein
-System, bot aber noch keine Unterstützung für Spielprogramme, welche die Rechenleistung voll ausschöpfen konnten. Beide Tricks beruhen darauf, dass der Prozessor auch im Real Mode die Schattenregister der Segmentregister für die Adressberechnung benutzt, auch wenn diese im
nicht direkt erreichbar sind. Über Umwege kann man jedoch die Schattenregister auf Werte setzen, die einen Zugriff auf Speicherbereiche jenseits der 1-MiB-Grenze erlauben: Entweder man setzt den Segmentanfang auf eine Speicheradresse jenseits der 1-MiB-Grenze, oder (wenn mindestens ein 80386-Prozessor zur Verfügung steht) man erhöht die Segmentgröße von 64 KiB auf 4 GiB.
Der LOADALL-Trick
Auf dem 80286 und 80386 (und einigen 486er-Modellen) existiert ein undokumentierter Befehl LOADALL (286) bzw. LOADALLD (386), mit dem man alle Register der CPU mit eigenen Werten füllen kann. Dies betrifft insbesondere auch die Register, die im
nicht verfügbar sind, womit auch die gewünschten Werte in die Segmentbeschreibungscaches geladen werden können. Auf neueren CPUs lösen diese Befehle eine „Unbekannter Opcode“-Ausnahme aus, welche dazu genutzt werden kann, den Befehl zu emulieren.
Der PM-Trick
Der PM-Trick besteht darin, in den
zu schalten, die Segmentregister inklusive Schattenregister mit den gewünschten Werten zu laden und dann wieder in den
zurückzuschalten, wobei die Werte in den Registern erhalten bleiben. Beim 80286 funktioniert diese Methode noch nicht, da diese CPU nur über einen CPU-Reset in den
zurückgeschaltet werden kann; dabei werden aber die Inhalte der Segmentdeskriptorcaches auf ihre Standardwerte zurückgesetzt. Folglich bleibt für diese Prozessortypen nur die oben erwähnte LOADALL-Methode.
DOS-Extender
Eine andere Möglichkeit, im
den gesamten Adressraum anzusprechen, sind die DOS-Extender. Diese Spezialprogramme erlauben die Verwendung des
-Betriebssystems MS-DOS (und kompatibles DOS) durch
-Programme, indem sie jeweils bei Bedarf zwischen den beiden Modi umschalten: das Anwendungsprogramm selbst läuft im
, für DOS-Aufrufe wird jeweils in den
geschaltet. DOS-Extender haben den Vorteil gegenüber dem
, dass sie meist auch mit Windows, zumindest mit Windows 95/98/SE, noch kompatibel sind; derartige DOS-Programme können also meist auch direkt unter Windows gestartet werden. Der
kann unter diesen Windows-Versionen dagegen nur durch das Starten des Rechners im „MS-DOS-Modus“ genutzt werden, die NTVDM in NT-basierenden Windows-Versionen unterstützt das nicht.
Siehe auch
Weblinks
- Intel IA-32 Software Developer's Manual - Volume 3A (PDF-Datei; englisch; 2,9 MB)
- A Brief History of Unreal Mode (englisch)