【程序员必备小知识-性能技巧16】趣谈软中断

272 阅读2分钟

引言

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

今天我们来聊聊软中断,中断大家都不陌生,就是打断正在执行的进程,然后执行中断程序,那为啥要有中断呢?因为我们的硬件太多了,比如键盘,你不可能输入一个字,屏幕上要响应半天,我敲击哪个屏幕必须马上做出回应,不然还有人用电脑打字?那中断到底是什么呢?

中断

image.png

行吧,不用看百度百科的话,中断就是一种异步的事件处理机制,可以提高系统的并发处理能力,那你打断我当前的进程,那你就必须快速的执行,不然就会对进程的正常调度产生影响,而且当前中断如果执行的慢了,还会产生丢失中断的影响。

软中断

我们的Linux把中断分为两部分:上半部和下半部

  • 上半部用来快速处理中断,它在中断禁止模式下运行,主要处理跟硬件紧密相关的或时间敏感的工作。
  • 下半部用来延迟处理上半部未完成的工作,通常以内核线程的方式运行。

我们以网卡为例,网卡收到数据包之后呢,采用硬中断的方式告诉内核有新数据进来了,内核调用快速中断程序给予响应:上半部直接把数据搞到内存里,并告诉网卡数据完了,更改一下它的寄存器状态,然后就发个软中断信号给下半部,你得把这个数据按照网络协议给我解析和处理好了,送给对应的应用程序。

简单的可以这么说:

  • 上半部直接处理硬件请求,也就是我们常说的硬中断,特点是快速执行;
  • 而下半部则是由内核触发,也就是我们常说的软中断,特点是延迟执行