参考:
https://zhuanlan.zhihu.com/p/336775510
https://www.cnblogs.com/charlesblc/p/6277810.html
异常又称为同步信号、同步中断、软件中断,是由当前正在占用CPU的线程引发的一种信号,CPU无法屏蔽,必须先去执行处理程序
异常处理流程:
- 异常发生,控制单元产生一个对应的类型码
- CPU 根据这个类型码从中断向量表(idt, interrupt description table) 找到异常处理处理程序入口
- 保存当前程序现场,切换到对应异常处理程序
- 异常处理程序最后向进程发送一个信号 SIGXXX(这个异常一般就是由这个正在执行的进程导致的,它必须被停下来让CPU去处理异常,这也是异常被称为同步信号的原因),记录在进程的 PCB 里
- 如果进程自定义了该信号的处理程序,跳去执行它;否则执行内核预定义的行为
中断又被称为异步信号、异步中断、硬件中断
中断处理流程:
- 设备产生中断,PIC(可编程中断控制器)产生一个对应的类型码
- CPU 根据这个类型码从中断向量表(idt, interrupt description table) 找到异常处理处理程序入口
- 保存当前程序现场,切换到对应异常处理程序
- 中断处理程序进行保存现场,做相关处理,恢复现场(注意不会像异常那样给之前正在执行的用户进程发一个SIGXXX信号,因为它并不是之前进程引起的)
- 内核调度,返回用户进程
根据我自己的理解临时画了个草图,可能不正确:
