有人可以解释SCHED_OTHER,SCHED_FIFO和SCHED_RR之间的区别吗?
由于
答案 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分时调度程序 适用于不需要特殊线程的所有线程 实时机制。