StuBS
GDT Namespace Reference

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.__unnamed0__
struct  SegmentDescriptor.__unnamed1__
 Fields specific for Code Segment (for debugging purposes). More...
struct  SegmentDescriptor.__unnamed2__
 Fields specific for Data Segment (for debugging purposes). More...

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  DescriptorType {
  DESCRIPTOR_SYSTEM = 0 ,
  DESCRIPTOR_CODEDATA = 1
}
 Descriptor type. More...
enum  Size {
  SIZE_16BIT = 0 ,
  SIZE_32BIT = 2 ,
  SIZE_64BIT_CODE = 1 ,
  SIZE_64BIT_DATA = 0
}
 Address width. More...

Functions

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

Detailed Description

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).

See also
ISDMv3, 2.4.1; Global Descriptor Table Register (GDTR)
ISDMv3, 3.5.1; Segment Descriptor Tables

Enumeration Type Documentation

◆ Granularity

Unit of the segment limit.

Enumerator
GRANULARITY_BYTES 

Segment limit in Bytes.

GRANULARITY_4KBLOCK 

Segment limit in blocks of 4 Kilobytes.

◆ DescriptorType

Descriptor type.

Enumerator
DESCRIPTOR_SYSTEM 

entry is a system segment

DESCRIPTOR_CODEDATA 

entry is a code/data segment

◆ Size

enum GDT::Size

Address width.

Enumerator
SIZE_16BIT 

16-bit (D/B = 0, L = 0)

SIZE_32BIT 

32-bit (D/B = 1, L = 0)

SIZE_64BIT_CODE 

64-bit (D/B = 0, L = 1)

SIZE_64BIT_DATA 

64-bit (D/B = 0, L = 0)