Справочник Ada 2012
D.2.1 Модель диспетчеризации задач
Модель диспетчеризации задач определяет планирование задач на основе концептуальных очередей готовности, упорядоченных по приоритетам.
Статическая семантика
Существует следующий определённый языком библиотечный пакет:
package Ada.Dispatching is
pragma Preelaborate(Dispatching);
pragma Preelaborate(Dispatching);
procedure Yield;
Dispatching_Policy_Error : exception;
end Ada.Dispatching;
end Ada.Dispatching;
Dispatching служит родителем других определённых языком библиотечных единиц, связанных с диспетчеризацией задач.
Динамическая семантика
Задача может стать задачей выполнения только если она готова (см. 9) и требуемые ресурсы выполнения этой задачи доступны. Процессоры распределяются между задачами на основе активного приоритета каждой задачи.
Реализация может определять, будет ли в многопроцессорной системе задача, ожидающая доступа к защищённому объекту, занимать свой процессор.
Диспетчеризация задач — это процесс выбора одной готовой задачи для выполнения на процессоре. Выбор выполняется в определённые моменты во время выполнения задачи, называемые точками диспетчеризации задач. Задача достигает точки диспетчеризации задач всякий раз, когда она блокируется и когда она завершается. Другие точки диспетчеризации задач определены в этом приложении для конкретных политик.
Политики диспетчеризации задач определяются с точки зрения концептуальных очередей готовности и состояний задач. Очередь готовности — это упорядоченный список готовых задач. Первая позиция в очереди называется головой очереди, а последняя — хвостом очереди. Задача готов, если она находится в очереди готовности или если она выполняется. Каждый процессор имеет одну очередь готовности для каждого значения приоритета. В любой момент времени каждая очередь готовности процессора содержит точно множество задач того же приоритета, которые готовы к выполнению на этом процессоре, но не выполняются ни на одном процессоре; то есть те задачи, которые готовы, не выполняются ни на одном процессоре и могут быть выполнены с использованием этого процессора и других доступных ресурсов. Задача может находиться в очередях готовности более чем одного процессора.
Каждый процессор также имеет одну задачу выполнения, которая является задачей, которая в данный момент выполняется этим процессором. Всякий раз, когда задача, выполняющаяся на процессоре, достигает точки диспетчеризации задач, она возвращается в одну или несколько очередей готовности; затем для выполнения на этом процессоре выбирается задача (возможно, та же задача). Выбранная задача — это задача, находящаяся в начале очереди готовности с наивысшим непустым приоритетом; затем эта задача удаляется из всех очередей готовности, к которым она принадлежит.
Вызов Yield является точкой диспетчеризации задач. Yield — это потенциально блокирующая операция (см. 9.5.1).
Этот абзац был удалён.
Разрешения реализации
Реализация может определять дополнительные ресурсы как ресурсы выполнения и соответствующие политики их распределения. Такие ресурсы могут оказывать влияние на диспетчеризацию задач.
Реализация может устанавливать определённые ею ограничения на задачи, чей активный приоритет находится в диапазоне Interrupt_Priority.
Для оптимизации реализации может изменить моменты, когда происходит диспетчеризация задач, способом, определённым реализацией. Однако, заявление_ожидания всегда соответствует по крайней мере одной точке диспетчеризации задач.
ПРИМЕЧАНИЯ
7 Раздел 9 описывает обстоятельства, при которых задача становится готовой. Состояние готовности зависит от правил активации и завершения задач, заявлений о задержке и вызовов вхождений.
8 Примером возможного ресурса выполнения, определённого реализацией, является страница физической памяти, которая должна быть загружена определённой страницей виртуальной памяти, прежде чем задача сможет продолжить выполнение.
9 Очереди готовности — это чисто концептуальные структуры; в реализации нет требования, чтобы такие списки физически существовали.
10 Пока задача выполняется, она не находится ни в одной очереди готовности. В любой момент, когда выполняемая на процессоре задача добавляется в очередь готовности, для этого процессора выбирается новая задача для выполнения.
11 В многопроцессорной системе задача может находиться в очередях готовности более чем одного процессора. В крайнем случае, если несколько процессоров используют один и тот же набор готовых задач, содержимое их очередей готовности идентично, и поэтому их можно рассматривать как разделяющую одну очередь готовности, и реализовать это так. Таким образом, модель диспетчеризации охватывает многопроцессорные системы, где диспетчеризация реализуется с помощью одной очереди готовности, а также те, где используются отдельные области диспетчеризации.
12 Приоритет задачи определяется правилами, указанными в данном подразделе, и в D.1, «Приоритеты задач», D.3, «Защитные блокировки по потолку приоритетов» и D.5, «Динамические приоритеты».
13 Установка базового приоритета задачи в результате вызова Set_Priority не всегда происходит немедленно после вызова Set_Priority. Эффект установки базового приоритета задачи откладывается, пока выполняющаяся задача выполняет защищённое действие.