Linux软中断学习

软中断

软中断使得内核可以延期执行任务。因为它们的运作方式与上文描述的中断类似,但完全是用软件实现的,所以称为软中断(software interrupt)或soft irq是完全符合逻辑的。内核借助于软中断来获知异常情况的发生,而该情况将在稍后由专门的处理程序例程解决。如上所述,内核在do_irq末尾处理所有待决软中断,因而可以确保软中断能够定期得到处理。软中断机制的核心部分是一个表,包含32个softirq_action类型的数据项。软中断必须先注册,然后内核才能执行软中断。

软中断有守护进程,软中断守护进程的任务是,与其余内核代码异步执行软中断。为此,系统中的每个处理器都分配了自身的守护进程,名为ksoftirqd。

软中断类型

上半部称为硬中断(hardirq), 下半部有三种:软中断softirq,小任务tasklet和工作队列workqueue。

三种下半部的区别:

软中断和小任务不允许睡眠,工作队列是使用内核线程实现的,处理函数可以睡眠

软中断的种类是编译时静态定义的,在运行时不能添加或删除;小任务可以在运行时添加或者删除。

同一种软中断的处理函数可以在多个处理器上同时执行,处理函数必须是可以重入的,需要使用锁保护临界区。

一个小任务同一时刻只能在一个处理器上执行,不要求处理函数是可以重入的。

软中断softirq是中断处理程序在开启中断的情况下执行的部分,可以被硬中断抢占。内核定义了一张软中断向量表,每种软中断有一个唯一编号,对应一个softirq_action实例。

内核中定义的软中断类型有如下11种:

软中断注册及软中断触发

函数open_softirq()用来注册看软中断的处理函数,在软中断向量表中为制定的软中断编号设置处理函数,

函数raise_softirq()用来触发软中断,参数是软中断编号

执行软中断

1.中断处理程序执行软中断(内核执行软中断的地方)

a.在中断处理程序的后半部分执行软中断,对执行时间有限制:不能超过2毫秒并且最多执行10次;

b.每个处理器有一个软中断线程,调度策略是SCHED_NORMAL,优先级是120.

c.开启软中断的函数

中断处理程序执行软中断

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值