1

以下Wikibooks 页面指出:

GDT 包含指向每个 LDT 的指针。

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

4

2 回答 2

3

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

于 2018-09-05T08:00:31.203 回答
3

虽然lgdt用于设置 GDT 的指令采用 am16&32/64作为操作数,但该lldt指令采用r/m16操作数。

解读行话,这意味着lgdt需要一个指向保存GDT大小和基地址的结构的指针。另一方面,lldt使用一个段选择器——这个段选择器必须将TI(表指示符)字段设置为 0 以指向GDT.
长话短说,在 GDTLDT中没有设置基地址和大小,GDT而是使用段描述符 - 所以它取决于GDT.

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

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


对于给定的硬件线程和给定的时间点,只能有一个LDT和一个GDT活动的。但是,操作系统可以根据自己的策略(例如,针对特定进程)
更改活动的LDT或(罕见的)稍后。GDT

但是,操作系统很少GDT完全改变它,通常它会用它需要的所有段描述符预填充它 - 包括所有必要LDT的 s。
在任何情况下,GDT可以保存多个LDT段描述符——但在任何给定时间,每个硬件线程只有一个处于活动状态。

于 2018-09-05T08:09:34.793 回答