现在的位置: 首页 > 综合 > 正文

LINUX中断机制

2018年01月21日 ⁄ 综合 ⁄ 共 941字 ⁄ 字号 评论关闭

from : http://blog.csdn.net/mafuli007/article/details/7234113 

中断使得硬件得以发出通知给处理器,例如,当你敲击键盘的时候,键盘控制器会发送一个中断,通知操作系统有一个按键按下。中断的本质就是一种特殊的电信号,有硬件设备发向处理器。处理器接收到中断后,会马上向操作系统反映此信号的到来,然后由操作系统负责处理这个新来的数目。

异常与中断不同,它在产生时必须考虑与处理器时钟同步,因此也称为同步中断。例如处理执行到忧郁编程失误而导致的错误指令时,必须靠内核来处理的时候,处理器就会产生一个异常。

中断处理程序,在响应一个特定的中断的时候,内核会执行一个函数,该函数叫做中断处理程序或中断服务例程。

上半部(top half )和下半部(bottom half)的对比

       中断处理程序是上半部----接受到一个中断,就立即开始执行,但是做有严格时间限制的工作。能够被允许稍后完成的工作会推迟到下半部。例如,当网卡接受来自网络的数据时,需要通知内核数据包到了,网卡立即完成这件事,从而优化网络的吞吐量和传输周期。中断开始执行,通知硬件,拷贝最新的网络数据包到内存,然后读取网卡更多的数据包,内核需要快速的拷贝网络数据包到系统内存。当网络数据拷贝到系统内存以后,中断的任务算是完成了,这时将控制权交给系统被中断前的原先运行的程序。处理和操作数据包的其他工作在随后的下半部中进行。

中断注册方法

(1)request_irq():在给定的中断线上注册一个给定的中断处理程序

(2)free_irq():如果在给定的中断线上没有中断处理程序,则注销响应的处理程序,并禁用其中断线。

中断处理机制的实现

 中断从硬件到内核的路由图

 

下半部的工作

从分析可以,中断处理程序执行的越快愈好

下半部实现的机制主要有

(1)软中断

(2)tasklet

         它在本质上跟软中断很相似,行为也很相近,但是它的接口更简单,锁保护液要求低。

(3)工作队列(work queue)

        它将工作推后,交给一个内核线程去执行。如果推后执行的任务需要睡眠,那么就选择工作队列,如果推后的任务不需要睡眠,那么就选择软中断或者tasklet,通常选择   tasklet

抱歉!评论已关闭.