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

Abu*_*nce 5 x86 gdt

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

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

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

mcl*_*fix 5

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

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

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