以下维基教科书页面指出:
GDT 包含指向每个 LDT 的指针。
我目前正在学习细分,这意味着有多个 LDT。据我所知,只有一个:我读过的多个参考文献都提到了"LDT",这意味着只有一个。引用的页面的含义是否正确?它的意思是"LDT条目"吗?
lgdt
指令(用于设置 GDT(将m16&32/64
作为操作数,而lldt
指令采用r/m16
操作数。
破译行话,这意味着lgdt
会获取指向保存GDT
大小和基址的结构的指针。 另一方面,lldt
采用区段选择器 - 此区段选择器必须将TI
(表指示器(字段设置为 0 以指向GDT
。
长话短说,LDT
不是像GDT
那样使用基址和大小设置的,而是在 GDT 中使用段描述符 - 因此这取决于GDT
。
由提供给lldt
的段选择器选择的段的类型必须为LDT(十进制值 2(。
如果上述任何条件失败,则会引发 #GP。
对于给定的硬件线程和给定的时间点,只能有一个LDT
和一个GDT
处于活动状态。
但是,操作系统可以根据自己的策略(例如,针对特定进程(更改活动LDT
或GDT
(很少(。
但是,操作系统很少完全更改GDT
,通常它会用所需的所有段描述符(包括所有必要的LDT
(预先填充它。
在任何情况下,GDT
都可以容纳多个段描述符LDT
但每个硬件线程在任何给定时间只有一个处于活动状态。
LDTR 一次包含一个活动 LDT 的地址。GDT 可以包含多个 LDT 的条目,这些条目根据需要一次加载一个到 LDTR 中。