Speicherverwaltung (Segmentierung und Paging) in 80286 und 80386: Wie funktioniert das?

2887
Andrew J. Brehm

Ich habe viele Websites und Bücher gefunden, in denen erklärt wird, wie die Speicherverwaltung auf den 8086- und späteren x86-CPUs im Real-Modus funktioniert. Ich verstehe, ich denke, wie zwei 16-Bit-Werte, Segmentadresse und Offset, kombiniert werden, um eine lineare physische 20-Bit-Adresse zu erhalten (Segment um vier Bits nach links verschieben, Offset hinzufügen; Segmente sind 64 KByte und beginnen alle 16 Bytes).

Ich konnte jedoch keine guten Websites oder Bücher finden, die die Funktionsweise der Speicherverwaltung im geschützten Modus erläuterten, insbesondere die Unterschiede zwischen 80286 und 80386.

Kann mir jemand auf eine gute Website oder ein gutes Buch verweisen (oder es hier erklären)?

(Für zusätzliche Gutschriften, z. B. eine Aufwertung, wie funktioniert es im Long-Modus?)

2

2 Antworten auf die Frage

3
jsymolon

http://www.ddj.com/184409207 Dr. Dobbs hat ein paar Artikel in diesem Zusammenhang in 93 & 94 veröffentlicht, und es gibt nicht zu viele Unterschiede zwischen der Art, wie der 286 und der 386 mit dem Speicher umgehen. Grundsätzlich können Sie die Bearbeitung des Segments: Versatz nicht durchführen, da der Hauptspeicherort und die Länge nun Teil des Selektors sind, auf den Sie sich wie ein Handle beziehen.

Sie haben den Selektor N mit einer Basisadresse X mit einer Länge von M eingerichtet. Wenn dieser Selektor aktiviert ist (erinnern Sie sich an die CS: Assembly-Syntax?), Wird dieser Speicherbereich verwendet (ausgelagert usw.). Selektor N (das 16-Bit-Handle) bezieht sich auf diese Datenstruktur.

Für den geschützten Modus des Flat-Memory-Modells werden Code, Daten und Stack auf die gleichen Speicheradressen (und eine Länge von 4 GB) eingestellt. Dieser Link deckt die Grundlagen ziemlich gut ab.

Der verlinkte Artikel ist wirklich gut. Andrew J. Brehm vor 13 Jahren 0
1
Tudor

Für den Real-Modus gibt es keine Speicherverwaltung, es multipliziert nur das Segmentregister mit 16 und addiert den Versatz, dann wird dies das 21-Bit-Ergebnis (ja 21bit, da 0xFFFF * 0x10 + 0xFFFF = 0xFFFF0 * 0xFFFF = 0x1FFFEF oder 1_1111_1111_1110_1111b, ein 21bit-Wert). auf dem Adressbus.

Für den langen Modus ist Segmentierung vorhanden, aber die Deskriptoren haben die Basis 0 und begrenzen 0xFFFFFFFFFFFFFFFF (16EB). Daher ist der Flat-Modus, der Paging-Modus rundherum und derselbe PAE-Paging, aber die Page Directory Pointer-Tabelle ist von 4 Einträgen auf 512 Einträge und eine Seitenebene erweitert 4 Tabelle mit 512 Einträgen, die jeweils auf eine andere Page Directory Pointer Table zeigen.

Und hier sind einige Websites, die das genauer erklären: http://en.wikipedia.org/wiki/Real_mode für den Real-Modus und http://en.wikipedia.org/wiki/Long_mode für den Ling-Modus