免费注册 查看新帖 |

Chinaunix

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

调度... [复制链接]

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-05 15:39 |只看该作者 |倒序浏览
10可用积分
A进程
调度策略:
SCHED_OTHER
优先级:
60

B进程:
调度策略:
SCHED_FIFO
优先级:
50

问:

同时启动A和B,那么A和B进程是如何运行的?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2010-02-05 16:04 |只看该作者
SCHED_OTHER的优先级?!
SCHED_FIFO是实时进程,并且还是绝对变态的,立即强占,强占到死,除非它死了,否则只有比它优先级更高的任务才能把它给换出来。

论坛徽章:
0
3 [报告]
发表于 2010-02-05 16:20 |只看该作者
LZ指的是在linux下?
linux下,SCHED_OTHER是普通进程,SCHED_FIFO是实时进程,实时进程的优先级比普通进程都高,不存在你说的情况吧~

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
4 [报告]
发表于 2010-02-05 16:34 |只看该作者
像例子那样,实时进程的优先级小于普通进程的时候,那么普通进程会不会抢占实时进程而运行?

论坛徽章:
0
5 [报告]
发表于 2010-02-05 17:44 |只看该作者
不会,实时优先级需要绝对高于普通优先级,否则就没有意义了。另外,普通优先级不存在抢占,而是被调度,也就是“等死”;而实时优先级则是“见到低等的就砍死,或者被高等的砍死”。所以实时优先级不可能被普通的抢占,这一点是理论上必须保证的,否则整个实时机制是不可能实现的。
如果是LINUX的话目前的实现是两个优先级共享同一队列,实时优先级固定从一头进(头还是尾我也含糊了),普通的从另一头进,调度时先从实时入队那一端调度,等实时的调度完了自然会调度到普通的,但是只要队列里还存在实时进程,那么下一个被调度的一定是实时进程,所以是一个很简洁的设计。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
6 [报告]
发表于 2010-02-05 22:39 |只看该作者
不会,实时优先级需要绝对高于普通优先级,否则就没有意义了。另外,普通优先级不存在抢占,而是被调度,也 ...
NalaGinrut 发表于 2010-02-05 17:44



   
首先我想问的是:操作系统是按什么条件来决定调度哪个进程的?只是优先级吗?

我在aix下面试过,某个A线程的调度策略是sched_fifo,优先级是60(说明:在aix下,0是最大的优先级,127是最小的优先级),另外一个B线程的调度策略是sched_other,优先级是40,那么
按理来说,A线程应该运行完的,可实际上B线程先运行完了,感觉上B线程"抢占"了A线程,运行先了。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
7 [报告]
发表于 2010-02-05 23:29 |只看该作者
首先我想问的是:操作系统是按什么条件来决定调度哪个进程的?只是优先级吗?

我在aix下面试 ...
chenzhanyiczy 发表于 2010-02-05 22:39



    AIX不熟,不过你可以给出一下你的测试方法吗?包括代码

论坛徽章:
0
8 [报告]
发表于 2010-02-05 23:35 |只看该作者
SCHED_OTHER是个什么算法?

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
9 [报告]
发表于 2010-02-05 23:58 |只看该作者
回复 7# cjaizss

关于最先提出的问题,我用下面的方法来说明我的理解,不知对不对,请指教

cpu正在运行A进程,A的调度策略是SCHED_OTHER,优先级为40.此时醒来一个B进程(B的调度策略是SCHED_FIFO,
  优先级为60),那么B将抢占A得到运行(为什么能抢占呢?因为B的调度策略是SCHED_FIFO,B是个实时进程),但B运行一段时间后,调度程序发现A的优先级高于B,那么A将"抢占"B得到运行,
  运行一段时间(这段时间决定于该进程的分配的cpu时间片或者被其他更高的进程抢占或者被中断或系统调用)后,
  此时A的优先级变低了,B又将抢占A(虽然其他进程也可以抢占A,但由于B是实时进程,那么B先抢占),随着A的优先级变
  高,A最后又将抢占B,以此类推.
如此可见只要A的优先级高于B,那么就可以抢占B,所以A比B运行的快

注意:这里的优先级高低是0-129的,也就是说0是最高优先级的

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
10 [报告]
发表于 2010-02-06 00:00 |只看该作者
SCHED_OTHER是个什么算法?
prolj 发表于 2010-02-05 23:35



    linux内核的三种调度方法:
1,SCHED_OTHER 分时调度策略,
2,SCHED_FIFO实时调度策略,先到先服务
3,SCHED_RR实时调度策略,时间片轮转
实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的进程将会得到优先调度。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP