Grundlagen zu Real Mode, Protected Mode und Virtual8086 Mode

Konfiguration, Anwendungen, Treiber und TSRs unter DOS
Antworten
elianda
DOS-Übermensch
Beiträge: 1150
Registriert: Mi 31. Jan 2007, 19:04
Wohnort: Halle
Kontaktdaten:

Grundlagen zu Real Mode, Protected Mode und Virtual8086 Mode

Beitrag von elianda »

Hallo,

als Basis fuer die spaeter folgende Einfuehrung zu EMS / XMS erst einmal ein paar Grundlagen zu den Prozessormodi, die fuer die Speicherverwaltung unter DOS eine grosse Rolle spielen. Ich moechte bitten unbekannte Begriffe erstmal nachzuschalgen, bevor Ergaenzungen / Fragen diskutiert werden.

Speicheradressierung:
Der Speicher auf einem x86 wird ueber Segment und Offset Adressiert. Das sind (erstmal) zwei 16 Bit Zahlen, die durch einen Doppelpunkt getrennt werden. Das Segment gibt eine durch 16 teilbare Adresse an (Granularitaet). Die physikalische Adresse ergibt sich aus 16 * Segment + Offset.
Damit ist $0100:$0010 die physikalische Adresse $00001010.
Mit einem festen Segment kann man ueber das Offset 64 kB adressieren.
Die Startadresse des letzten Segments liegt bei $FFFF also bei $000FFFF0. Das sind 16 Bytes vor der 1 MB Grenze, die den maximalen Speicherausbau eines 8086 darstellt.

Real Mode:
Der 8086 kann nur Real Mode. Im Real Mode kann man 1 MB Speicher adressieren. Die Adressierung findet wie oben beschrieben statt. Bei Zugriffen ueber 1 MB gibt es einen Wrap Around zu den unteren Adressen.

Der 80286 kann 16 MB maximal haben, dort gibt es kein Wrap Around, wenn das A20-Gate aktiv ist. Mit dem Segment $FFFF hat man eine Segment Basisadresse von 16 Byte unter der 1 MB Grenze. Mit dem Offset kann man nun in die ersten 64 kB ueber der 1 MB Grenze im Real Mode zugreifen. Das nennt sich High Memory Area - HMA unter DOS. Wenn man in der config.sys DOS=HIGH stehen hat, versucht DOS sich in diesen Speicherbereich zu laden.

Zwischen 640 kB und 1 MB werden die Erweiterungskarten und BIOS eingeblendet. Erwaehnenswert sind:
Grafikkarte Text bei $B800:0000
Grafikkarte Grafikseite 64 kB bei $A000:0000
Bios kurz vor 1 MB, meistens 128 kB. (auch Grafikkartenbios / SCSI Bios / Netzwerkkartenbios usw.)
EMS Pageframe (64 kB) meist bei $E000:0000


Protected Mode:
Seit dem 80286 (also 1981) gibt es den Protected Mode, mit dem 80386 kam noch der Paging Support und im Protected Mode der Virtual 8086 Modus hinzu. Um an den Speicher jenseits der 1 MB (+ 64 kB - 16 Byte) zu kommen, muss man den Prozessor in den Protected Mode schalten. Damit kann man volle 32 Bit adressieren. Das wird unter DOS durch HIMEM.SYS genutzt und als XMS Funktionen zur Verfuegung gestellt. Dazu woanders mehr. Weiterhin bietet der Protected Mode ein Schutzkonzept mit 4 Ebenen. (mit EM64T sind es 5 Ebenen)
Genaueres kann man dazu hier nachlesen:
http://www.fh-zwickau.de/doc/prmo/pmtutor/text/

Ein Prozess im Protected Mode kann im Virtual 8086 Modus laufen. Dazu wird vom Prozessor ein 8086 emuliert. Dieses Feature wird von den Speichermanagern EMM386 / QEMM386 ausgiebig genutzt. Dabei laeuft DOS als ein solcher Prozess.

Referenz zB. 80386/486 Handbuch fuer Programmierer ISBN: 3-86063-200-0
Dr.Önologie

Beitrag von Dr.Önologie »

Leider verändert sich viel in der 64-Bit-Welt.... :-(
elianda
DOS-Übermensch
Beiträge: 1150
Registriert: Mi 31. Jan 2007, 19:04
Wohnort: Halle
Kontaktdaten:

Beitrag von elianda »

Das ist richtig, im 64 Bit Modus kann die CPU 8 TB adressieren und die Speicherbereiche der IO Karten werden hoeher eingemappt (statt unter die 4 GB). Desweiteren kommt ein Ring -1 hinzu im Schutzkonzept.
Fuer DOS duerfte das aber weniger relevant sein.
Antworten