Spec-Zone.ru › Ada 2012
Руководство по Ada 2012

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

Срок выполнения задачи указывает на ее срочность; он представляет точку на идеальной временной оси. Срок выполнения может влиять на распределение ресурсов для задачи.
Этот подраздел определяет пакет для представления срока выполнения задачи и политику распределения, которая определяет распределение по принципу наименьшего срока выполнения (EDF). Определен аспект для назначения начального срока выполнения задаче.
Абзацы с 3 по 6 были перемещены в Приложение J, «Устаревшие возможности».

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

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;
Для типа задачи (включая анонимный тип single_task_declaration) или подпрограммы может быть указан следующий аспект представления, определённый языком:
Relative_Deadline

Аспект Relative_Deadline — это выражение, тип которого должен быть Real_Time.Time_Span.

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

Аспект Relative_Deadline не должен быть указан для типа интерфейса задачи.

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

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

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

Аспект Relative_Deadline не имеет эффекта, если он указан для подпрограммы, отличной от главной подпрограммы.
Начальный абсолютный срок выполнения задачи, для которой указан аспект Relative_Deadline, равен значению Real_Time.Clock + выражение, являющемуся значением аспекта, где это выражение в целом, включая вызов Real_Time.Clock, вычисляется между созданием задачи и началом ее активации. Если аспект Relative_Deadline не указан, то начальный абсолютный срок выполнения задачи — значение Default_Deadline. Задача среды также получает начальный срок выполнения по этому правилу, используя значение аспекта Relative_Deadline главной подпрограммы (если таковой имеется).
Процедура Set_Deadline изменяет абсолютный срок выполнения задачи на D. Функция Get_Deadline возвращает абсолютный срок выполнения задачи.
Процедура Delay_Until_And_Set_Deadline задерживает вызывающую задачу до времени Delay_Until_Time. Когда задача снова становится готовящейся, ее срок выполнения будет Delay_Until_Time + Deadline_Offset.
В системе с одним процессором установка срока выполнения задачи происходит немедленно в первой точке вне выполнения защищенного действия. Если задача в настоящее время находится в очереди готовности, она удаляется и повторно вводится в очередь готовности, определяемую правилами, определенными ниже.
При указании EDF_Across_Priorities для диапазона приоритетов Low..High все очереди готовности в этом диапазоне упорядочиваются по сроку выполнения. Задача в начале очереди — та, у которой самый ранний срок выполнения.
Точка распределения задач возникает для текущей выполняющейся задачи T, к которой применяется политика EDF_Across_Priorities:
  • при изменении срока выполнения T;
  • есть задача в очереди готовности для активного приоритета T со сроком выполнения раньше, чем срок выполнения T; или
  • есть непустая очередь готовности для этого процессора с более высоким приоритетом, чем активный приоритет выполняющейся задачи.
В этих случаях текущая выполняющаяся задача прерывается и возвращается в очередь готовности для ее активного приоритета.
Для задачи T, к которой применяется политика EDF_Across_Priorities, базовый приоритет не является источником наследования приоритета; активный приоритет при первом активации или в момент блокировки определяется как максимальное значение из следующего:
  • наименьший приоритет в диапазоне, указанном как EDF_Across_Priorities, который включает базовый приоритет T;
  • приоритеты, если таковые имеются, которые в данный момент наследуются T;
  • наивысший приоритет P, если таковой имеется, меньший, чем базовый приоритет T, такой, что одна или несколько задач выполняются в защищенном объекте с приоритетом блокировки P и задача T имеет более ранний срок выполнения, чем все такие задачи; и далее T имеет более ранний срок выполнения, чем все другие задачи в очередях готовности с приоритетами в заданном диапазоне EDF_Across_Priorities, которые строго меньше P.
Когда задача 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