处理器如何处理非编程中断?

时间:2016-06-20 15:57:00

标签: x86 interrupt cpu-architecture interrupt-handling

当x86处理器在特权级别3中执行一系列指令时,如何在中间插入不在指令序列中的特权级别0中断?

处理非编程中断的步骤是什么?例如,用户程序中除以0将导致除法错误;执行分裂后会发生什么?如何调用中断?特权级别是否仍然被检查?

我尝试使用gdb来解决这个问题。

除以0指令后,

  1. cs:eip根据IDT[0]进行了更改。 cs有权限0。
  2. ss:esp根据当前的TSS进行了更改。
  3. 用户cs:eipss:esp都保存在TSS指定的堆栈中。
  4. 但是,在故意调用int 0之后,会生成一般性保护错误。同样,根据cs:eip和当前TSS更改ss:espIDT[13],并保存用户。

    因此,为什么在用户程序中除以0指令(例如C中的1 / 0)能够通过IDT[0]引起中断,但故意调用int 0用户程序将通过IDT[13]导致中断。

0 个答案:

没有答案