Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
У. Столлингс ГЛАВА 10 Многопроцессорное планиро...doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
389 Кб
Скачать
☆

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.