Content #
尽管局部描述符表(LDT)和全局描述符表(GDT)都用来存放各种描述符,比如段描述符,但这掩盖不了它们也是内存段的事实。简单地说,它们也是段。但是,因为它们用于系统管理,故称为系统的段或系统段。
全局描述符表(GDT)是唯一的,整个系统中只有一个,所以只需要用GDTR 寄存器存放其线性基地址和段界限即可;但LDT 不同,每个任务一个,所以,为了追踪它们,处理器要求在GDT 中安装每个LDT 的描述符。当要使用这些LDT 时,可以用它们的选择子来访问GDT,将LDT 描述符加载到LDTR 寄存器。在一些人看来,这个理由很牵强,这么做也很别扭。但是,如果不这样,处理器将没有机会来做存储器和特权级的保护工作。
如图所示,这是LDT 描述符的格式。
LDT 本身也是一种特殊的段,最大尺寸是64KB。段基地址指示LDT 在内存中的起始地址,段界限指示LDT 的范围;描述符的G 位是粒度位,适用于LDT 描述符,以表示LDT 的界限值是以字节为单位,还是以4KB 为单位。即使是以4KB 为单位,它也不能超过64KB 的大小。 D 位(或者叫B 位)和L 位对LDT 描述符来说没有意义,固定为0。 AVL 和P 位的含义和存储器的段描述符相同。 LDT 描述符中的S 位固定为0,表示系统的段描述符或者门描述符,以相对于存储器的段描述符(S=1),因为LDT 描述符属于系统的段描述符。
在描述符为系统的段描述符时,即,在S=0 的前提下,TYPE 字段为0010(二进制)表明这是一个LDT 描述符。因此,传送到ECX 寄存器的属性值0x00408200 表示这是一个LDT 描述符,描述符特权级DPL 为0,其他无关的位都已清零。