中断top half 与 buttom half

top half 用于处理紧急事件

buttom half 用于处理非紧急事件,承接top half 接下来要处理的

 

buttom half 一般通过softirqs、tasklets、workqueues

 

软中断与硬中断的另_点区别是’软中断的处理函数必须是可重入的,

软中断的执行允许被硬中断抢占’同时Linux还允许软中断在多个CPU
核上并行执行以提升软中断的处理效率’因此软中断处理过程应该避免使用全局共享变
量(如静态变量和全局变量)’否则必须加锁来保护关键数据结构

软中断侧重于中断的处理效率’如在多核情况下软中断可并行执行; tasklet则更侧重于编

程开发的友好性,tasklet使用者无须考虑同步加锁和代码可重人等问题,但是因为tasklet本身依托于中断上下文’执行期间不能睡眠’外加

设计上的不可抢占性’导致tasklet可能引起难以预测的系统延迟’严
重的话甚至可能影响系统的整体实时性。
我们接下来介绍另—种下半部机制—工作队列’它允许睡眠’降低了下半部的开
发难度’同时也关注效率

 

工作队列并非没有缺点。因为工作队列本身是串行执行的’所以_旦有某个work被
阻塞’将导致该队列上其他work无法执行°因此’每个驱动的开发人员都可能会创建自
己的工作队列’进而保证自己的下半部任务能被尽快调度

 

Ljnux内核引人了并发可管理工作队列(ConcurrencyManaged
WOrkQueue’CMWQ)机制°CMWQ本质上是将工作队列的管理从驱动开发者手里交还
给内核’由内核来决定工作线程的创建时

 

posted @   cogitoergosum  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2021-02-23 路由表的处理机制
点击右上角即可分享
微信分享提示