Spec-Zone.ru › Ada 95
Справочник Ada 95

D.5 Динамические приоритеты

В данном разделе описано, как можно изменять или запрашивать базовый приоритет задачи во время выполнения программы.

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

Существует следующий определяемый языком библиотечный пакет:
with System;
with Ada.Task_Identification; -- См. C.7.1
package Ada.Dynamic_Priorities is
procedure Set_Priority(Priority : in System.Any_Priority;
T : in Ada.Task_Identification.Task_ID :=
Ada.Task_Identification.Current_Task);
function Get_Priority (T : Ada.Task_Identification.Task_ID :=
Ada.Task_Identification.Current_Task)
return System.Any_Priority;
end Ada.Dynamic_Priorities;

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

Процедура Set_Priority устанавливает базовый приоритет указанной задачи на заданное значение Priority. Set_Priority не оказывает никакого эффекта, если задача завершена.
Функция Get_Priority возвращает текущий базовый приоритет задачи T. Если задача завершена, возникает исключение Tasking_Error.
Если параметр T в процедуре Set_Priority или функции Get_Priority равен Null_Task_ID, возникает исключение Program_Error.
Установка нового базового приоритета задачи происходит как можно быстрее, но не во время выполнения защищённого действия. Эта установка происходит не позднее следующей точки завершения прерывания задачи T (см. 9.8).

Ограниченные (временные) ошибки

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

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

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

Метрики

Реализация должна документировать следующую метрику:
  • Время выполнения вызова Set_Priority в неперерывном случае в циклах процессора. Это измеряется для вызова, который изменяет приоритет готовой задачи, которая не выполняется (которая не может быть вызывающей), где новый базовый приоритет затронутой задачи ниже активного приоритета вызывающей задачи, и затронутая задача не находится в очереди входа и не выполняет защищённую операцию.
ПРИМЕЧАНИЯ
22 Установка базового приоритета задачи влияет на распределение задач. Во-первых, это может изменить активный приоритет задачи. Во-вторых, при стандартной политике планирования задач это всегда приводит к перемещению задачи в конец очереди готовности, соответствующей её активному приоритету, даже если новый базовый приоритет не изменился.
23 При политике очереди приоритетов изменение базового приоритета задачи влияет на ожидающий вызов входа, если задача заблокирована в ожидании вызова. То есть, установка базового приоритета задачи приводит к обновлению приоритета ожидающего вызова входа от этой задачи, удалению вызова и последующей повторной вставке в очередь входа с новым приоритетом (см. D.4), за исключением случаев, когда вызов исходит от triggering_statement asynchronous_select.
24 Эффект двух или более вызовов Set_Priority, выполняемых параллельно для одной и той же задачи, определяется как выполнение этих вызовов в определённом последовательном порядке.
25 Правило, когда возникает исключение Tasking_Error для Set_Priority или Get_Priority, отличается от правила, когда возникает исключение Tasking_Error при вызове входа (см. 9.5.3). В частности, разрешается устанавливать или запрашивать приоритет завершённой или аномальной задачи, при условии, что задача ещё не завершена.
26 Изменение приоритетов набора задач может осуществляться с помощью серии вызовов Set_Priority для каждой задачи по отдельности. Для надёжной работы это должно выполняться в рамках защищённой операции, которая имеет достаточно высокий потолочный приоритет, чтобы гарантировать завершение операции без прерывания ни одной из затронутых задач.


Spec-Zone.ru

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