引言
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
今天我们来聊聊软中断,中断大家都不陌生,就是打断正在执行的进程,然后执行中断程序,那为啥要有中断呢?因为我们的硬件太多了,比如键盘,你不可能输入一个字,屏幕上要响应半天,我敲击哪个屏幕必须马上做出回应,不然还有人用电脑打字?那中断到底是什么呢?
中断
行吧,不用看百度百科的话,中断就是一种异步的事件处理机制,可以提高系统的并发处理能力,那你打断我当前的进程,那你就必须快速的执行,不然就会对进程的正常调度产生影响,而且当前中断如果执行的慢了,还会产生丢失中断的影响。
软中断
我们的Linux把中断分为两部分:上半部和下半部:
- 上半部用来快速处理中断,它在中断禁止模式下运行,主要处理跟硬件紧密相关的或时间敏感的工作。
- 下半部用来延迟处理上半部未完成的工作,通常以内核线程的方式运行。
我们以网卡为例,网卡收到数据包之后呢,采用硬中断的方式告诉内核有新数据进来了,内核调用快速中断程序给予响应:上半部直接把数据搞到内存里,并告诉网卡数据读完了,更改一下它的寄存器状态,然后就发个软中断信号给下半部,你得把这个数据按照网络协议给我解析和处理好了,送给对应的应用程序。
简单的可以这么说:
- 上半部直接处理硬件请求,也就是我们常说的硬中断,特点是快速执行;
- 而下半部则是由内核触发,也就是我们常说的软中断,特点是延迟执行