Сегодня утром я прочитал о планировании 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)