免费注册 查看新帖 |

Chinaunix

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

[内核入门] schedule只负责当前cpu的任务切换吗? [复制链接]

论坛徽章:
2
射手座
日期:2014-09-03 00:18:022015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-13 12:36 |只看该作者 |倒序浏览
请教个问题,schedule只负责当前cpu的任务切换吗?
如下场景:
有2个cpu,称为core1、core2, 3个任务A、B、C,3个任务都是RT实时性任务,调度策略是SCHEDULE_FIFO,
任务A、B都绑定在core1上,B优先级高,任务C绑定在core2上;

core1:B在等待资源或者锁处于睡眠,A执行;然后,
core2:C执行,释放B需要的资源或者锁;

C在释放资源或者锁的时候,core2上会调用一次schedule,它应该只能负责core2的进程切换吧,那core1上什么时候才能由A切换到B?(假设ABC以外其他任务优先级都比这3个低)

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
2 [报告]
发表于 2014-08-13 12:55 |只看该作者
当然~
core1上的B如果不被**的话,是不会得到调度的,因为只有RUNNING状态的进程才有机会被调度。
所以,如果需要B被重新调度,有两种方法:
1、在C释放资源时,主动wakeup B
2、B睡眠时,设个超时,比如用schedule_timeout

论坛徽章:
2
射手座
日期:2014-09-03 00:18:022015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2014-08-13 13:24 |只看该作者
本帖最后由 wLiu2007 于 2014-08-13 13:35 编辑

回复 2# humjb_1983

C释放的资源或者锁是B等待的资源呀,这个跟C 直接wakeup B有什么区别吗?

个人理解无论是C释放B需要的资源、还是C主动wakeup B,core2上都会触发一次调度机会即调用schedule,这个时候只能将B的状态变成running状态,并加入到core1的rq中吧
而且这两个过程都是需要加锁的,因为在core2上的schedule代码操作core1的rq与core1上的schedule之间有竞争;

至于B能不能真正的运行需要等到core1上有调度机会,即core1上运行__schedule才可以发生真正的cpu从A切换到B,其它core最多只能改变B这个任务的状态和所在的队列?

不知道理解是否正确?


   

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
4 [报告]
发表于 2014-08-13 14:00 |只看该作者
wLiu2007 发表于 2014-08-13 13:24
回复 2# humjb_1983

C释放的资源或者锁是B等待的资源呀,这个跟C 直接wakeup B有什么区别吗?

呵呵,那要看B等待资源的方式,你这里没有是哪种方式~~
通常来说,比如使用信号量,那C在释放信号量时,是会主动wakeup等待在这个信号量等待队列中的进程的,但这个是信号量这种同步机制实现的,最终还是要主动wakeup的。
如果B只是简单的随眠,如果不主动**的话,那就没有调度的机会了。。。。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
5 [报告]
发表于 2014-08-13 14:32 |只看该作者
如果真如楼主所说, 那不是有的CPU累shi了, 有的饿shi了?

论坛徽章:
2
射手座
日期:2014-09-03 00:18:022015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2014-08-13 16:48 |只看该作者
回复 5# q1208c
看了一下调度的代码,貌似我说的是对的,只不过core2设置进程B的running状态,加入core1的runqueue之后,并且会设置B的resched标志,

然后core2再给core1发一个中断信号smp_send_reschedule(cpu);这样就会触发core1的调度机会,这样就能够从A切到B;

   

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
7 [报告]
发表于 2014-08-13 21:04 |只看该作者
本帖最后由 Tinnal 于 2014-08-13 21:06 编辑

回复 6# wLiu2007

嗯,你确实看代码了,呵呵。理解的也是对的。但有两点要注意的:

1. 以上的讨论只在没有发生核迁移的情况。
2. 因此你三个进程采用的都是FIFO,因此如果A不主动睡眠,就算B已经被“唤”“醒”,B还是没有机会运行的(还是基于没有迁移的情况),除非你改为RR算法。


“唤”“醒”也敏感?晕。   

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-15 06:20:00数据库技术版块每日发帖之星
日期:2016-06-16 06:20:00数据库技术版块每日发帖之星
日期:2016-06-18 06:20:00程序设计版块每日发帖之星
日期:2016-06-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-09 06:20:00IT运维版块每日发帖之星
日期:2016-07-15 06:20:00IT运维版块每日发帖之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-08-18 06:20:00
8 [报告]
发表于 2014-08-13 21:33 |只看该作者
Tinnal 发表于 2014-08-13 21:04
回复 6# wLiu2007

嗯,你确实看代码了,呵呵。理解的也是对的。但有两点要注意的:



楼上你俩所言甚是!

论坛徽章:
2
射手座
日期:2014-09-03 00:18:022015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2014-08-13 22:38 |只看该作者
回复 7# Tinnal
我这里已经假设了,A、B都是schedule_fifo,且B的优先级比A高,有亲和设置,不会发生迁移,所以只要core2给core1发送了中断通知,core1有了调度机会,就能够马上从A切到B

Tinny兄,**也敏感,什么意思哟?



   

论坛徽章:
2
射手座
日期:2014-09-03 00:18:022015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2014-08-13 22:39 |只看该作者
看到**,我知道啥意思呢 呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP