免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1744 | 回复: 3
打印 上一主题 下一主题

tasklet类型? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-10 17:28 |只看该作者 |倒序浏览
在书上看到
同类的tasklet不能同时运行,所以对于同类tasklet中的共享数据不需要保护。不同类的tasklet共享时,需要在访问下半部中的数据前先获取一个普通的自旋锁。

同类,不同类,是指HI_SOFTIRQ   TASKLET_SOFTIRQ两种类型吗,还是指什么??

论坛徽章:
0
2 [报告]
发表于 2012-02-10 23:30 |只看该作者
同类是指你注册的同一个tasklet下半部程序,TASKLET_SOFTIRQ是一个大类型,下面的链表上可以挂很多其他的tasklet

论坛徽章:
0
3 [报告]
发表于 2012-02-11 01:01 |只看该作者
本帖最后由 MagicBoy2010 于 2012-02-11 01:05 编辑

在书上看到
同类的tasklet不能同时运行,所以对于同类tasklet中的共享数据不需要保护。不同类的tasklet共享时,需要在访问下半部中的数据前先获取一个普通的自旋锁。

同类,不同类,是指HI_SOFTIRQ   TASKLET_SOFTIRQ两种类型吗,还是指什么??

====================================================
同类的tasklet这种提法本身就是有问题的,你最后一句其实是tasklet两种实现类型,Linux内核对它们的处理行为是完全一样,区别只在两者优先级不一样。如果是TASKLET_SOFTIRQ,正确的提法是,同一个tasklet对象不能同时运行(特指SMP系统,单核系统不会出现这种情况),特定的软件逻辑会保证同一个tasklet对象只可能在一个处理器上运行,就是你所说的不能同时运行。《深入Linux设备驱动程序内核机制》第六章“延迟操作”中对此的描述是:“因此当一个tasklet对象被成功提交进系统但尚未被调度执行之前,它处于TASKLET_STATE_SCHED状态,此时即便是在多处理器系统中,运行在其他处理器上的tasklet_schedule函数也无法再次提交一个处于TASKLET_STATE_SCHED状态的tasklet对象,因此一个tasklet对象在同一时间只可能在一个处理器上运行,而不会同时有多个实例在不同的CPU上运行。”

所以不用担心你的tasklet对象的数据的共享保护问题,除非有一个共享资源会被两个不同的tasklet对象所访问。




   

论坛徽章:
0
4 [报告]
发表于 2012-02-11 18:24 |只看该作者
非常感谢两位的解答。
我还要琢磨琢磨。呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP