除了构成程序或过程执行环境的代码,数据和堆栈段之外,该体系结构还定义了两个系统段:任务状态段(TSS)和LDT。
GDT不被视为段,因为它不是通过段选择器和段描述符访问的。 TSS和LDT具有为它们定义的段描述符。
- 英特尔64和IA32架构软件手册3A,2.1.2
我对为什么 GDT不被视为细分市场感到困惑。
任何人都能详细解释一下吗?
答案 0 :(得分:4)
GDT是第一个查找所有内容的点,无法通过选择器访问,因为这会给你带来鸡蛋和鸡蛋的情况。
GDT本身具有各种TSS和LDT内存块的描述符,因此 被认为是段,可通过段选择器访问。此外,各个LDT具有其他存储区域的选择器,因此这些区域也是段。
但是,当GDT是选择过程的第一个进入点时,您只需要问自己在哪个表中查找描述符以找到GDT?
实际上,当您加载GDT的地址(使用LGDT
指令)时,它是您正在使用的线性地址而不是选择器。来自x86开发人员指南:
LGDT和LIDT指令仅用于操作系统软件;它们不用于应用程序。它们是直接加载线性地址(即不是段相对地址)和受保护模式下的限制的唯一指令。它们通常在实地址模式下执行,以便在切换到保护模式之前允许处理器初始化。
这就是他们说GDT不被视为细分市场的原因。