我知道两个表都包含段描述符,这些段描述符提供了每个段的访问详细信息,包括基地址,类型,长度,访问权限...等。
查看此blog描述了以下差异:
1. GDT在系统中只有一个副本,而LDT可以有许多副本
2.执行期间GDT可能不会更改,而任务切换时LDT通常会更改
3. LDT的输入保存在GDT中。 GDT和LDT中的条目具有相同的结构。
系统在实际程序中如何不同地使用这些结构?
最佳答案
GDT用于存储包含主管代码的内存块,例如中断/异常处理程序,以及内核本身使用的块,因此它们是系统范围的。
OTOH,多任务OS必须在其中将包含特定任务的内存块存储在内存中。为此,每个任务可以使用单独的LDT。切换过程涉及将不同的LDT加载到LDTR寄存器中。
每个任务都可以查看在当前LDT或GDT中引用了其描述符的内存块。对于用户模式的内存访问,它将使用本地描述符。对于系统调用,它可以使用各种技术,例如INT指令。该指令有效地从GDT跳转到驻留在描述符中的代码。我不记得调用门是特定于GDT还是也可以在LDT中使用。