首页 / LINUX / Linux进程调度策略
Linux进程调度策略
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux进程调度策略,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2521字,纯文字阅读大概需要4分钟。
内容图文
linux 内核的三种主要调度策略:
1 , SCHED_OTHER 分时调度策略,
2 , SCHED_FIFO 实时调度策略,先到先服务
3 , SCHED_RR 实时调度策略,时间片轮转
实时进程将得到优先调用,实时进程根据实时优先级决定调度权值。分时进程则通过 nice 和 counter 值决定权值, nice 越小, counter 越大,被调度的概率越大,也就是曾经使用了 cpu 最少的进程将会得到优先调度。
SHCED_RR 和 SCHED_FIFO 的不同:
当采用 SHCED_RR 策略的进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的 RR 任务的调度公平。
SCHED_FIFO 一旦占用 cpu 则一直运行。一直运行直到有更高优先级任务到达或自己放弃。
如果有相同优先级的实时进程(根据优先级计算的调度权值是一样的)已经准备好, FIFO 时必须等待该进程主动放弃后才可以运行这个优先级相同的任务。而 RR 可以让每个任务都执行一段时间。
相同点:
RR 和 FIFO 都只用于实时任务。
创建时优先级大于 0(1-99) 。
按照可抢占优先级调度算法进行。
就绪态的实时任务立即抢占非实时任务。
所有任务都采用 linux 分时调度策略时:
1 ,创建任务指定采用分时调度策略,并指定优先级 nice 值 (-20~19) 。
2 ,将根据每个任务的 nice 值确定在 cpu 上的执行时间 (counter) 。
3 ,如果没有等待资源,则将该任务加入到就绪队列中。
4 ,调度程序遍历就绪队列中的任务,通过对每个任务动态优先级的计算权值 (counter+20-nice) 结果,选择计算结果最大的一个去运行,当这个时间片用完后 (counter 减至 0) 或者主动放弃 cpu 时,该任务将被放在就绪队列末尾 ( 时间片用完 ) 或等待队列 ( 因等待资源而放弃 cpu) 中。
5 ,此时调度程序重复上面计算过程,转到第 4 步。
6 ,当调度程序发现所有就绪任务计算所得的权值都为不大于 0 时,重复第 2 步。
所有任务都采用 FIFO 时:
1 ,创建进程时指定采用 FIFO ,并设置实时优先级 rt_priority(1-99) 。
2, 如果没有等待资源,则将该任务加入到就绪队列中。
3 ,调度程序遍历就绪队列,根据实时优先级计算调度权值 (1000+rt_priority), 选择权值最高的任务使用 cpu ,该 FIFO 任务将一直占有 cpu 直到有优先级更高的任务就绪 ( 即使优先级相同也不行 ) 或者主动放弃 ( 等待资源 ) 。
4 ,调度程序发现有优先级更高的任务到达 ( 高优先级任务可能被中断或定时器任务唤醒,再或被当前运行的任务唤醒,等等 ) ,则调度程序立即在当前任务堆栈中保存当前 cpu 寄存器的所有数据,重新从高优先级任务的堆栈中加载寄存器数据到 cpu ,此时高优先级的任务开始运行。重复第 3 步。
5 ,如果当前任务因等待资源而主动放弃 cpu 使用权,则该任务将从就绪队列中删除,加入等待队列,此时重复第 3 步。
所有任务都采用 RR 调度策略时:
1 ,创建任务时指定调度参数为 RR ,并设置任务的实时优先级和 nice 值 (nice 值将会转换为该任务的时间片的长度 ) 。
2 ,如果没有等待资源,则将该任务加入到就绪队列中。
3 ,调度程序遍历就绪队列,根据实时优先级计算调度权值 (1000+rt_priority), 选择权值最高的任务使用 cpu 。
4 ,如果就绪队列中的 RR 任务时间片为 0 ,则会根据 nice 值设置该任务的时间片,同时将该任务放入就绪队列的末尾。重复步骤 3 。
5 ,当前任务由于等待资源而主动退出 cpu ,则其加入等待队列中。重复步骤 3 。
系统中既有分时调度,又有时间片轮转调度和先进先出调度:
1 , RR 调度和 FIFO 调度的进程属于实时进程,以分时调度的进程是非实时进程。
2 ,当实时进程准备就绪后,如果当前 cpu 正在运行非实时进程,则实时进程立即抢占非实时进程。
3 , RR 进程和 FIFO 进程都采用实时优先级做为调度的权值标准, RR 是 FIFO 的一个延伸。 FIFO 时,如果两个进程的优先级一样,则这两个优先级一样的进程具体执行哪一个是由其在队列中的未知决定的,这样导致一些不公正性 ( 优先级是一样的,为什么要让你一直运行 ?), 如果将两个优先级一样的任务的调度策略都设为 RR, 则保证了这两个任务可以循环执行,保证了公平。
Ingo Molnar-实时补丁
原文:http://blog.chinaunix.net/uid-30040835-id-5708467.html
内容总结
以上是互联网集市为您收集整理的Linux进程调度策略全部内容,希望文章能够帮你解决Linux进程调度策略所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。