GDT,即全局描述符表。[span]在英特尔x86[span]系列处理器的80286[span]起,为了定义的特点使用不同的存储区,在程序执行期间,包括基地址,大小和访问权限,如可执行可写。这些内存区域被称为段(英特尔的术语)。内存中段所在的位置不需要写入特殊标记,段的信息(基地址、界限、属性等)保存通过段描述符表进行。GDT正是最重要的描述符表,进入保护模式,至少要准备GDT。
GDT主要存放操作系统和各任务公用的描述符,如公用的数据和代码段描述符、各任务的TSS描述符和LDT描述符。每8个字节的条目在GDT是一个描述符。
除段描述符以外,GDT还可容纳其他东西,这些可以是:
1.任务状态段(TSS)的描述符
2.局部描述符表(LDT)描述符
3.[span]最后一个,调用门,是特别重要的,虽然大多数现代操作系统上不使用[span]x86这种[span]权限级别之间的控制转移[span]机制(主要是为了保持可移植性)[span]。
GDT与LDT:LDT即局部描述符表。LDT应该包含一个特定的程序的私有内存段的描述符,而GDT主要存放操作系统和各任务公用的描述符,处理器包含自动切换到特定任务的LDT的功能,但绝不自动切换GDT。
每个访问内存的程序总是通过一个段执行。在386上的处理器和更高版本,因为32位段中的偏移量和限制,可以使段的范围包括在整个可寻址存储器,处理对是用户程序透明的,这使得编写应用程序的程序员无需关心。
程序必须使用段选择子访问一个段。一般必须将一个要使用的段的段选择子加载到段寄存器中。在绝大多数汇编语言中,如果未指令指明所使用的段寄存器就会默认为ds。
当选择子被加载到段寄存器中时会自动读取段描述符表中的描述符,不会被之后对描述符所在内存地址的读写操作影响,除非重新加载。