linux 中断下半部自学笔记

本文详细探讨了中断处理函数的局限性及其解决方式——中断下半部技术,包括软中断、tasklet和工作队列等类型的实现与特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

中断处理函数有自身的局限:

1,中断可以打断任何重要代码(除去中断屏蔽下的中断处理函数和中断优先级高的中断处理函数)。要求中断处理函数速度越快越好。

2,中断自身会屏蔽,一般是屏蔽同级的中断,也可屏蔽所有的中断。

3,涉及对硬件的操作。

4,中断在进程上下文中进行。



因为以上局限,引入了中断下半部。BH和任务队列(task queue) 已经从2.5去掉。

还有以下三种类型,软中断(softirq),tasklet和工作队列(work queue):


软中断:用数组实现,最大只能有32个软终端(最大值不能更改)。不能抢占另一个软终端,唯一可以抢占软终端的是中断处理函数。

保留给系统中对时间要求最严格以及最重要的下半部使用。目前只有网络和scsi直接使用软终端。不能休眠,在多处理器机器上可以对同一软终端同时运行。

软中断的调度:在中断返回的时候,内核检查所有挂起的软中断,并处理他们,但是自行重新触发的软中断,将放到下一个软中断执行时机去处理。一般是利用一个内核线程(ksoftirqd/n),区别在于n,对应的处理器的编号。


tasklet:利用软终端实现。两类软终端代表,HI_SOFTIRQ和TASKLET_SOFTIRQ。唯一的区别是优先级的不同。


工作队列(work queue).进程上下文执行,可以睡眠,跟其他的内核线程一样,叫做工作者线程(worker thread) events/n,n是处理器的编号。也可以通过create_workqueue创建一个新的workqueue内核线程来处理需要的函数。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值