首页 > 编程知识 正文

硬中断与软中断,软中断和内部中断的区别

时间:2023-05-06 12:09:15 阅读:276147 作者:2696

中断从外设到内核的DataPath

概念

从物理学的角度看,中断是一种电信号,由硬件设备生成,并直接送入中断控制器的输入引脚上。

然后再由中断控制器向处理器发送相应的信号。处理器一经检测到此信号,便中断自己的当前工作转而处理中断。

此后,处理器会通知操作系统已经产生中断,这样,操作系统就可以对这个中断进行适当的处理了。

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

硬中断

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

软中断

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

中断向量表

中断号中断处理函数地址的对应表。

int 是软中断指令,int n 触发软中断 n。相应的中断处理函数的地址为:中断向量表地址 + 4 * n。

硬中断和软中断的区别

硬中断是由外设引发的,软中断是执行中断指令产生的。

硬中断的中断号是由中断控制器提供的,软中断的中断号是由指令直接指出,无需使用中断控制器。

硬中断是可屏蔽的,软中断不可屏蔽。

硬中断处理程序要确保它能快速地完成任务,这样程序执行时间才不会等待较长时间,称为上半部

软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部

上半部

硬件中断对应的中断处理程序,就是上半部(top half)。

在理想的情况下,最好是中断处理程序将所有工作都交给下半部分执行,因为我们希望在中断处理程序中完成的工作越少越好(也就是越快越好)。我们希望中断处理程序能够尽可能快地返回。

但是中断处理程序注定要完成一部分工作。例如,中断处理程序几乎都需要通过操作硬件对中断的到达进行确认。有时它还会从硬件拷贝数据。因为这些工作对时间非常敏感,所以只能靠中断处理程序自己去完成。

下半部

剩下的几乎所有其它工作都是下半部执行的目标。

下半部(BH,bottom half)是一个操作系统通用词汇,用于指代中断处理流程中推后执行的那一部分,之所以这样命名是因为它表示中断处理方案一半的第二部分或者下半部。

一些人错误地把所有的下半部机制都叫做“软中断”,真是在自寻烦恼。

当前,有三种机制可以用来实现将工作推后执行:软中断、tasklet 和工作队列。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。