linux-中断

一 、中断

1.1 申请

       中断申请函数 int request_irq()可能会睡眠。不能在中断上下文或其他不允许阻塞的代码中调用该函数。Free_irq()必须从进程上下文中调用。

1.2 中断线

       中断线到底是什么?每个中断都有一个中断号,通过中断号即可区分不同的中断,有的资料也把中断号叫做中断线。     

       中断线操作函数如下:

       Disable_irq(unsigned int irq);

       Disable_irq_nosync(unsigned int irq);

       Enable_irq(unsigned int irq);

1.3 中断共享

       多个设备共享一根硬件中断线的情况在实际的硬件系统中广泛存在,Linux支持这种中断共享。详细内存可参考如下博客。

        中断共享 - 简书 (jianshu.com)

1.4 当前处理器中断操作

        禁止当前处理器上的本地中断,随后又激活它们的语句为:

        Local_irq_disable()  /*禁止中断*/

        Local_irq_enable()

1.5 中断处理函数    

        中断处理程序无需重入。

        中断不支持嵌套。

        中断处理函数,应处理一些及时的操作,耗时的操作留给下半部处理如工作队列,tasklet等。

二 下半部处理

2.1 软中断

软中断什么时候会被执行呢?

  1. 从硬件中断代码返回时。
  2. ksoftirq内核线程中。
  3. 在那些显示检查和执行待处理的软中断的代码中,如网络子系统。

        软中断是一组静态定义的下半部接口,有32个,可以在所有处理器上同时执行——即使两个类型相同也可以。

2.2 tasklet

        两个类型不同的tasklet可以在不同的处理器上同时执行,但类型相同的tasklet不能同时执行。

        Tasklet处理时,到底禁止了中断没有?没有。

        

linux中,中断的处理方法 tasklet软中断_中断程序不能嵌套_One Piece&的博客-CSDN博客

2.3队列

      在工作队列和软中断/tasklet中做出选择非常容易,如果推后执行的任务需要睡眠,那么就选择队列。如果推后执行的任务不需要睡眠,那么就选择软中断或tasklet。

        

  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值