今朝、Linux のリアルタイム スケジューリングについて読みました。「Robert Love による Linux システム プログラミング」という本によると、そこには 2 つの主要なスケジューリングがあります。1 つは SCHED_FIFO、fifo で、2 番目は SCHED_RR、ラウンド ロビンです。そして、fifo と rr アルゴリズムがどのように機能するかを理解しました。しかし、システムコールがあるので、
sched_setscheduler (pid_t pid, int policy, const struct sched_parem *sp)
プロセスのスケジューリング ポリシーを明示的に設定できます。そのため、場合によっては、root によって実行される 2 つのプロセスが異なるスケジューリング ポリシーを持つことがあります。1 つのプロセスが SCHED_FIFO を持ち、別のプロセスが SCHED_RR を持ち、同じ優先度を持つ。その場合、どのプロセスが最初に選択されますか?FIFO クラスのプロセスまたは RR クラスのプロセス? なんで?
この場合を考えてみましょう。A、B、Cの3つのプロセスがあります。すべてが同じ優先度を持っています。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)