|
| enum | { KERNEL_CODE_SEGMENT = 1,
KERNEL_DATA_SEGMENT = 2
} |
| |
| enum | Granularity { GRANULARITY_BYTES = 0,
GRANULARITY_4KBLOCK = 1
} |
| | Einheit fĂŒr das Segmentlimit. Mehr ...
|
| |
| enum | Type { TYPE_SYSTEM16 = 0,
TYPE_SYSTEM32 = 1,
TYPE_DATA = 2,
TYPE_CODE = 3
} |
| | Segmenttyp. Mehr ...
|
| |
| enum | Size { SIZE_16BIT = 0,
SIZE_32BIT = 1
} |
| | Breite im Codesegment. Mehr ...
|
| |
| enum | Gate {
GATE_TSS = 0x1,
GATE_LDT = 0x2,
GATE_TSS_BUSY = 0x3,
GATE_CALL = 0x4,
GATE_TASK = 0x5,
GATE_INTERRUPT = 0x6,
GATE_TRAP = 0x7
} |
| | Gatetyp. Mehr ...
|
| |
| enum | Mode { REAL_MODE,
PROTECTED_MODE,
LONG_MODE
} |
| | Modus.
|
| |
Abstraktion der GDT, welche hauptsÀchlich Deskriptoren zu den Speichersegmenten enthÀlt.
Bei der GDT handelt es sich um eine Tabelle von im Wesentlichen Segment-Deskriptoren. Ein solcher Deskriptor hat eine GröĂe von 8 Byte und beinhaltet die GröĂe, die Position, die Zugriffsberechtigungen und Verwendung eines Segmentes. Die GDT ist, anders als die LDT, fĂŒr alle Prozesse verfĂŒgbar und kann neben den Segment- Deskriptoren bei Bedarf auch TSS- und LDT-Deskriptoren enthalten. Obligatorisch fĂŒr den Kernel sind dabei nur der Nulldeskriptor (der erste Eintrag) und das Code- und Datensegment. Will man auch Userspace-Prozesse unterstĂŒtzen, werden zusĂ€tzlich ein TSS-Deskriptor und die Code-/Datensegmente fĂŒr Ring 3 benötigt. Die Basisadresse und LĂ€nge der GDT wird wĂ€hrend des Bootvorgangs in das GDTR-Register geladen (mittels lgdt).
- Siehe auch
- ISDMv3, 2.4.1; Global Descriptor Table Register (GDTR)
-
ISDMv3, 3.5.1; Segment Descriptor Tables