
Abstracts the GDT that, primarily, contains descriptors to memory segments. More...
Classes | |
union | SegmentDescriptor |
Describes the structure of segment descriptors. More... | |
Structs | |
struct | Pointer |
Structure that describes a GDT Pointer (aka GDT Descriptor) More... | |
struct | SegmentDescriptor.__unnamed__ |
Enumerations | |
enum | Segments { SEGMENT_NULL = 0, SEGMENT_KERNEL_CODE, SEGMENT_KERNEL_DATA } |
enum | Granularity { GRANULARITY_BYTES = 0, GRANULARITY_4KBLOCK = 1 } |
Unit of the segment limit. More... | |
enum | Type { TYPE_SYSTEM16 = 0, TYPE_SYSTEM32 = 1, TYPE_DATA = 2, TYPE_CODE = 3 } |
Segment type. More... | |
enum | Size { SIZE_16BIT = 0, SIZE_32BIT = 1 } |
Address width in code segment. More... | |
enum | Gate { GATE_TSS = 0x1, GATE_LDT = 0x2, GATE_TSS_BUSY = 0x3, GATE_CALL = 0x4, GATE_TASK = 0x5, GATE_INTERRUPT = 0x6, GATE_TRAP = 0x7 } |
gate type More... | |
enum | Mode { REAL_MODE, PROTECTED_MODE, LONG_MODE } |
Modus. | |
Functions | |
constexpr Pointer | gdt_protected_mode_pointer (protected_mode) |
constexpr Pointer | gdt_long_mode_pointer (long_mode) |
Abstracts the GDT that, primarily, contains descriptors to memory segments.
The GDT is a table that primarily contains segment descriptors. Segment descriptors has a size of 8 Bytes and contains the size, position, access rights, and purpose of such a segment. Unlike the LDT, the GDT is shared between all processes and may contain TSS and LDT descriptors. For the kernel, the first entry is required to be a null descriptor and the code and data segments. To support user-mode processes, additional TSS, code, and data segments for ring 3 must be added.
The base address and size of the GDT are written to the GDTR register during boot (via. lgdt
).
enum GDT::Granularity |
enum GDT::Type |
enum GDT::Size |
enum GDT::Gate |