分享

软中断 tasklet 并发性分析

 Liucw2012 2012-04-27
softirq:
软中断由编译期间静态分配,不像tasklet那样动态注册或去除
一个软中断不会抢占另外一个软中断。实际上,唯一可以抢占软中断的是中断处理程序。
不过,其他的软中断——甚至是相同类型的软中断——可以在其他处理器上同时执行。
原理:软中断同步判断的标志是一个per cpu变量,所以只对当前cpu执行了同步,而
           没有关心其它cpu上的软中断,所以其他cpu上即使相同类型的软中断也可以
           执行。
触发软中断(raising the softirq),中断处理程序会在返回前标记它的软中断,使其在
稍后被执行。于是,在合适的时候,该软中断就会运行。在下列地方,待处理的软中断会
被检查和执行:
1)从一个硬件中断代码处返回时
2)在ksoftirqd内核线程中
3)在那些显式检查和执行待处理的软中断的代码中,如网络子系统。
tasklet:
『同一时间里,相同类型的tasklet只能有一个执行(其他不同类型的tasklet可以同时进行, 在不同的CPU上),
由TASKLET_STATE_RUN来控制的。』 很像真正的中断, 不可重入嵌套
原理:taskelet的同步判断标志是 struct tasklet_struct->state,锁住该标志别的cpu就不能执行该taskelet了。
这就是同一个tasklet不需要锁保护机制
而不同的tasklet之间有数据共享的话,需要加锁
而相同的softirq是可以在多处理上同时运行. 这点是它和中断处理程序以及tasklet的最大区别
workqueue
工作队列是用内核线程实现的下半部
是唯一能在进程上下文运行的下半部实现的机制,也只有它能够睡眠。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多