是否有多个LDT?

时间:2018-09-04 18:39:05

标签: x86 x86-64 hardware intel gdt

以下Wikibooks page状态:

  

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

我目前正在学习分段,这意味着存在多个LDT。据我所知只有一个:我读过的多个引用都指向“ LDT”,这意味着只有一个。所引用页面的含义正确吗?这是“ LDT输入”的意思吗?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

用于建立GDT的lgdt指令采用m16&32/64作为操作数,而lldt指令采用r/m16操作数。

破译行话意味着lgdt会使用指向保存GDT大小和基地址的结构的指针。 另一方面,lldt使用一个段选择器-该段选择器必须将TI(表格指示器)字段设置为0,以指向{{ 1}}
长话短说,GDT的基础地址和大小不像LDT,而是在GDT中设置了段描述符-因此它取决于GDT

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

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


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

但是,操作系统很少会完全更改GDT,通常会用所需的所有段描述符(包括所有必要的GDT)预先填充它。
无论如何,LDT可以容纳多个GDT段描述符-但在每个给定的时间,每个硬件线程只有一个处于活动状态。