|
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