Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik
GDT-Namensbereichsreferenz

Abstraktion der GDT, welche hauptsÀchlich Deskriptoren zu den Speichersegmenten enthÀlt. Mehr ...

Klassen

struct  Pointer
 Diese Struktur beschreibt einen GDT Zeiger. Mehr ...
 
union  SegmentDescriptor
 Beschreibt den Aufbau von Segment-Descriptoren. Mehr ...
 

AufzÀhlungen

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.
 

Funktionen

constexpr Pointer gdt_protected_mode_pointer (protected_mode)
 
constexpr Pointer gdt_long_mode_pointer (long_mode)
 

Variablen

constexpr SegmentDescriptor protected_mode []
 
constexpr SegmentDescriptor long_mode []
 

AusfĂŒhrliche Beschreibung

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

Dokumentation der AufzÀhlungstypen

◆ Gate

enum GDT::Gate

Gatetyp.

Siehe auch
ISDMv3, Table 3-2; System-Segment and Gate-Descriptor Types
AufzÀhlungswerte
GATE_TSS_BUSY 

wenn der Task gerade lÀuft, sonst GATE_TSS

GATE_TASK 

nur in 16 bit

◆ Granularity

Einheit fĂŒr das Segmentlimit.

AufzÀhlungswerte
GRANULARITY_BYTES 

Einheiten in Bytes.

GRANULARITY_4KBLOCK 

Einheiten in 4 Kilobyte Blöcke.

◆ Size

enum GDT::Size

Breite im Codesegment.

AufzÀhlungswerte
SIZE_16BIT 

StandardmÀssig 16 Bit Adressen.

SIZE_32BIT 

StandardmÀssig 32 Bit Adressen.

◆ Type

enum GDT::Type

Segmenttyp.

AufzÀhlungswerte
TYPE_SYSTEM16 

Eintrag ist ein 16 bit Systemsegment.

TYPE_SYSTEM32 

Eintrag ist ein 32 bit Systemsegment (z.B. TSS)

TYPE_DATA 

Eintrag ist ein Datensegment.

TYPE_CODE 

Eintrag ist ein Codesegment.

Variablen-Dokumentation

◆ long_mode

constexpr SegmentDescriptor GDT::long_mode[]
Initialisierung:
= {
{},
{ 0x0,
0x0,
true,
0,
LONG_MODE },
}

◆ protected_mode

constexpr SegmentDescriptor GDT::protected_mode[]
Initialisierung:
= {
{},
{ 0x0,
0xFFFFFFFF,
true,
0,
PROTECTED_MODE },
{ 0x0,
0xFFFFFFFF,
false,
0,
PROTECTED_MODE },
}