#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)
- В каком порядке они будут работать?
- Что делать, если я изменю A на (f)?
- Теперь что, если у меня есть два процесса A и B, где A предшествовал B, а A-RR, а B-FIFO, каков порядок?
- Что делать, если A-это не FIFO, а B-RR?
Другими словами, я не знаю, что важнее, когда у нас есть RR и FIFO вместе, это тот, кто пришел первым, у кого больше приоритетов или это всегда FIFO?
Комментарии:
1. В основном догадки, так что ответа нет. Как я понимаю, единственная разница между a
SCHED_FIFO
иSCHED_RR
потоком заключается в том, чтоSCHED_FIFO
поток будет продолжать работать, если он не будет выполнен, заблокирован или не будет вытеснен потоком с более высоким приоритетом, гдеSCHED_RR
поток в конечном итоге закончится. Логично, что для 3 поток A будет работать до тех пор, пока не закончится его временной срез, после чего B будет работать до тех пор, пока не даст результат.