https://zhuanlan.zhihu.com/p/586121191?utm_id=0
https://zhuanlan.zhihu.com/p/157741043
软中断是软件实现的中断,也就是程序运行时其余程序对它的中断;而硬中断是硬件实现的中断,是程序运行时设备对它的中断
硬中断可以直接中断CPU。它会引起内核中相关的代码被触发。对于那些需要花费一些时间去处理的进程,中断代码本身也可以被其他的硬中断中断。
当设备上有数据到达网卡的时候,会给CPU的相关引脚上触发一个电压变化,以通知CPU有数据到达了网卡,来处理数据,cpu会立即暂停手中的工作,来处理这些数据。
CPU简单处理下数据,会触发软中断(Linux各个协议栈函数处理数据),处理完后会把对应的数据放进对应的socket里面去,并且把已经挂起的对应的socket所在的进程激活
注:Linux在硬中断里只完成简单必要的工作,剩下的大部分的处理都是转交给软中断的
硬中断处理过程真的是非常短。只是记录了一个寄存器,修改了一下下CPU的poll_list,然后发出个软中断。就这么简单,硬中断工作就算是完成了。