5

我知道这两个表都包含段描述符,这些描述符提供了每个段的访问详细信息,包括基地址、类型、长度、访问权限等。

看这篇博客描述的区别如下:
1. GDT 在系统中只有一个副本,而 LDT 可以有很多
2. GDT 在执行过程中可能不会更改,LDT 经常在任务切换时更改
3. LDT 的条目保存在 GDT 中。GDT 和 LDT 中的条目具有相同的结构。

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

4

1 回答 1

6

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

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

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

于 2015-12-12T22:44:04.120 回答