免费注册 查看新帖 |

Chinaunix

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

[内核同步] 求问内核中关于shedule的一个问题 请高手解答 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-01 14:42 |只看该作者 |倒序浏览
内核在开始寻找可运行进程前,schedule必须关闭本地中断 ,并获取所要保护的运行队列自旋锁
spin_lock_irq(&rq->lock);
然后继续运行,调用context_switch,后者调用switch_to切换到另一个进程运行,但并没有打开本地中断和释放自旋锁
同时又说当switch_to调用之后的语句由原来被替换的进程执行,其中有句:
spin_unlock_irq(&this_rq()->lock);
我的理解是进程被替换后一直持有自旋锁 ,那shedule函数怎么能够选择这个运行队列上的进程执行

论坛徽章:
0
2 [报告]
发表于 2014-07-21 22:22 |只看该作者
没理解你的问题,持有锁和选择进程执行不矛盾呀?

论坛徽章:
0
3 [报告]
发表于 2014-07-21 22:22 |只看该作者
没理解你的问题,持有锁和选择进程执行不矛盾呀?

论坛徽章:
0
4 [报告]
发表于 2014-07-21 22:23 |只看该作者
没理解你的意思,持有锁和选择进程执行矛盾吗?

论坛徽章:
0
5 [报告]
发表于 2014-07-23 21:56 |只看该作者
本帖最后由 黎明748 于 2014-07-23 22:38 编辑

切换进程之前已经释放自旋锁了。切换回来再开抢占

论坛徽章:
0
6 [报告]
发表于 2014-07-23 23:17 |只看该作者
本帖最后由 黎明748 于 2014-07-23 23:18 编辑

回去看了一遍schedule。它的意思是spin_unlock_irq(&this_rq()->lock);是由切换后的进程解锁的。所以不会死锁。2.6.20和2.6.11的schedule代码有点不用。2.6.20如果可以在切换前解锁,这个好像要体系结构支持的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP