SCHED_FIFO 和 SCHED_RR 如何相互干扰?

wei*_*wei 5 linux pthreads thread-priority

SCHED_FIFO 和 SCHED_RR 都用于实时使用。我知道 SCHED_RR 可以被时间切片抢占。但是,如果我有一个线程设置为 SCHED_FIFO,另一个线程设置为 SCHED_RR,如果两个线程都准备好运行,它们是否纯粹按优先级进行调度?如果它们具有相同的优先级怎么办?

caf*_*caf 6

从概念上讲,有一个与每个静态优先级相关联的可运行进程列表。这些列表可以同时包含SCHED_FIFOSCHED_RR进程 - 这两个调度策略共享相同的静态优先级集。

在选择要运行的进程时,调度器会选择静态优先级最高的非空列表头部的进程,而不管该进程的调度策略如何。

调度策略影响进程在这些列表中的移动方式。对于SCHED_FIFO,一旦一个进程到达给定优先级的列表的头部,它将停留在那里,直到它阻塞或让步。对于SCHED_RR,超过其最大时间量程的可运行进程将被移动到其静态优先级列表的末尾。

  • @MargaretBloom:这是正确的(如果机器只有一个可用的 CPU 核心)。只要优先级为 90 的进程是可运行的,优先级为 90 的可运行进程列表将不为空,因此将选择相同的进程来运行。这就是实时调度优先级的工作方式 - 如果可以运行更高优先级的进程,则较低优先级的进程将永远不会运行。(如果有多个CPU核心,则优先级90的进程将始终运行,而优先级45的进程将交替同时运行)。 (2认同)