Linux SCHED_OTHER,SCHED_FIFO和SCHED_RR - 差异

时间:2012-02-22 09:44:36

标签: linux linux-kernel scheduler scheduling cfs

有人可以解释SCHED_OTHER,SCHED_FIFO和SCHED_RR之间的区别吗?

由于

2 个答案:

答案 0 :(得分:44)

SCHED_FIFO和SCHED_RR是所谓的“实时”政策。它们实现POSIX标准指定的固定优先级实时调度。具有这些策略的任务会抢占所有其他任务,因此很容易导致饥饿(如果他们不释放CPU)。

SCHED_FIFO和SCHED_RR之间的区别在于具有相同优先级的任务中,SCHED_RR执行具有特定时间片的循环;相反,SCHED_FIFO需要任务明确地产生处理器。

SCHED_OTHER是常见的循环时间分配调度策略,它根据系统中运行的其他任务为特定时间片调度任务。

更新:自Linux 3.14起,还有一项名为SCHED_DEADLINE的附加政策。此策略在Earliest Deadline First队列之上实现恒定带宽服务器(CBS)算法。此策略下的每个任务都分配了截止日期,并执行最早期限任务。描述此算法的最佳资源是Deadline scheduling in the Linux kernel

更新2 :自Linux 4.13起,SCHED_DEADLINE已将CBS替换为Greedy Reclamation of Unused Bandwidth (GRUB) algorithm

答案 1 :(得分:1)

这是基于Linux手册(http://man7.org/linux/man-pages/man7/sched.7.html)的SCHED_OTHER,SCHED_FIFO和SCHED_RR之间的区别

SCHED_FIFO:先进先出调度

  

SCHED_FIFO 只能在静态优先级高于0的情况下使用,这意味着当SCHED_FIFO线程变为可运行时,它将   始终会立即抢占任何当前正在运行的SCHED_OTHER,   SCHED_BATCH或SCHED_IDLE线程。 SCHED_FIFO是一个简单的调度   没有时间分片的算法。

SCHED_RR:轮询调度

  

SCHED_RR 是SCHED_FIFO的简单增强。上面针对SCHED_FIFO所述的所有内容也适用于SCHED_RR,除了   每个线程只允许运行最大时间范围。如果一个   SCHED_RR线程已经运行了等于或更长的时间   而不是时间量,它将被放置在列表的末尾   优先。

SCHED_OTHER:默认的Linux分时计划

  

SCHED_OTHER 只能以静态优先级0使用(即,实时策略下的线程始终具有比SCHED_OTHER更高的优先级   流程。 SCHED_OTHER是标准的Linux分时调度程序   适用于不需要特殊线程的所有线程   实时机制。