中断-学习总结


中断(硬中断),即使电信号,由硬件设备产生,直接送到中断控制器的输入引脚,中断控制器是个简单的电子芯片其作用是将多路中断管线,采用复用技术只通过一个和处理器相连的管线与处理器通讯,当收到中断后,中断控制器会给处理器发送一个电信号,处理器检测到次电信号后便中断自己的工作,转而处理中断,此后处理器会通知操作系统已经产生中断,这样操作系统就会处理这个中断了。


不同设备对应的中断不同,而每个中断都通过一个唯一的数字标识(IRQ),这样操作系统才能给不同的中断提供其对应的中断处理程序(ISR)。


一个设备的中断处理程序是它的驱动程序的一部分,设备驱动程序是对设备进行管理的内核代码。


中断处理程序与其他内核函数的区别在于:中断处理程序是被内核调用来响应中断的,而他们运行于我们称之为中断上下文的特殊上下文中。在中断上下文中执行的代码不可阻塞。中断是随时产生的,因此中断处理程序要随时可以执行,所以必须保证中断处理程序快速执行。

又想中断处理程序运行的快,又想中断处理程序完成的工作多,显然是有矛盾的。这两个目的存在此消彼长的关系,我们一般把中断处理分为两部分。中断处理程序是上半部分,收到一个中断后,就开始立即执行,但只做有严格时间限制的工作。能够被允许稍后完成的工作推迟到下半部分去完成,在合适的时间,下半部分会被执行。


内核为处理中断而提供了中断处理程序机制,但是由于本身的一些局限,它只能完成整个中断处理流程的上半部分,这些局限包括:

         1 中断处理程序以异步方式执行,并且可能会打断其他代码,因此中断处理程序要快速执行完毕

         2 如果一个中断处理程序正在执行,最好的情况是与该中断同级的其他中断被屏蔽,最坏的情况是,当前处理器上的所有中断都会被屏蔽。

         3 由于中断处理程序需要对硬件进行操作,所以他们通常有严格的时限要求

         4 中断处理程序不能被阻塞


当执行一个中断处理程序时,内核处于中断上下文中,中断上下文和进程上下文的关系?进程上下文是一直内核所处的操作模式,此时内核代表进程执行,进程是以进程上下文的形式连接到内核的,因此进程上下文可以睡眠,也可以调度程序。发现中断上下文与进程上下文没什么关系。中断上下文有较严格的时间限制,因为它打断了其他程序的执行,所以中断上下文的代码应该迅速执行。

一个软中断不会抢占另一个软中断,唯一可以抢占软中断的是中断处理程序,不过其他的软中断可以在其他处理器上运行。

linux中的中断处理程序是无须重入的,因为一个中断号对应一个中断处理程序,而一个中断处理程序正在执行时,相应的中断线在所有处理器上是会被屏蔽掉。但其他中断是打开的,所以这些不同中断线的其他的中断都能被处理。

但系统调用(软中断)必须是可重入的,因为同一个系统调用可能同时被多个进程调用使用。


共享中断线

多个硬件设备共享一个中断线(实际上也不能每个设备都有单独的中断线--中断控制器的复用技术),要求:

 1.request_irq() 参数flags设置shared模式

 2.不同的中断处理程序(一个中断线对应多个ISR),dev参数必须唯一,能标识对应的硬件设备

 3.中断处理程序需要能够区分它对应的设备是否产生中断,即当前中断线信号到来,该程序必须能判断是否由自己负责的设备发来的信号请求。

内核收到一个中断后,会依次调用该中断线上注册的每个处理程序,如果与处理程序相关的设备并没有产生中断,则立即退出。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zcqiang_zh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值