中断处理过程及保护
1、 中断处理过程
- 处理器根据中断向量号定位中断门描述符。中断向量号是中断描述符的索引,当处理器收到一个外部中断向量号后,它用此向量号在中断描述符表中查询对应的中断描述符,然后再去执行该中断描述符中的中断处理程序。由于中断描述符是8个字节,所以处理器用中断向量号乘以8后,再与IDTR中的中断描述符表地址相加,所求的地址之和便是该中断向量号对应的中断描述符。
- 处理器进行特权级检查。(此处不展开)
- 执行中断处理程序。特权级检查通过后,将门描述符目标代码段选择子加载到代码段寄存器CS中,把门描述符中中断处理程序的偏移地址加载到EIP,开始执行中断处理程序 。
以上过程如图7-7所示。
注意,如果中断有错误码,处理器并不会主动跳过它的位置,咱们必须手动将其跳过,也就是说,在准备用iret指令返回时,当前栈指针esp必须指向栈中备份的EIP_old所在的位置,这样处理器才能将栈中的数据对号入座,弹出到各自对应的寄存器中。