以下Wikibooks page说:
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
s。
在任何情况下,GDT
都可以包含多个LDT
段描述符 - 但每个硬件线程在任何给定时间只有一个是活动的。
LDTR一次包含单个活动LDT的地址。 GDT可以包含多个LDT的条目,根据需要一次一个地加载到LDTR中。