SCHED_RR против SCHED_FIFO в каком порядке?

#c #linux #process #scheduled-tasks #round-robin

Вопрос:

У меня экзамен, и есть огромная путаница, которую мне нужно исправить.

Я знаю, что разница между SCHED_FIFO и SCHED_RR заключается в том, что среди задач с одинаковым приоритетом SCHED_RR выполняет циклическое выполнение с определенным временным интервалом; вместо этого SCHED_FIFO требуется, чтобы задача явно выдавала процессор.

Кроме того, я знаю, что если в системе есть процесс в реальном времени, то «обычный» процесс выполняться не будет.

Но чего я не могу понять, как RR и FIFO будут работать вместе?

Допустим, у меня есть следующие процессы с одинаковым приоритетом, в то время как (f) означает, что это FIFO, а (r) означает, что RR заказан с того, который пришел первым, до последнего:

A(r), B(f), C(f), D(r), E(r)

  1. В каком порядке они будут работать?
  2. Что делать, если я изменю A на (f)?
  3. Теперь что, если у меня есть два процесса A и B, где A предшествовал B, а A-RR, а B-FIFO, каков порядок?
  4. Что делать, если A-это не FIFO, а B-RR?

Другими словами, я не знаю, что важнее, когда у нас есть RR и FIFO вместе, это тот, кто пришел первым, у кого больше приоритетов или это всегда FIFO?

Комментарии:

1. В основном догадки, так что ответа нет. Как я понимаю, единственная разница между a SCHED_FIFO и SCHED_RR потоком заключается в том, что SCHED_FIFO поток будет продолжать работать, если он не будет выполнен, заблокирован или не будет вытеснен потоком с более высоким приоритетом, где SCHED_RR поток в конечном итоге закончится. Логично, что для 3 поток A будет работать до тех пор, пока не закончится его временной срез, после чего B будет работать до тех пор, пока не даст результат.