Kernel之中断处理底半部机制

本文介绍了Linux内核中断处理中顶半部和底半部的概念,强调了中断服务程序要求短小精悍,但实际可能需要大量处理。因此,Linux通过tasklet、工作队列、软中断和中断线程化来实现底半部机制。tasklet在软中断上下文执行,工作队列允许任务在后台线程中运行,软中断是快速处理路径,而中断线程化则将中断处理转化为线程。这些机制确保了中断处理的效率和响应性。
摘要由CSDN通过智能技术生成

Kernel之中断处理底半部机制 | DD'NotesKernel之中断处理底半部机制[TOC] 主要记录一些整体的概念、框架和简单介绍,不涉及具体的原理和实现细节 背景查看系统相关中断: cat /proc/interrupts 中断服务程序要求尽量短小精悍,耗时短。但现实情况是中断到来时,需要完成的工作会比较多,需要进行较大量的耗时处理。于是Linux将中断处理程序分成了2部分:顶半部(Top Half)和底半部(Bottom Half)。但https://notes.z-dd.online/2021/09/06/Kernel%E4%B9%8B%E4%B8%AD%E6%96%AD%E5%A4%84%E7%90%86%E5%BA%95%E5%8D%8A%E9%83%A8%E6%9C%BA%E5%88%B6/

Kernel之中断处理底半部机制
[TOC]

主要记录一些整体的概念、框架和简单介绍,不涉及具体的原理和实现细节

背景
查看系统相关中断:

SHELL
cat /proc/interrupts
中断服务程序要求尽量短小精悍,耗时短。但现实情况是中断到来时,需要完成的工作会比较多,需要进行较大量的耗时处理。于是Linux将中断处理程序分成了2部分:顶半部(Top Half)和底半部(Bottom Half)。但并不一定要分成2个部分, 本来中断要处理的工作比较少,则完全没必要底半部,只需要顶半部就足够了。

顶半部主要用于处理一些尽量少的比较紧急的东西,比如紧急的硬件操作,清除中断标志,记录相应中断信息供底半部使用。
底半部主要处理中断需要处理的绝大部分工作(比较耗时)。可以被新的中断打断,通常顶半部是不可被中断的。

所以这里主要介绍下底半部相关的一些机制:
Linux实现中断底半部的机制主要有tasklet、工作队列(work queue)、软中断(softirq)、中断线程化(threaded_irq)

tasklet:
执行上下文为软中断,执行时机通常是中断顶半部返回时。不允许睡眠。执行快, 短时期, 并且在原子态
主要相关使用伪代码:

C
/* 定义及关联 */
void xxx_do_tasklet(unsigned long);
DECLARE_TASKLET(xxx_tasklet, xxx_do_tasklet, 0);

/* 中断处理底半部 */
void xxx_do_tasklet(unsigned long)
{
    ...
}

/* 中断处理顶半部, 中断申请时注册的中断处理回调函数*/
irqreturn_t xxx_interrupt(int irq, void *dev_id)
{
    ...
    tasklet_schedule(&xxx_tasklet);
    ...
}
工作队列:

......


作者: Shell
链接: https://notes.z-dd.online/2021/09/06/Kernel%E4%B9%8B%E4%B8%AD%E6%96%AD%E5%A4%84%E7%90%86%E5%BA%95%E5%8D%8A%E9%83%A8%E6%9C%BA%E5%88%B6/
来源: DD'Notes
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值