The Global Descriptor Table (GDT) is a data structure used by Intel x86-family processors starting with the 80286 in order to define the characteristics of the various memory areas used during program execution, including the base address, the size, and access privileges like executability and writability.
Call gates were designed for transferring control between x86 privilege levels, although this mechanism is not used on most modern operating systems.
64-bit versions of Windows forbid hooking of the GDT; attempting to do so will cause the machine to bug check.
On x86 processors not having paging features, like the Intel 80286, the LDT is essential to implementing separate address spaces for multiple processes.
The operating system will switch the current LDT when scheduling a new process, using the LLDT machine instruction or when using a TSS.
On the contrary, the GDT is generally not switched (although this may happen if virtual machine monitors like VMware are running on the computer).
The lack of symmetry between both tables is underlined by the fact that the current LDT can be automatically switched on certain events, notably if TSS-based multitasking is used, while this is not possible for the GDT.
LDT (and GDT) entries which point to identical memory areas are called aliases.
However, because entire segments need to be operated on as a unit, it is necessary to limit their size in order to ensure that swapping can happen in a timely fashion.
It is also necessary to make sure that objects allocated in the 32-bit environment do not cross 64 KiB boundaries; this generates some address space waste.