Intel Prozessoren ab dem 80286 besitzen, wie bereits unter Punkt 2.1 erläutert wurde, ein ausgeprägtes Schutzkonzept. Dieses Konzept verbietet unter anderem die Ausführung von Programmcode in anderen Privilegstufen als der gerade aktuellen. Diese Fähigkeit ist für die Stabilität des gesamten Systems von entscheidender Bedeutung. Ein Protected Mode Betriebssystem behält durch das Schutzkonzept, unabhängig von Programmfehlern in weniger privilegierten Programmen, immer die Kontrolle über alle laufenden Tasks.
Die Eigenschaft des Schutzkonzeptes hat jedoch auch einen großen Nachteil: Denn wie soll ein Anwendungsprogramm, das in Ebene 3 läuft, eine Routine des Betriebssystems (z.B. die Anforderung eines neuen Speicherblocks) nutzen, wenn der Zugriff auf den entsprechenden Programmcode schon durch den Prozessor verweigert wird?
Die Lösung dieses Problems sind die sogenannten Gates (gate, englisch, Tor), die einen genau definierten Einsprungspunkt in eine höher privilegierte Routine festlegen. Abb. 2.10 illustriert die Funktion eines Gates, der rote Pfeil stellt den direkten, jedoch verbotenen Unterprogrammaufruf dar.
Abb. 2.10: Gate für die Ausführung höher privilegierter
Unterprogramme
Prozessoren ab dem 80286 kennen vier verschiedene Arten von Gates, die als Call-, Interrupt-, Trap- und Task-Gate bezeichnet werden. Tabelle 2.2 stellt die Aufgabenbereiche der einzelnen Gates kurz vor.
Gate | Aufgabe |
---|---|
Call | Aufruf von Unterprogrammen über CALL-Befehle, mit Wechsel der Privilegstufe |
Interrupt | für Hardware-Interrupts und INT-Befehle |
Trap | für Hardware-Interrupts und INT-Befehle |
Task | alle Aufrufmöglichkeiten (für die Befehle CALL, JMP, INT und Hardware-Interrupts) mit Taskwechsel |
Die genaue Funktionsweise der Task und Call Gates soll an dieser Stelle nicht betrachtet werden. Näheres über Task Gates und Multitasking finden Sie unter Punkt: 3 Spezielle Protected Mode Funktionen.
Trap und Interrupt Gates unterscheiden sich voneinander nur durch die Behandlung des IF-Bit ("Interrrupt Enable Flag") des Flagregisters. Interrupt Gates setzen dieses Bit zurück und verhindern damit die Auslösung weiterer Hardware-Interrupts solange, bis die entsprechende Behandlungsroutine das Bit wieder setzt oder über einen IRET-Befehl endet. Trap Gates nehmen keinen Einfluß auf den Zustand des IF-Bits.
Gate-DeskriptorenGates gehören zur Gruppe der Systemobjekte, d.h. sie besitzen ein eigenes Deskriptorformat. Wie bereits unter Punkt 2.2 kurz dargestellt wurde, existiert im Byte 6 eines Deskriptors das sogenannte "Segment"-Bit. Dieses Bit legt fest, ob der entsprechende Deskriptor ein Speicher- oder ein Systemsegment (einschließlich Gates) beschreibt. Ist dieses Bit zurückgesetzt (also 0), handelt es sich um einen Systemsegment-Deskriptor.
Anmerkung: Unterschiede zwischen Speicher- und Systemsegment-Deskriptoren:
Speichersegment-Deskriptoren beschreiben die Eigenschaften, die Größe und die Startadresse eines "echten" Segmentes im Speicher. Die auf diese Weise beschriebenen Segmente können durch Programme oder durch Daten belegt werden. Dabei spielt es keine Rolle, ob die entsprechenden Segmente von einem Anwendungsprogramm oder dem Betriebssystem benutzt werden. Speichersegment-Deskriptoren besitzen ein gesetztes "Segment"-Bit.
Systemsegment-Deskriptoren werden durch ein gelöschtes "Segment"-Bit identifiziert. Durch den Inhalt ihres TYPE-Feldes werden sie in zwei unterschiedliche Gruppen aufgeteilt. Zum einen existieren spezielle Deskriptortypen, die LDTs und TS-Segmente aufnehmen, sie beschreiben ebenfalls einen Speicherbereich und legen die Basisadresse, sowie die Größe dieses Bereiches fest. Näheres zu diesen Segmenten finden Sie unter Punkt: 3 Spezielle Protected Mode Funktionen.
Auch die "Gates" gehören zur Gruppe der Systemsegment-Deskriptoren. Sie beschreiben jedoch keine Segmente, sondern definieren einen Einsprungspunkt in eine Routine. Dieser Einsprungspunkt muß in der Form einer Selektor:Offset-Kombination innerhalb des Deskriptors definiert werden.
Gate-DeskriptorformatAbbildung 2.11 zeigt den prinzipiellen Aufbau eines Gatedeskriptors.
Abb. 2.11: Gatedeskriptor (80386 Interrupt Gate)
Die Felder P ("Präsenz"-Bit) und DPL ("Descriptor Privilege Level") besitzen dieselbe Funktion wie die entsprechenden Felder eines Segmentdeskriptors. Ist das P-Bit gesetzt, befindet sich das beschriebene Segment (bzw. das durch das Gate beschriebene Unterprogramm) momentan im Speicher. Der DPL beschränkt den Zugriff auf den Deskriptor durch Programme (bzw. Tasks). Der Zugriff wird nur erlaubt, wenn der DPL des Deskriptors numerisch größer oder gleich dem Current Privilege Level ist ("CPL" = DPL des aktuellen Codesegments), d.h., das entsprechende Gate muß eine geringere oder die gleiche Privilegstufe wie ihr Aufrufer besitzen. Ist das nicht der Fall, reagiert der Prozessor bei dem Versuch, das Gate zu benutzen, mit einer Exception.
Wie bereits weiter oben erwähnt wurde, kennzeichnet das zurückgesetzte "Segment"-Bit den Deskriptor als Systemsegmentdeskriptor. Über das 4 Bit breite Type-Feld kann dann zwischen Gate-Deskriptoren und speziellen Systemdeskriptoren unterschieden werden. Weiterhin entscheidet der Wert des Type-Feldes darüber, ob es sich bei dem jeweiligen Deskriptor um einen 80286- oder 80386 Gate Deskriptor handelt. Beispielsweise benutzt der 80286 das vierte Wort des Deskriptors (Offsetadresse, Bit 16..31) nicht, da eine 16 Bit Offsetadresse aufgrund der Einschränkung des 80286 auf nur 24 Adressleitungen ausreicht.
Tabelle 2.3 gibt einen Überblick über alle möglichen Systemsegment-Typen. Alle grau gefärbten Deskriptortypen gehören zur Gruppe der speziellen Systemsegmente, sie werden unter Punkt: 3 Spezielle Protected Mode Funktionen näher betrachtet.
Wert | binär | Beschreibung |
---|---|---|
0 | 0000b | unbenutzt, ungültig |
1 | 0001b | 80286-TSS |
2 | 0010b | LDT |
3 | 0011b | aktives 80286-TSS |
4 | 0100b | 80286 Call Gate |
5 | 0101b | Task Gate |
6 | 0110b | 80286 Interrupt Gate |
7 | 0111b | 80286 Trap Gate |
8 | 1000b | reserviert |
9 | 1001b | 80386-TSS |
10 | 1010b | reserviert |
11 | 1011b | aktives 80386-TSS |
12 | 1100b | 80386 Call Gate |
13 | 1101b | reserviert |
14 | 1110b | 80386 Interrupt Gate |
15 | 1111b | 80386 Trap Gate |
Die folgende Struktur stellt einen Gate-Deskriptor dar: gate_deskriptor: dw 0200h ; Offset, Bit 0..15 dw 8 ; Codesegmentselektor db 0 ; wird nicht benutzt db 10101111b ; "Präsenz"-Bit, DPL und Segmenttyp dw 0 ; Offset, Bit 16..31 Um welchen Gate-Deskriptor-Typ handelt es sich und welche Zieladresse wird definiert? Die beschriebene Zieladresse (die Adresse des Unterprogramms) ergibt sich aus den ersten beiden, sowie dem vierten Wort zum Selektor:Offset Paar 8:00000200h. Aus dem Wert des höherwertigen Bytes des dritten Wortes (10101111b) ergibt sich:
|