- 0 概述
- 1 legacy 保护模式下的Interrupt-gate 与 Trap-gate 描述符
- 2 IA-32e模式下的Interrupt-gate和Trap-gate描述符
- 3 Task-gate描述符
0 概述
在legacy保护模式下, IDT可存放下面的Gate Descriptor.
① Interrupt-gate descriptor(中断门描述符)
② Trap-gate descriptor(陷阱门描述符)
③ Task-gate descriptor(任务门描述符)
在IA-32e模式(long mode)下不存在Task-gate descriptor, 因此只存放:
① Interrupt-gate descriptor(中断门描述符)
② Trap-gate descriptor(陷阱门描述符)
在legacy保护模式下, 每个gate描述符是8字节宽; IA-32e模式下, 每个gate描述符被扩展到16字节宽.
通过中断门进入中断服务程序时cpu会自动将中断关闭,也就是将cpu中eflags寄存器中IF标志复位,防止嵌套中断的发生, 返回后恢复;而通过陷阱门进入服务程序时则维持IF标志不变。 这是中断门与陷阱门的唯一区别(!!!)
1 legacy 保护模式下的Interrupt-gate 与 Trap-gate 描述符
Interrupt-gate和Trap-gate描述符的格式是安全一样的, 所不同的是描述符类型.
在描述符的Type域中:
① 1110B为32位的Interrupt-gate描述符
② 1111B为32位的Trap-gate描述符
更详细见 10.5.4.4节内容
2 IA-32e模式下的Interrupt-gate和Trap-gate描述符
在IA-32e模式下(包括64位和compatibility模式), Interrupt-gate与trap-gate描述符的结构如下
除了被扩展为16字节外, 在IA-32e模式(包括compatibility模式)下的Interrupt-gate和Trap-gate描述符增加了一个3位宽的IST(Interrupt Stack Table)指针域, 用来提供额外的Stack pointer.
更详细见 10.5.4.4节内容
3 Task-gate描述符
Task-gate用来找到目标TSS描述符的位置, 再通过TSS描述符来定位TSS块, 使用TSS块里的数据进行任务切换
Task-gate描述符仅用于legacy模式, 更详细见 10.5.4.4 节内容