所有栏目

中断代码怎么处理

已输入 0 字
优质回答
  • 硬件处理 我们在每条指令完成的时候,控制单元就会检查是否发生了中断。若不发生:继续执行下...

    确定中断的向量i。

    读IDT中的第i项得到向量i的中断描述符。

    2.

    异常处理

    保存寄存器的值

    高级C函数处理异常

    3..中断描述符结合GDT得到得到中断处理程序的段描述符。

    4.进程的CPL与段描述符的DPL比较,若CPL优先级比DPL的优先级高,说明中断的优先级比进程优先级低,产生异常。进程的CPL与中断描述符的DPL比较,若CPL优先级

    比DPL的优先级低,说明这个门不是用户进程可以访问的,也产生异常,正常则执行下面步骤。

    5.检查CPL是否发生变化(这个其实就是是否是从用户态进入内核态),如果变化,则要切换栈。这个很容易弄清,因为,用户态和内核态用的栈是不一样的。

    6.如果发生的是故障,故障要重新执行导致异常的那条指令。所以用那条指令的地址装载cs和eip来执行那条指令。

    7.将eflags、cs、和eip的值圧栈。

    8.如果异常产生硬件出错码,则也圧栈。

    9.用刚才得到的段描述符中的基址和中段描述符中的偏移地址装载cs和eip。这个就可以开始执行相应的处理程序了。

    2023-10-24 15:29:09
最新问题 全部问题