Linux软中断学习

发布时间:2024年01月17日

软中断

软中断使得内核可以延期执行任务。因为它们的运作方式与上文描述的中断类似,但完全是用软件实现的,所以称为软中断(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.开启软中断的函数

中断处理程序执行软中断

文章来源:https://blog.csdn.net/qiubinwei/article/details/135573711
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。