LDT和GDT在intel x86中的使用方式有何不同?

时间:2015-12-12 18:31:06

标签: x86 gdt

据我所知,两个表都包含段描述符,它们为每个段提供访问详细信息,包括基址,类型,长度,访问权限等。

查看此blog描述的差异如下:
1. GDT在系统中只有一个副本,而LDT可以有多个副本 2.执行期间GDT可能不会改变,当任务切换时LDT经常会改变 3.输入LDT保存在GDT中。 GDT和LDT中的条目具有相同的结构。

系统如何在实际程序中以不同方式使用这些结构?

1 个答案:

答案 0 :(得分:3)

GDT用于存储包含管理程序代码的内存块,例如中断/异常处理程序,以及内核本身使用的块,因此它们是系统范围的。

OTOH,多任务操作系统必须在内存中存储构成特定任务的内存块所在的位置。为此,每个任务可以使用单独的LDT。切换过程涉及将不同的LDT加载到LDTR寄存器中。

每个任务都可以看到其描述符的内存块,在当前LDT中引用,或者在GDT中引用。对于用户模式内存访问,它将使用本地描述符。对于系统调用,它可以使用各种技术,例如INT指令。该指令有效地跳转到驻留在GDT描述符中的代码。我不记得调用门是否特定于GDT,或者它们也可以在LDT中使用。