是否有多个 LDT?

Are there multiple LDTs?

以下 Wikibooks page 状态:

The GDT contains pointers to each LDT.

我目前正在学习分段,这意味着有多个 LDT。据我所知只有一个:我读过的多个参考文献都提到 "the LDT",这意味着只有一个。引用页面的含义是否正确?是不是说"LDT entry"?

LDTR一次包含一个活动LDT的地址。 GDT 可以包含多个 LDT 的条目,根据需要一次一个地加载到 LDTR。

lgdt instruction - used to set up the GDT - takes a m16&32/64 as an operand - the lldt 指令采用 r/m16 操作数。

解读行话,这意味着 lgdt 接受一个指向包含 GDT 大小和基地址的结构的指针。 另一方面,lldt 采用 段选择器 - 此段选择器必须将 TI (Table 指示符)字段设置为 0 到 点进GDT.
长话短说 LDT 没有像 GDT 那样设置基地址和大小,而是在 GDT 中设置段描述符 - 所以它取决于 GDT

lldt的段选择器选择的段类型必须是LDT类型(十进制值2)。

如果上述任何条件失败,则会引发#GP。


对于给定的硬件线程和给定的时间点,只能有一个 LDT 和一个 GDT 活动。
但是,OS 可以稍后更改活动的 LDTGDT(罕见)- 基于其自己的策略(例如,针对特定进程)。

然而,OS 很少完全更改 GDT,通常它会预先填充它需要的所有段描述符 - 包括所有必要的 LDTs。
在任何情况下,GDT 可以保存多个 LDT 段描述符 - 但在任何给定时间,每个硬件线程只有一个是活动的。