Descriptor-register
📄 返回目录页
描述符是一种数据结构,而描述符表是将许多个描述符排列在一起,形成一张表。描述符寄存器也就是指向这个表的寄存器。
gdtr:全局描述符表寄存器,cpu现在使用的是段加分页结合的内存管理方式,而这些分段存储在全局描述符表(GDT)的表格中,gdtr就指向它。这里的表每个项都描述一个内存段的信息。
ldtr:局部描述符表寄存器,指向的是一个段描述符表(LDT)。
不同的是,GDT是全局唯一,LDT是局部使用的,可以创建多个,随着任务段切换而切换
GDT和LDT中的表项,就是段描述符,描述了一个内存分段的信息,其结构如下:

一个表项占据8个字节(32位CPU),里面存储了一个内存分段的诸多信息:基地址、大小、权限、类型等信息。
idtr: 中断描述符表寄存器,指向了中断描述符表IDT,这个表的每一项都是一个中断处理描述符,当CPU执行过程中发生了硬中断、异常、软中断时Debug-register,将自动从这个表中定位对应的表项,里面记录了发生中断、异常时该去哪里执行处理函数。

IDT中的表项称为Gate,中文意思为门,因为这是应用程序进入内核的主要入口。虽然表的名字叫中断描述符表,但表中存储的不全是中断描述符,IDT中的表项存在三种类型,对应三种类型的门:
-
任务门
-
陷阱门
-
中断门

三种描述符中都存储了处理这个中断/异常/任务时该去哪里处理的地址。三种门用途不一,其中中断门是真正意义上的中断,而像前面提到的调试指令int 3以及老式的系统调用指令int 2e/int 80都属于陷阱门。任务门则用的较少