1

除了构成程序或过程的执行环境的代码、数据和堆栈段之外,该体系结构还定义了两个系统段:任务状态段 (TSS) 和 LDT。

GDT 不被视为一个段,因为它不是通过段选择器和段描述符访问的。TSS 和 LDT 具有为它们定义的段描述符。

-- Intel 64 和 IA32 架构软件手册 3A,2.1.2

我对为什么不将 GDT 视为一个部分感到困惑。

谁能给个详细的解释?

4

1 回答 1

4

GDT 作为查找所有内容的第一个点,不能通过选择器访问,因为这会给您带来先有鸡还是先有蛋的情况。

GDT 本身具有各种 TSS 和 LDT 内存块的描述符,因此它们视为段,可通过段选择器访问。此外,各个 LDT 具有其他内存区域的选择器,因此这些区域也是段。

但是您只需要问自己,当 GDT 是选择过程的第一个入口点时,您会在哪个表中查找描述符以定位 GDT?

实际上,当您加载 GDT 的地址(使用LGDT指令)时,它是您使用的线性地址,而不是选择器。来自 x86 开发人员指南:

LGDT 和 LIDT 指令仅用于操作系统软件;它们不在应用程序中使用。它们是唯一直接加载线性地址(即,不是段相对地址)和保护模式下的限制的指令。它们通常在实地址模式下执行,以允许处理器在切换到保护模式之前进行初始化。

这就是为什么他们说 GDT 不被视为一个细分市场。

于 2012-11-11T03:44:25.723 回答