Zum Inhalt springen

Real Mode

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 19. März 2007 um 10:42 Uhr durch INFNIC (Diskussion | Beiträge) (PM Trick). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Der Begriff Real Mode, eigentlich real address mode oder eingedeutscht Real-Modus, bezeichnet eine Betriebsart der x86-kompatiblen Prozessoren.

Charakteristika

Im Real Mode benutzt der Prozessor die gleiche Methodik wie der Intel 8086-Prozessor, um auf den Hauptspeicher zuzugreifen. Das heißt, aus Sicht des Programmierers ist er wie ein (sehr schneller) 8086 anzusprechen.

Jeder x86-kompatible Prozessor startet nach dem Reset im Real Mode. Durch einen speziellen Maschinenbefehl kann man den Prozessor in den Protected Mode versetzen.

Zugriffsschutz

Im Real Mode existiert kein Zugriffsschutz. Das heißt, dass das laufende Programm auf den gesamten Hauptspeicher und die Hardware zugreifen kann. Dies ist für moderne Multitasking-Betriebssysteme natürlich nicht akzeptabel. Deshalb benutzen alle heutigen Betriebssysteme den Protected Mode.

Segmentregister

Im Real Mode benutzt der Prozessor eine so genannte Segment:Offset-Adressierung. Es existieren vier Segmentregister: CS, DS, ES und SS; ab dem 80386 kommen noch 2 Segmentregister (FS und GS) dazu. Diese enthalten im Real Mode 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 1 MiB beschränkt bleibt, bei „Überadressierung“ und offener A20-Adressleitung werden nocheinmal 64 KiB (minus 16 Byte) im Bereich von FFFF:0010 bis FFFF:FFFF im Real Mode erreichbar. Dieser Speicherbereich wird auch als High Memory Area bezeichnet.

Unechter Realmodus („Unreal Mode“, „Big Real Mode“)

Die Beschränkung auf ein Mebibyte Hauptspeicher war schon zu DOS-Zeiten für viele Anwendungen völlig unzureichend.

Es gibt zwei Tricks womit man auch im Realmodus die Segmentregister auf 4 GB erhöhen kann. Das arbeiten im RM mit Segmentregister größer als 1MB nennt man den "Unreal Mode".

Dieser spezielle Modus gilt als undokumentiert und stellt keine eigene Betriebsart dar.

Der einfache Unreal Mode wurde vor allem seit der ersten Hälfte der 1990er-Jahre für PC-Spiele genutzt, da diese damals meist noch direkt unter dem Real-Mode-System MS-DOS abliefen; Windows war zwar damals bereits ein Protected-Mode-System, bot aber noch keine Unterstützung für die Rechenleistung voll ausschöpfende Spielprogramme. DOS-Extender waren damals bei den PC-Spiele Programmieren auch sehr beliebt.

LOADALL

Seit dem 80286 gibt es die undokumentierte Möglichkeit, mit Hilfe des Befehls LOADALL bei den 80286/80386-CPUs die gewünschten Werte in die Segmentdeskriptorcaches laden zu können, so dass selbst mit 16-Bit-Segmentregistern bis zu 4 GiB Hauptspeicher adressierbar sind. Den LOADALL Befehl gibt es nur auf dem 286 und in veränderter Form auf dem 386 auf allen anderen Prozessoren muss man dafür eine Emulation des LOADALL Befehls nutzen.

Es gibt aktuelle Entwicklungen mit LOADALL-Emulationen für x86-SMP-Systeme mit gemischter 16/32/64-Bit-Programmierung und Speicherzugriffen auf bis zu 4 GiB installiertem Hauptspeicher.

PM Trick

Der PM Trick besteht darin das man kurz in den Protected Mode schalten, die Segmentregister auf 4 GB erhöht und dann in den RM zurückschaltet. Nach dem Zurückschalten in den Real Mode bleiben diese Werte erhalten.

Beim 80286 ging der Trick über den Protected Mode noch nicht, da dieser nur über einen CPU-Reset in den Real Mode zurückgeschaltet werden konnte, welcher die Inhalte der Segmentdeskriptorcaches auf ihre Standardwerte zurückgesetzt hat, daher ist der LOADALL Befehl hier besonders wichtig.

DOS-Extender

Eine andere Möglichkeit im Real Mode den ganzen RAM an zu sprechen waren die DOS-Extender, welche die Verwendung des Real-Mode-Betriebssystems MS-DOS durch Protected-Mode-Programme erlaubten, indem sie jeweils bei Bedarf zwischen den beiden Modi umschalteten.

Siehe auch: Protected Mode, Virtual 8086 Mode, System Management Mode