是否有多个 LDT?
Are there multiple LDTs?
以下 Wikibooks page 状态:
The GDT contains pointers to each LDT.
我目前正在学习分段,这意味着有多个 LDT。据我所知只有一个:我读过的多个参考文献都提到 "the LDT",这意味着只有一个。引用页面的含义是否正确?是不是说"LDT entry"?
LDTR一次包含一个活动LDT的地址。 GDT 可以包含多个 LDT 的条目,根据需要一次一个地加载到 LDTR。
而 lgdt
instruction - used to set up the GDT - takes a m16&32/64
as an operand - the lldt
指令采用 r/m16
操作数。
解读行话,这意味着 lgdt
接受一个指向包含 GDT
大小和基地址的结构的指针。
另一方面,lldt
采用 段选择器 - 此段选择器必须将 TI
(Table 指示符)字段设置为 0 到 点进GDT
.
长话短说 LDT
没有像 GDT
那样设置基地址和大小,而是在 GDT 中设置段描述符 - 所以它取决于 GDT
。
给lldt
的段选择器选择的段类型必须是LDT类型(十进制值2)。
如果上述任何条件失败,则会引发#GP。
对于给定的硬件线程和给定的时间点,只能有一个 LDT
和一个 GDT
活动。
但是,OS 可以稍后更改活动的 LDT
或 GDT
(罕见)- 基于其自己的策略(例如,针对特定进程)。
然而,OS 很少完全更改 GDT
,通常它会预先填充它需要的所有段描述符 - 包括所有必要的 LDT
s。
在任何情况下,GDT
可以保存多个 LDT
段描述符 - 但在任何给定时间,每个硬件线程只有一个是活动的。
以下 Wikibooks page 状态:
The GDT contains pointers to each LDT.
我目前正在学习分段,这意味着有多个 LDT。据我所知只有一个:我读过的多个参考文献都提到 "the LDT",这意味着只有一个。引用页面的含义是否正确?是不是说"LDT entry"?
LDTR一次包含一个活动LDT的地址。 GDT 可以包含多个 LDT 的条目,根据需要一次一个地加载到 LDTR。
而 lgdt
instruction - used to set up the GDT - takes a m16&32/64
as an operand - the lldt
指令采用 r/m16
操作数。
解读行话,这意味着 lgdt
接受一个指向包含 GDT
大小和基地址的结构的指针。
另一方面,lldt
采用 段选择器 - 此段选择器必须将 TI
(Table 指示符)字段设置为 0 到 点进GDT
.
长话短说 LDT
没有像 GDT
那样设置基地址和大小,而是在 GDT 中设置段描述符 - 所以它取决于 GDT
。
给lldt
的段选择器选择的段类型必须是LDT类型(十进制值2)。
如果上述任何条件失败,则会引发#GP。
对于给定的硬件线程和给定的时间点,只能有一个 LDT
和一个 GDT
活动。
但是,OS 可以稍后更改活动的 LDT
或 GDT
(罕见)- 基于其自己的策略(例如,针对特定进程)。
然而,OS 很少完全更改 GDT
,通常它会预先填充它需要的所有段描述符 - 包括所有必要的 LDT
s。
在任何情况下,GDT
可以保存多个 LDT
段描述符 - 但在任何给定时间,每个硬件线程只有一个是活动的。