今天早上我阅读了有关 Linux 实时调度的信息。根据“罗伯特·洛夫的 Linux 系统编程”一书,那里有两个主要的调度。一个是 SCHED_FIFO,先进先出,第二个是 SCHED_RR,即循环。我了解了 fifo 和 rr 算法的工作原理。但是当我们有系统调用时,
sched_setscheduler (pid_t pid, int policy, const struct sched_parem *sp)
我们可以显式地为我们的进程设置调度策略。所以在某些情况下,两个以 root 运行的进程可以有不同的调度策略。作为一个具有 SCHED_FIFO 的进程和另一个具有 SCHED_RR 且具有相同优先级的进程。在这种情况下,首先选择哪个进程?FIFO分类流程还是RR分类流程?为什么?
考虑这种情况。共有三个过程A,B,C。所有人都具有相同的优先级。A 和 B 是 RR 类进程,C 是 FIFO 类进程。A 和 B 是可运行的(因此两者都在某个时间间隔内交替运行)。目前 A 正在运行。现在 C 变为可运行的。在这种情况下,是否
1. A will preempt for C, or
2. A will run until its timeslice goes zero and let C run. Or
3. A will run until its timeslice goes zero and let B run.
a) here after B runs till its timeslice becomes zero and let C run or
b) after B runs till its timeslice becomes zero and let A run again (then C will starve untill A and B finishes)