Сегодня утром я прочитал о планировании реального времени Linux. Согласно книге "Системное программирование Linux Робертом Лав", есть два основных графика. Один из них - SCHED_FIFO, 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)