免费注册 查看新帖 |

Chinaunix

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

驱动中的自旋锁疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-06 11:04 |只看该作者 |倒序浏览
本帖最后由 zsmctfy 于 2011-04-06 11:06 编辑

大家好,我在看讲驱动的书上讲到自旋锁时遇到了一个疑问,它说“自旋锁锁定期间不能调用可能引起进程调度的函数”,这句话怎么理解啊?为什么不能进行进程调度呢?

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
2 [报告]
发表于 2011-04-06 11:22 |只看该作者
就是自旋锁内不能直接或间接地调用schedule函数。
因为请求锁所用的是忙等待,如果持有者去睡眠的话,当导致请求者一直等待

具体的看书上的分析吧

论坛徽章:
0
3 [报告]
发表于 2011-04-06 12:00 |只看该作者
回复 2# amarant


    也就是说,如果进程获得锁后被阻塞了,那么可能会让系统中的其它进程一直在自旋,这样会很耗费系统的CPU资源,对吧,是这样不?

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
4 [报告]
发表于 2011-04-06 13:35 |只看该作者
回复 3# zsmctfy


    是啊。而且睡眠后,不知道会执行什么样的代码,最糟糕的是又来请求已被自己这个CPU所占用的锁,那么就导致了死锁。

论坛徽章:
0
5 [报告]
发表于 2011-04-06 18:22 |只看该作者
回复  zsmctfy


    是啊。而且睡眠后,不知道会执行什么样的代码,最糟糕的是又来请求已被自己这个CP ...
amarant 发表于 2011-04-06 13:35



      为什么会导制死锁呢?   我觉得是,如果一个进程占有了一个自旋锁,然后由于某种原因它睡眠了,然后调度程序调度其它进程来运行,而恰好这个进程也来争用这个锁,这时它就会自旋,直到前面的进程下次被调度进来释放这个锁,我觉得这样并不会出现你和书上所说的死锁,我只是纯粹的持有一种初学者的怀疑态度,并无不恭!请你帮我指点迷津。我还是很疑惑为什么会死锁?

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
6 [报告]
发表于 2011-04-06 18:33 |只看该作者
本帖最后由 amarant 于 2011-04-07 10:43 编辑

回复 5# zsmctfy


   

自旋锁是只在SMP中才有用的,UP(非搶佔)里面不存在自旋锁,这点应该明白吧

假设现在CPU1 持有锁A  然后睡眠后,cpu处于无法预知的状态,此时如果又去请求A  那么cpu1将一直等待(相当于执行while(锁不开);),因为cpu1上持有锁的进程没有被调度的机会

当然cpu上的任务可以由cpu1移动到cpu2上后,然后在cpu2上执行了以后,cpu1可以得以解决死锁。但我不知道这样在cpu1被锁死的情况下能不能把这个任务移到别的cpu上

论坛徽章:
0
7 [报告]
发表于 2011-04-07 10:01 |只看该作者
回复 6# amarant


    我昨天想明白了为什么单CPU下会死锁了,但是还没明白你所说的SMP的自旋锁。SMP我以后会明白的,谢谢你啊

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
8 [报告]
发表于 2011-04-07 10:16 |只看该作者
回复 7# zsmctfy


    單cpu下的自旋鎖只是簡單地禁止搶佔,因為一個cpu同一時間只能做一件事情,此時你正持有鎖,是不會有人來跟你競爭的(因為是單cpu)

论坛徽章:
0
9 [报告]
发表于 2011-04-07 10:24 |只看该作者
回复  zsmctfy


    單cpu下的自旋鎖只是簡單地禁止搶佔,因為一個cpu同一時間只能做一件事情,此時你 ...
amarant 发表于 2011-04-07 10:16



    嗯,但是还有中断啊,中断返回时会引起进程调度啊,所以锁期间如果发生中断的话,就会崩溃。不知我说的对不对。

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
10 [报告]
发表于 2011-04-07 10:42 |只看该作者
回复 9# zsmctfy

看看這篇博文,http://deshunfan.blog.163.com/bl ... 101201010810552286/

    單cpu下禁用了搶佔應該就是返回的時候還是持有鎖狀態
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP