undefined

中断

从物理学的角度看,中断是一种电信号,由硬件设备生成,并直接送入中断控制器的输入引脚上。然后再由中断控制器向处理器发送相应的信号。处理器一经检测到此信号,便中断自己的当前工作转而处理中断。此后,处理器会通知操作系统已经产生中断,这样,操作系统就可以对这个中断进行适当的处理了。

不同的设备对应的中断不同,而每个中断都通过一个唯一的数字标识。因此,来自键盘的中断就有别于来自硬盘的中断,从而使得操作系统能够对中断进行区分,并知道哪个硬件设备产生了哪个中断。这样,操作系统才能给不同的中断提供不同的中断处理程序。

一、硬中断

由与系统相连的外设(比如网卡、硬盘、键盘)自动产生的。主要是用来通知操作系统外设状态发生了变化。比如,当网卡收到数据包的时候,就会发出一个中断。我们通常所说的中断指的是硬中断(hardirq)

二、软中断

为了满足实时系统的需求,中断处理应该越快越好。linux 为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,将那些比较耗时的工作放到中断之后来完成,也就是软中断(softirq)来完成

三、软硬中断的区别

  • 硬中断是由外设引发的,软中断是执行中断指令产生的
  • 硬中断的中断号是由中断控制器提供的,软中断的中断号是由指令直接指出,无需使用中断控制器。
  • 硬中断是可屏蔽的,软中断不可屏蔽。
  • Linux 下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同 CPU 上并行执行。
  • 硬中断处理程序要确保它能快速地完成任务,这样程序执行时间才不会等待较长时间,称为上半部。软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部

四、上半部和下半部

上半部:硬件中断对应的中断处理程序。

在理想情况下,最好是中断处理程序将所有工作都交给下半部分执行,因为我们希望在中断处理程序中完成的工作越少越好(也就是越快越好)。我们希望中断处理程序能够尽可能快地返回。但是中断处理程序注定要完成一部分工作。例如,中断处理程序几乎都需要通过操作硬件对中断的到达进行确认。有时它还会从硬件拷贝数据。因为这些工作对时间非常敏感,所以只能靠中断处理程序自己去完成

下半部:用于指代中断处理流程中推后执行的那一部分