软中断,tasklet和工作队列的区别与联系
2016-06-30 19:40
232 查看
为了让中断处理运行的快,同时要完成相应的全部工作。根据具体的内容将中断分为两个部分:上半部分(中断处理程序)和下半部分(推后处理程序)。上半部分需要立即执行,并且有严格的时间限制,这些工作是在所有中断被禁止的情况下完成的,剩余部分工作推迟到下半部分。
下半部分的任务就是执行与中断处理密切相关但中断处理程序本身不执行的工作。在Linux2.6的内核中存在三种不同形式的下半部实现机制:软中断,tasklet和工作队列。
下面将比较三种机制的差别与联系。
软中断: 1、软中断是在编译期间静态分配的。
2、最多可以有32个软中断。
3、软中断不会抢占另外一个软中断,唯一可以抢占软中断的是中断处理程序。
4、可以并发运行在多个CPU上(即使同一类型的也可以)。所以软中断必须设计为可重入的函数(允许多个CPU同时操作),
因此也需要使用自旋锁来保护其数据结构。
5、目前只有两个子系直接使用软中断:网络和SCSI。
6、执行时间有:从硬件中断代码返回时、在ksoftirqd内核线程中和某些显示检查并执行软中断的代码中。
tasklet: 1、tasklet是使用两类软中断实现的:HI_SOFTIRQ和TASKLET_SOFTIRQ。
2、可以动态增加减少,没有数量限制。
3、同一类tasklet不能并发执行。
4、不同类型可以并发执行。
5、大部分情况使用tasklet。
工作队列: 1、由内核线程去执行,换句话说总在进程上下文执行。
2、可以睡眠,阻塞。
转自:http://sunxinrui.blog.sohu.com/120659923.html
下半部分的任务就是执行与中断处理密切相关但中断处理程序本身不执行的工作。在Linux2.6的内核中存在三种不同形式的下半部实现机制:软中断,tasklet和工作队列。
下面将比较三种机制的差别与联系。
软中断: 1、软中断是在编译期间静态分配的。
2、最多可以有32个软中断。
3、软中断不会抢占另外一个软中断,唯一可以抢占软中断的是中断处理程序。
4、可以并发运行在多个CPU上(即使同一类型的也可以)。所以软中断必须设计为可重入的函数(允许多个CPU同时操作),
因此也需要使用自旋锁来保护其数据结构。
5、目前只有两个子系直接使用软中断:网络和SCSI。
6、执行时间有:从硬件中断代码返回时、在ksoftirqd内核线程中和某些显示检查并执行软中断的代码中。
tasklet: 1、tasklet是使用两类软中断实现的:HI_SOFTIRQ和TASKLET_SOFTIRQ。
2、可以动态增加减少,没有数量限制。
3、同一类tasklet不能并发执行。
4、不同类型可以并发执行。
5、大部分情况使用tasklet。
工作队列: 1、由内核线程去执行,换句话说总在进程上下文执行。
2、可以睡眠,阻塞。
转自:http://sunxinrui.blog.sohu.com/120659923.html
相关文章推荐
- 软中断,tasklet和工作队列的区别与联系
- 【Unity】新的UI系统技巧
- Linux中U盘和SD卡加载卸载命令
- Json的JSONArray和JSONObject
- 精通JBOSS(一)----历史大爆炸
- 第三方的httputils请求数据和xml的pull解析
- 配置oh-my-zsh
- viewpagerindector
- Servlet,Filter,Listener,Interceptor的作用和区别
- 常用正则学习
- C语言程序的内存布局
- 如何快速看懂一个大型程序
- mybatis框架(多表关系查询)
- application
- [leetcode] 71. Simplify Path
- js字符串和正则表达式中的match、replace、exec等函数详解
- DataRow对象的RowState和DataRowVersion属性
- unity3d接入有米广告SDK----android
- Spring框架--bean标签部分属性的学习
- EditText文本改变事件