关于中断、异常、信号之间的区别

发布时间 2023-05-30 23:50:59作者: 大黑耗

参考:

https://zhuanlan.zhihu.com/p/336775510

https://www.cnblogs.com/charlesblc/p/6277810.html

 

异常又称为同步信号、同步中断、软件中断,是由当前正在占用CPU的线程引发的一种信号,CPU无法屏蔽,必须先去执行处理程序
异常处理流程:

  1. 异常发生,控制单元产生一个对应的类型码
  2. CPU 根据这个类型码从中断向量表(idt, interrupt description table) 找到异常处理处理程序入口
  3. 保存当前程序现场,切换到对应异常处理程序
  4. 异常处理程序最后向进程发送一个信号 SIGXXX(这个异常一般就是由这个正在执行的进程导致的,它必须被停下来让CPU去处理异常,这也是异常被称为同步信号的原因),记录在进程的 PCB 里
  5. 如果进程自定义了该信号的处理程序,跳去执行它;否则执行内核预定义的行为

 

中断又被称为异步信号、异步中断、硬件中断
中断处理流程:

  1. 设备产生中断,PIC(可编程中断控制器)产生一个对应的类型码
  2. CPU 根据这个类型码从中断向量表(idt, interrupt description table) 找到异常处理处理程序入口
  3. 保存当前程序现场,切换到对应异常处理程序
  4. 中断处理程序进行保存现场,做相关处理,恢复现场(注意不会像异常那样给之前正在执行的用户进程发一个SIGXXX信号,因为它并不是之前进程引起的)
  5. 内核调度,返回用户进程

 

根据我自己的理解临时画了个草图,可能不正确: