- •Глава 10
- •10.1. Многопроцессорное планирование
- •Назначение процессов процессорам
- •10.2. Планирование реального времени
- •10.3 Планирование в linux
- •10.4. Планирование в unix svr4
- •10.5. Планирование windows 2000
- •Многопроцессорное планирование
- •10.6. Резюме, ключевые термины и контрольные вопросы
- •10.7. Рекомендуемая литература
- •10.8. Задачи
10.3 Планирование в linux
Linux построен на традиционном планировании UNIX, описанном в разделе 9.3, с добавлением двух классов планирования для мягких заданий реального времени. Таким образом, в Linux имеется три класса планирования.
SCHED_FIFO. Потоки реального времени с использованием планирования по принципу "первым вошел — первым вышел".
SCHED_RR. Потоки реального времени с использованием кругового планирования.
SCHED_OTHER. Прочие потоки, не являющиеся потоками реального времени.
В пределах каждого класса могут использоваться различные приоритеты, причем приоритеты классов реального времени выше приоритетов класса SCHED_OTHER. Для потоков FIFO применимы следующие правила.
1. Система не прерывает выполняющийся поток этого класса за исключением следующих ситуаций:
а) становится готовым другой поток этого же класса с более высоким приоритетом;
б) выполнение потока блокируется ожиданием события (например, выполнения операции ввода-вывода);
в) выполняющийся поток добровольно отдает процессор посредством вызова примитива sched_yield.
2. При прерывании выполняющегося потока FIFO он помещается в очередь, предназначенную для его уровня приоритета.
3. Если поток FIFO приходит в состояние готовности к выполнению и имеет более высокий приоритет, чем выполняющийся, то текущий поток вытесняется и начинает выполняться готовый поток с высшим приоритетом. Если таких потоков несколько, выбирается поток, находившийся в состоянии ожидания дольше других. ,
Стратегия SCHED_RR аналогична стратегии SCHED_FIFO за исключением добавления временной квоты, связанной с каждым потоком. При выполнении потока RR дольше, чем позволяет его квота, он приостанавливается, и для выполнения выбирается поток реального времени с равным или более высоким приоритетом.
На рис. 10.9 ([СОМР98]) приведен пример, иллюстрирующий отличия использования стратегий FIFO и RR. Предположим, что программа содержит четыре потока с относительными приоритетами, показанными на рис. 10.9, а. Предположим также, что все ожидающие потоки готовы к выполнению, когда текущий поток завершается или переходит в состояние ожидания, и что в процессе его выполнения не появляются потоки с более высоким приоритетом. На рис. 10.9,б показана очередность выполнения потоков, если они принадлежат классу SCHED_FIFO. Поток D выполняется до его завершения или состояния ожидания; затем, несмотря на равные приоритеты потоков В и С, выполняется поток В как дольше находившийся в состоянии ожидания. Поток В выполняется до его завершения или состояния ожидания, после чего то же происходит с потоком С. И, наконец, выполняется поток А.
На рис. 10.9,в показана очередность выполнения потоков в случае их принадлежности классу SCHED_RR. Сперва до перехода в состояние ожидания или завершения выполняется поток D. Затем, чередуясь (поскольку они имеют одинаковый приоритет), выполняются потоки В и С, а после их завершения — поток А.
Последним классом планирования является SCHED_OTHER. Поток из этого класса может выполняться только в том случае, если не имеется готовых к выполнению потоков реального времени. В пределах класса SCHED_OTHER используется традиционное планирование UNIX, описанное в разделе 9.3.
