门,顾名思义,是通往某处的入口。在计算机中,用门来表示一段程序的入口。拿它和段描述符对比
一下就容易理解了,段描述符中描述的是一片内存区域,而门描述符中描述的是一段代码。
门描述符中的各属性位与段描述符中的属性意义相同,大伙可以参考全局描述符表部分的介绍。下面
简要说下这几种门描述符,这里咱们只讨论 32 位保护模式。
任务门
任务门和任务状态段TSS是 Intel 处理器在硬件一级提供的任务切换机制,所以任务门需要和 TSS 配合在一起使用,在任务门中记录的是 TSS 选择子,偏移量未使用。任务门可以存在于全局描述符表 GDT、局部描述符表 LDT、中断描述符表 IDT 中。描述符中任务门的 type 值为二进制 0101 ,顺便说一句大多数操作系统包括 Linux 都未用 TSS 实现任务切换,咱们这里也不讨论啦。
中断门
中断门包含了中断处理程序所在段的段选择子和段内偏移地址. 当通过此方式进入中断后, 标志寄存器eflags 中的IF位自动置0, 也就是在进入中断后, 自动把中断关闭,避免中断嵌套. Linux 就是利用中断门实现的系统调用, 就是那个著名的 int 0x80 . 中断门只允许存在于 IDT 中。描述符中中断门的 type为二进制 1110 .
陷阱门
陷阱门和中断门非常相似,区别是由陷阱门进入中断后,标志寄存器 eflags 中的 位不会自动置0. 陷阱门只允许存在于 IDT 中。描述符中陆阱门的 type 值为二进制 1111 .
调用门
调用门是提供给用户进程进入特权级的方式,其 DPL = 3 。调用门中记录例程的地址,它不能用int 指令调用,只能用 call jmp 指令。调用门可以安装在 GDT LDT 中。描述符中调用门的 type 值为二进制 1100 。
除调用门外,另外的任务门、中断门、陷阱门都可以存在于中断描述符表中
现代操作系统为了简化开发、提升性能和移植性等原因,很少用到调用门和任务门
注: 本节摘自操作系统真象还原7.4节