A20-Gate

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Das A20-Gate ist eine elektronische Schaltung in einem PC, welche die 21. Adressleitung einer zum 80286-Prozessor kompatiblen CPU freischaltet oder sperrt.

A20 bedeutet „Adressleitung 20“. Dies ist die 21. Adressleitung, da ab A0 gezählt wird. Der englische Begriff gate lässt sich am besten mit „Tor“ oder „Pforte“ übersetzen. Man spricht auch von der „A20-line“ oder der „A20-Leitung“.

Ist das gate „gesetzt“, so wird die von der CPU ausgegebene A20-Leitung an den Adressbus des Systems (und damit letztlich an den Arbeitsspeicher) weitergeleitet, ist das gate „gelöscht“, so wird das von der CPU an der A20-Leitung ausgegebene Signal unterdrückt, und immer eine logische 0 an den Systembus angelegt.

Durch das A20-Gate kann ein 286 (und größerer) Prozessor mit mehr als 20 Adressleitungen einen älteren 8086er mit nur 20 Adressleitungen (A0 bis A19) emulieren.

Architektur des 8086[Bearbeiten]

Die Intel 8086 CPU adressiert den Speicher nach einem Segmentierungsmodell. Dabei wird der verfügbare Hauptspeicher in 64 KiB-Einheiten (sogenannte Segmente, in bestimmten Kontexten auch Paragraphs genannt) unterteilt. Über jedes dieser Segmente lassen sich 64 KiB Speicher adressieren, indem ein Offset hinzugerechnet wird. Sowohl beim Segment als auch beim Offset handelt es sich um 16-Bit-Werte. Die 20-Bit-Adresse des angesprochenen Speicherbereichs berechnet sich dann nach der Formel

Segment · 16 + Offset

was einen Adressraum von etwas mehr als 1 MiB ergibt.

Der 8086er hatte einen physischen 20-Bit-Adressbus, womit sich exakt 1 MiB Speicher adressieren lässt, mit den Adressen 016 bis FFFFF16. Wenn man nun einen Segmentwert von FFFF16 zugrunde legt, und einen Offset von 016 bis F16, kann der Adressbereich von

FFFF16 · 1016 + 016 = FFFF016

bis

FFFF16 · 1016 + F16 = FFFFF16

erreicht werden. Wenn nun aber der Offset größer war, fand ein Übertrag auf das 21. Bit statt. Insgesamt lassen sich so genau 65520 Bytes mehr adressieren, als die 20 Adressleitungen adressieren können. Der 8086-er ignoriert diesen Übertrag, so dass ein Überlauf auf die ersten 65520 Byte des Arbeitsspeichers stattfindet. Da sich die Segmente überlappen, lassen sich alle Adressen mit genau 4096 Kombinationen aus Segment und Offset darstellen. Die Adresse 1234516 lässt sich z. B. mit Segment 123416 und Offset 516, aber auch mit Segment 120016 und Offset 34516 darstellen. Beim Überschreiten der Grenze von 1 MiB ergeben sich weitere Kombinationen, die auf dieselbe Speicherzelle zugreifen. Die sich dadurch ergebenden Mehrdeutigkeiten erschweren die Nutzung des Speichers u.U. erheblich.

Architektur des 80286[Bearbeiten]

Mit der Einführung des Schutzmodus (Protected Mode) wurde der Adressbus der 80286-CPU gegenüber ihren Vorgängern auf 24 Bit vergrößert. Dadurch konnte diese CPU nunmehr 16 MiB statt nur 1 MiB adressieren. Allerdings konnte nun die Adressberechnungslogik der CPU nicht mehr einfach Überträge wie den zur 21. Adressleitung ignorieren. Konsequent ergibt die Rechnung FFFF16 · 1016 + FFFF16 auf einer 80286-CPU nicht mehr die Adresse FFEF16 sondern 10FFEF16.

MS-DOS 1.25 und manche Anwendungsprogramme gingen aber davon aus, dass der Übertrag zur 21. Adressleitung abgeschnitten wurde und funktionierten andernfalls nicht richtig. Damit ergab sich ein Problem, indem der neue PC/AT nicht ausreichend kompatibel zum PC/XT sein würde. Einfach abklemmen konnte man die A20-Leitung aber auch nicht, sonst wäre man weiterhin auf maximal 1 MiB Speicher beschränkt gewesen, und ein wesentliches Verkaufsargument für den PC/AT wäre hinfällig gewesen. Als Lösung wurde das A20-Gate erfunden.

