Spec-Zone.ru › Ada 2005
Справочное руководство по Ada 2005

D.2.6 Распределение задач по принципу наименьшего срока

Срок выполнения задачи указывает на срочность задачи; он представляет точку на идеальной временной шкале. Срок выполнения может повлиять на распределение ресурсов для задачи.
Этот пункт определяет пакет для представления срока выполнения задачи и политику распределения, определяющую распределение задач по принципу наименьшего срока (EDF). Определён пragma для назначения начального срока выполнения задаче.

Синтаксис

Форма pragma Relative_Deadline имеет следующий вид:
pragma Relative_Deadline (relative_deadline_выражение);

Правила разрешения имен

Ожидаемый тип для relative_deadline_выражение — Real_Time.Time_Span.

Правила допустимости

Пragma Relative_Deadline разрешается только непосредственно внутри task_definition или в declarative_part subprogram_body. В данном конструкте должно присутствовать не более одного такого pragma.

Статическая семантика

Идентификатор policy_идентификатор EDF_Across_Priorities — это политика распределения задач.
Существует следующий пакет библиотеки, определённый языком:
with Ada.Real_Time;
with Ada.Task_Identification;
package Ada.Dispatching.EDF is
subtype Deadline is Ada.Real_Time.Time;
Default_Deadline : constant Deadline :=
Ada.Real_Time.Time_Last;
procedure Set_Deadline (D : in Deadline;
T : in Ada.Task_Identification.Task_Id :=
Ada.Task_Identification.Current_Task);
procedure Delay_Until_And_Set_Deadline (
Delay_Until_Time : in Ada.Real_Time.Time;
Deadline_Offset : in Ada.Real_Time.Time_Span);
function Get_Deadline (T : Ada.Task_Identification.Task_Id :=
Ada.Task_Identification.Current_Task) return Deadline;
end Ada.Dispatching.EDF;

Правила после компиляции

Если для раздела задана политика EDF_Across_Priorities, то политика Ceiling_Locking (см. D.3) также должна быть задана для раздела.
Если политика EDF_Across_Priorities появляется в pragma Priority_Specific_Dispatching (см. D.2.2) в разделе, то политика Ceiling_Locking (см. D.3) также должна быть задана для раздела.

Динамическая семантика

Пragma Relative_Deadline не имеет эффекта, если оно находится в declarative_part subprogram_body подпрограммы, отличной от основной.
Начальный абсолютный срок выполнения задачи, содержащей pragma Relative_Deadline, равен значению Real_Time.Clock + relative_deadline_выражение, где вызов Real_Time.Clock выполняется между созданием задачи и началом её активации. Если нет pragma Relative_Deadline, то начальный абсолютный срок выполнения задачи — значение Default_Deadline. Задача среды также получает начальный срок выполнения по этому правилу.
Процедура Set_Deadline изменяет абсолютный срок выполнения задачи на D. Функция Get_Deadline возвращает абсолютный срок выполнения задачи.
Процедура Delay_Until_And_Set_Deadline приостанавливает задачу-вызывающую до времени Delay_Until_Time. Когда задача снова становится готов к выполнению, у неё будет срок выполнения Delay_Until_Time + Deadline_Offset.
В системе с одним процессором установка нового срока выполнения задачи происходит немедленно в первую точку вне выполнения защищённого действия. Если задача находится в очереди готовности, она удаляется и повторно вводится в очередь готовности, определяемую правилами, определёнными ниже.
Когда для диапазона приоритетов Low..High задано EDF_Across_Priorities, все очереди готовности в этом диапазоне упорядочиваются по срокам выполнения. Задача в начале очереди — та, у которой наименьший срок выполнения.
Точка распределения задач для текущей запущенной задачи T, к которой применяется политика EDF_Across_Priorities:
  • при изменении срока выполнения T;
  • если в очереди готовности для активного приоритета T есть задача со сроком выполнения раньше, чем у T; или
  • если в очереди готовности для этого процессора есть непустая очередь с более высоким приоритетом, чем активный приоритет выполняющейся задачи.
В этих случаях текущая выполняющаяся задача считается прерванной и возвращается в очередь готовности для её активного приоритета.
Для задачи T, к которой применяется политика EDF_Across_Priorities, базовый приоритет не является источником наследования приоритета; активный приоритет при первой активации или в то время, когда она блокируется, определяется как максимальное значение из следующих:
  • наименьшего приоритета в диапазоне, заданном как EDF_Across_Priorities, который включает базовый приоритет T;
  • приоритетов, если таковые имеются, которые в настоящее время унаследованы T;
  • наивысшего приоритета P, если таковой имеется, меньшего, чем базовый приоритет T, такого, что одна или несколько задач выполняются в защищённом объекте с приоритетом потолка P, и задача T имеет более ранний срок выполнения, чем все такие задачи.
Когда задача T впервые активируется или становится разблокированной, она добавляется в очередь готовности, соответствующую этому активному приоритету. До тех пор, пока она снова не заблокирована, активный приоритет T остаётся не меньше этого значения; он превысит это значение только во время унаследованного более высокого приоритета.
Когда установка базового приоритета готовящейся задачи вступает в силу, и новый приоритет находится в диапазоне, определённом как EDF_Across_Priorities, задача добавляется в очередь готовности, соответствующую её новому активному приоритету, как определено выше.
Для всех операций, определённых в Dispatching.EDF, Tasking_Error поднимается, если задача, идентифицируемая T, завершена. Program_Error поднимается, если значение T равно Null_Task_Id.

Ограниченные (временно́й сложности) ошибки

Если для диапазона приоритетов Low..High задано EDF_Across_Priorities, то объявление защищённого объекта с приоритетом потолка Low или присваивание значения Low атрибуту 'Priority — это ошибка. В любом случае поднимается либо Program_Error, либо потолок защищённого объекта присваивается значение Low+1.

Ошибочное выполнение

Если значение Task_Id передаётся в качестве параметра любому из подпрограмм этого пакета, и соответствующий объект задачи больше не существует, то выполнение программы ошибочно.

Требования к документации

В многопроцессорных системах реализация должна документировать любые условия, которые приводят к задержке завершения установки срока выполнения задачи позже, чем это определено для однопроцессорной системы.
ПРИМЕЧАНИЯ
18 Если два смежных диапазона приоритетов, A..B и B+1..C, заданы с политикой EDF_Across_Priorities, то это не эквивалентно заданию этой политики для единственного диапазона A..C.
19 Вышеуказанные правила реализуют протокол прерывания на уровне прерывания (также называемый протоколом политики ресурса стека) для совместного использования ресурсов при распределении задач по принципу наименьшего срока. Уровень прерывания для задачи обозначается её базовым приоритетом. Определение уровня прерывания потолка для защищённого объекта следует существующим правилам блокировки потолка.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API