有多个LDT吗?

问题描述 投票:1回答:2

以下Wikibooks page说:

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

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

x86 x86-64 hardware intel gdt
2个回答
3
投票

虽然lgdt指令 - 用于设置GDT - 采用m16&32/64作为操作数 - lldt指令采用r/m16操作数。

解释行话这意味着lgdt指向一个持有GDT大小和基地址的结构。另一方面,lldt采用一个段选择器 - 这个段选择器必须将TI(表指示器)字段设置为0才能指向GDT。 长话短说LDT没有设置基地址和大小像GDT但在GDT中有一个段描述符 - 所以它取决于GDT

由给予lldt的段选择器选择的段的类型必须是LDT类型(十进制值2)。

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


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

然而,操作系统很少完全改变GDT,通常它会预先填充它需要的所有段描述符 - 包括所有必要的LDTs。 在任何情况下,GDT都可以包含多个LDT段描述符 - 但每个硬件线程在任何给定时间只有一个是活动的。


3
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.