Dockers DEV Site


Updates · Faq · Home 

2.4 Gates, Interrupts und Exceptions (IDT)

Einleitung

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.

Gates
Abb. 2.10: Gate für die Ausführung höher privilegierter Unterprogramme

Unterschiedliche Arten von Gates

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
Tabelle 2.2: verfügbare Gates

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-Deskriptoren

Gates 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:

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-Deskriptorformat

Abbildung 2.11 zeigt den prinzipiellen Aufbau eines Gatedeskriptors.

Gatedeskriptor
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
Tabelle 2.3: mögliche Systemsegment Typen

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:

  • Das Segment, in dem sich die angesprochene Routine befindet, ist momentan im Speicher verfügbar ("Präsenz"-Bit = 1).

  • Das Feld DPL besitzt einen Wert von 01b, d.h. ein Programm, das dieses Gate benutzt, braucht mindestens einen CPL von 1 (d.h. die Privilegstufe 1 oder 0).

  • Das Type-Feld besitzt den Wert 1111b, es handelt sich also um ein 80386 Trap Gate.

Index
weiter >>
<< zurück ||

Last change 27/11/2022 by Docker Rocker.
This page uses no cookies, no tracking - just HTML.
Author: "Docker Rocker" ~ 2022 · [Public Git]