免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: xiegang112
打印 上一主题 下一主题

单cpu抢占模式下自旋锁为什么会要禁止抢占? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-04-11 21:21 |只看该作者
原帖由 xiegang112 于 2009-2-7 20:01 发表
单cpu抢占模式下,spin_lock定义是禁止抢占。在网上查了些文章,大概意思是说如果如果不禁止抢占,会造成死锁。但是我觉得理论上应该不会造成死锁。一个进程获得了资源的自旋锁,在访问资源期间,被其他进程抢占。新的进程为了访问该资源,去获得该锁。此时形成了一个竞态条件。如果没有外界干预,就是死锁现象。但是,因为存在中断,他可能打断新进程的忙等,老进程有机会获得cpu,完成对资源的访问并释放锁,从而避免死锁。
所以,我觉得单cpu spin_lock中禁止抢断并不会造成死锁,而是有可能引起性能的下降。不知道理解是否正确?

谢谢


我觉得你这句话:
"所以,我觉得单cpu spin_lock中禁止抢断并不会造成死锁,而是有可能引起性能的下降。"
是对的!
只是kernel不可能这样去冒险降低系统性能,所以为了万无一失,有这样一对函数:

  1. spin_lock_irqsave(lock, flags);
  2. spin_unlock_irqrestore(lock, flags) ;
复制代码

这样把中断也屏蔽掉了,就不会发生"引起性能的下降".

论坛徽章:
0
12 [报告]
发表于 2009-04-11 21:23 |只看该作者
原帖由 dreamice 于 2009-2-8 15:59 发表


你说的是对的。由于2.6内核版本加入了抢占的特性,但我们可以配置为抢占和非抢占模式。
在单处理器2.6版本的非抢占模式下,spin_lock被编译为一条空语句,什么都不干;
在单处理器2.6版本的抢占模式下,s ...


好像是LKD2上的总结

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
13 [报告]
发表于 2009-08-06 17:12 |只看该作者
原帖由 xiegang112 于 2009-2-7 20:01 发表
单cpu抢占模式下,spin_lock定义是禁止抢占。在网上查了些文章,大概意思是说如果如果不禁止抢占,会造成死锁。但是我觉得理论上应该不会造成死锁。一个进程获得了资源的自旋锁,在访问资源期间,被其他进程抢占 ...


如果在UP 可抢占内核下自旋锁实现和 SMP 下实现相同, 会不会导致死锁呢?

自然中断是允许的, 从中断返回也可能重新schedule, 从而导致正在自旋的任务被切换掉, 似乎引不起死锁, 最多性能降低。
除非自旋的任务在自旋时不耗费时间片, 那么因为当前任务时间片剩余, schedule 不会被调用, 任何中断最终还是会返回正在自旋的任务, 导致无限自旋下去。

有谁能解释一下吗

论坛徽章:
0
14 [报告]
发表于 2015-07-22 11:03 |只看该作者
不是分抢占与非抢占吗回复 3# Godbach


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP