可以有人解释一下 SCHED_OTHER、SCHED_FIFO 和 SCHED_RR 的区别吗?
谢谢。
谢谢。
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)算法。该策略下的每个任务都被分配一个截止时间,并执行最早截止时间的任务。描述此算法的最佳资源是Linux内核中的截止时间调度。
更新2:自Linux 4.13以来,SCHED_DEADLINE已用贪婪回收未使用带宽(GRUB)算法替换了CBS。
SCHED_OTHER: 默认的 Linux 时间共享调度
SCHED_OTHER 只能在静态优先级 0 上使用(即,在实时策略下运行的线程总是优先于 SCHED_OTHER 进程)。SCHED_OTHER 是标准的 Linux 时间共享调度器,适用于不需要特殊实时机制的所有线程。