以下Wikibooks 页面指出:
GDT 包含指向每个 LDT 的指针。
我目前正在学习分段,这意味着有多个 LDT。据我所知,只有一个:我读过的多个参考文献都提到了“LDT”,暗示只有一个。引用页面的含义是否正确?这是否意味着“LDT条目”?
LDTR 一次包含单个活动 LDT 的地址。GDT 可以包含多个 LDT 的条目,这些条目根据需要一次加载到 LDTR 中。
虽然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
段描述符——但在任何给定时间,每个硬件线程只有一个处于活动状态。