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

10.4. Планирование в unix svr4

Алгоритм планирования в UNIX SVR4 представляет собой преобразованный алгоритм из ранних систем UNIX (описанный в разделе 9.3). Новый алгоритм разработан таким образом, что дает наивысший приоритет процессам реального времени, приоритет следующего уровня присваивается процессам ядра, а пользовательские процессы (известные как процессы с разделением времени) получают низший приоритет.

В SVR4 реализованы два основных изменения традиционного алгоритма,

1. Добавлено вытесняющее планирование на основе статических приоритетов;

в систему введено множество из 160 уровней приоритетов, разделенных на три класса.

2. Внесены точки вытеснения. Поскольку базовое ядро не вытесняемо, его выполнение может быть разделено на небольшие части, выполняемые до завершения без прерывания. В промежутках между выполнением этих фрагментов размещены точки вытеснения, в которых ядро может быть безопасно прервано и в которых может начаться выполнение нового процесса. Точка вытеснения может быть определена как область кода, где все структуры данных ядра либо обновлены и согласованы, либо заблокированы при помощи семафора.

На рис. 10.10 показаны 160 уровней приоритетов, определенные в SVR4. Каждый процесс принадлежит одному из трех классов приоритетов и получает свой уровень приоритета в пределах данного класса. Вот краткое описание каждого класса приоритетов.

• Реального времени (159—100). Процессы этих уровней приоритета гарантированно выбираются для выполнения прежде любых процессов ядра и процессов с разделением времени. Кроме того, процессы реального времени могут использовать точки вытеснения для прерывания выполнения процессов ядра и пользовательских процессов.

• Ядра (99—60). Процессы с этими уровнями приоритета гарантированно выбираются для выполнения прежде всех процессов с разделением времени, но уступают процессам реального времени.

• Разделения времени (59—0). Процессы с низшим приоритетом, принадлежащие пользовательским приложениям (кроме приложений реального времени).

На рис. 10.11 показано, как реализовано планирование в SVR4. С каждым уровнем приоритета связана своя очередь, и процессы одного уровня приоритета планируются с использованием круговой стратегии. Битовый вектор dqactmap содержит по одному биту для каждого уровня приоритета; этот бит устанавлива­ется, если соответствующая данному приоритету очередь не пуста. Когда выполняющийся процесс блокируется или вытесняется, диспетчер обращается к вектору dqactmap и запускает готовый к выполнению процесс из непустой очереди с наивысшим приоритетом. Кроме того, по достижении точки вытеснения ядро проверяет состояние флага kprunrun. Если данный флаг установлен, это означает, что в состоянии готовности имеется как минимум один процесс реального времени, и в этом случае ядро вытесняет текущий процесс (если его приоритет ниже, чем у готового к выполнению процесса реального времени с наивысшим приоритетом).

Приоритет процесса в классе разделяемого времени является величиной переменной. Планировщик снижает приоритет процесса всякий раз при использовании им очередного кванта времени и повышает — при блокировке процесса в ожидании некоторого события или ресурса. Квант времени, выделяемый процессу с разделением времени, зависит от его приоритета и изменяется от 100 ms для приоритета 0 до , 10 ms для приоритета 50. Для сравнения — каждый процесс реального времени имеет фиксированный приоритет и фиксированный квант времени.