Funktionsweise des A20-Gates[Bearbeiten]

IBM baute zur Einhaltung der Abwärtskompatibilität ein Gatter in die A20-Adressleitung. Um Chips einzusparen, wurde das Gatter über den ohnehin vorhandenen Tastatur-Controller gesteuert, der ein bisher ungenutztes Bit des Steuerregisters dafür zur Verfügung stellte.

Probleme mit dem A20-Gate[Bearbeiten]

Das erste Problem ist, dass der Tastaturcontroller ein für PC-Verhältnisse langsamer und komplizierter Umweg ist. Das zweite, weitaus schwerwiegendere Problem ist jedoch, dass der Zustand des Gates nirgendwo abfragbar war. Erst später wurde eine Möglichkeit zur Abfrage über eine BIOS-Funktion durch IBM eingebaut. Als die ersten prozessorexternen Caches auftauchten, stellten sich weitere Probleme ein: der Cache musste zwischen den beiden Zuständen unterscheiden können, um nicht veraltete Daten aus dem falschen Speicherbereich zu liefern. Ein weiteres Problem ergab sich über den Wechsel zwischen Protected Mode und Real Mode. Da es im 80286 nicht vorgesehen war, aus dem Protected Mode wieder in den Real Mode zu wechseln, diese Funktionalität im PC/AT aber gebraucht wurde, nutzte IBM eine weitere Verschaltung, die dafür sorgte, dass die CPU ein Reset-Signal erhält, und damit in den Real Mode zurückfällt, sobald sie in den Shutdown-Modus geht (bei Triple Fault). So konnte durch gezieltes Provozieren eines Triple Fault doch in den Real Mode zurückgeschaltet werden. Ist dabei allerdings die A20-Leitung maskiert, so sucht die CPU nach dem Reset ihren ersten Befehl zur Ausführung statt an der Adresse FFFFF016 an EFFFF016 – einem Speicherbereich, der damals selten mit RAM oder ROM bestückt war. Mit der Nutzung der HMA durch MS-DOS (Version 4 und höhere) musste der Zustand der Maskierung oft gewechselt werden, was eine aufwändige Kontrolle des Zustandes des Gatters erforderte.

Ab dem i486 wurde ein Pin A20M am Prozessor zur Verfügung gestellt. Über diesen kann nun der AT-Tastaturcontroller (oder sein kompatibles, aber schnelleres Äquivalent) die Notwendigkeit einer Maskierung direkt an die CPU melden, die die Maskierung dann selbst durchführt. Der Zustand des Pins wird nur im Real Mode der CPU abgefragt und umgesetzt. Im Protected Mode und Virtual-8086-Mode erfolgt keine Maskierung. Die emulierte Maskierung des A20 im Virtual-8086-Mode lässt sich über das Paging lösen.

Hackmöglichkeiten auf Systemen mit A20-Maskierung[Bearbeiten]

Xbox[Bearbeiten]

Das A20-Gate lässt sich zum Umgehen des Secret-ROMs und dem Ausführen von Programmen im Flash-Speicher ausnutzen. Dazu wird die Adressleitung A20# der CPU auf GND gelegt. Die Xbox startet dann nicht von der Adresse FFFFFFF016 im Secret-ROM, sondern von der Adresse FFEFFFF016, die im Flash liegt. Dort kann zum Beispiel ein Programm abgelegt werden, welches das Secret-ROM über den I²C-Bus ausliest.[1]

Zukunft des A20-Gates[Bearbeiten]

Alle aktuellen (Intel-kompatiblen) Computer besitzen ein A20-Gate, und auch für die nähere Zukunft ist keine Abschaffung geplant, um die Kompatibilität nicht einzuschränken. Tatsächlich gebraucht wird es selten. Um genau zu sein, wird es bei jedem Rechnerstart gebraucht, da es vom Betriebssystem umgeschaltet wird. Einfacher wäre es allerdings, den Speicherumlauf von Anfang an zu deaktivieren, nur würde dann DOS nicht mehr (korrekt) auf aktuellen Computern laufen, was z. B. die Verwendung von vielen Startdisketten verhindern würde.
Erstmals verzichteten 2009 die Nehalem-basierten Xeon-Prozessoren auf das A20-Gate. [2]

Einzelnachweise[Bearbeiten]

  1. Michael Steil, 17 Mistakes Microsoft Made in the Xbox Security System (PDF; 246 kB).
  2. c't Magazin: Prozessorgeflüster - Nehalem-Xeons: völlig inkompatibel.

Weblinks[Bearbeiten]