中断和异常
中断的作用:“中断”是让操作系统内核夺回CPU使用权的唯一途径,中断会让CPU由用户态变为内核态,如果没有“中断”机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序,既如此,何来并发。
中断的类型:
- 内中断(也称异常),与当前执行的指令有关,中断信号来源于CPU内部,CPU在执行指令时会检查是否有异常发生
- 陷阱、陷入(trap):由陷入指令引发,是应用程序故意引发的,执行陷入指令,意味着应用程序主动的将CPU控制权还给操作系统内核,“系统调用”就是通过陷入指令完成的(注意陷入指令并不是特权指令)
- 故障(fault):由错误条件引起的,可能被内核程序修复。
- 终止(abort):由致命错误引起,内核程序无法修复该错误,因此一般不再将CPU使用权还给引发终止的应用程序(整数除0,非法使用特权指令)
- 外中断(也称中断):与当前执行的指令无关,中断信号来源于CPU外部,每一条指令执行结束时,CPU都会例行检查是否有外中断信号需要处理
- 时钟中断:由时钟部件发来的中断信号,时钟部件每隔一个时间片会给CPU发送一个时钟中断信号(多个应用程序的并发运行)
- I/O中断:由输入/输出设备发来的中断信号(打印机)
中断处理的过程:
- 保护现场:将当前执行程序的相关数据保存在寄存器中,然后入栈。
- 开中断:以便执行中断时能响应较高级别的中断请求。
- 中断处理
- 关中断:保证恢复现场时不被新中断打扰
- 恢复现场:从堆栈中按序取出程序数据,恢复中断前的执行状态。