youyichannel

志于道,据于德,依于仁,游于艺!

0%

中断?

什么是中断?

中断是系统用来响应硬件设备请求的一种机制,操作系统收到硬件的中断请求,会打断正在执行的进程,然后调用内核中的中断处理程序来响应请求。

中断是一种异步的事件处理机制,可以提高系统的并发处理能力、

操作系统收到了中断请求,会打断其他进程的运行,所以中断请求的响应程序需要尽可能快的执行完,这样可以减少对正常进程运行调度地影响。中断处理程序在响应中断时,可能会临时关闭中断,这就意味着,如果当前中断处理程序没有执行完之前,系统中其他的中断请求都无法被响应,即中断可能会丢失,所以中断处理程序要短快

什么是软中断?

中断请求的处理程序需要短快,这样才能减少对正常进程运行调度地影响,而且中断处理程序可能会暂时关闭中断,这是就有可能会丢失部分的中断请求。Linux 操作系统为了解决中断处理程序执行过长和中断丢失的问题,将中断过程分成了两个阶段,上半部分和下半部分

  • 上半部分用来快速处理中断,通常会暂时关闭中断请求,主要负责处理跟硬件紧密相关或者时间敏感的事情;
  • 下半部分用来延迟处理上半部分未完成的工作,一般以内核线程的方式运行。

【🌰常见网卡接受网络包的栗子】

网卡收到网络包后,通过 DMA 的方式将接收到的数据写入内存,接着会通过硬件中断通知内核有新的数据到达,于是内核就会调用对应的中断处理程序来处理该事件,这个事件的处理也是会分为上半部分和下半部分的。

上半部分做的事情很少:先禁止网卡中断,避免频繁硬中断而降低内核的工作效率,内核触发一个软中断,把一些处理比较耗时且复杂的事情交给「软中断处理程序」去做(下半部分);

中断的下半部分:主要是需要从内存中找到网络数据,再按照网络协议栈对网络数据进行解析和处理,最后把数据送给应用程序。

=> 中断处理程序的上半部分和下半部分:

  • 上半部分直接处理硬件请求(硬中断),主要是负责耗时短的工作,特点是快速执行;
  • 下半部分是由内核触发(软中断),主要是负责上半部分未完成的工作,通常都是耗时较长的事情,特点是延迟执行。

除此之外,硬中断会打断 CPU 正在执行的任务,然后立即执行中断处理程序;软中断是以内核线程的方式执行的,并且每一个 CPU 都对应一个软中断内核线程(ksoftirqd/cpu-no),比如 ksoftirqd/0

软中断不止包括硬件设备中断处理程序的下半部分,一些内核自定义事件也属于软中断,比如内核调度等、RCU 锁等。