Справочник по Ada (Ada 2022)
D.12 Другие оптимизации и правила детерминизма
Этот подпункт описывает различные требования к улучшению отклика и детерминизма в реальной системе.
Требования к реализации
Если реализация блокирует прерывания (см. C.3) не в результате прямого действия пользователя (например, выполнения защищенного действия), то должна быть верхняя граница для продолжительности этого блокирования.
Реализация должна распознавать защищённые типы без входа. Надстройка для получения ресурса выполнения объекта такого типа (см. 9.5.1) должна быть минимальной. В частности, не должно быть никакой надстройки из-за вычисления entry_barrier условий.
Unchecked_Deallocation должно поддерживаться для завершённых задач, обозначенных типами доступа, и должно иметь эффект освобождения всего хранилища, связанного с задачей. Это включает в себя любое хранилище времени выполнения или кучи, которое было неявно выделено для задачи реализацией.
Требования к документации
Реализация должна документировать верхнюю границу продолжительности блокирования прерываний, вызванного реализацией. Если это различается для разных прерываний или уровней приоритета прерываний, она должна быть задокументирована для каждого случая.
Метрики
Реализация должна документировать следующую метрику:
- Надстройка, связанная с получением взаимно-исключительного доступа к объекту защищенного типа без входа. Это должно измеряться следующим образом:
Для защищенного объекта вида:
protected Замок is
procedure Установить;
function Прочитать return Булево;
private
Флаг : Булево := Ложь;
end Замок;
procedure Установить;
function Прочитать return Булево;
private
Флаг : Булево := Ложь;
end Замок;
protected body Замок is
procedure Установить is
begin
Флаг := Истина;
end Установить;
function Прочитать return Булево
begin
return Флаг;
end Прочитать;
end Замок;
procedure Установить is
begin
Флаг := Истина;
end Установить;
function Прочитать return Булево
begin
return Флаг;
end Прочитать;
end Замок;
Время выполнения, в тактах процессора, вызова Установить. Это должно измеряться между моментом непосредственно перед вызовом и моментом непосредственно после завершения вызова. Функция Прочитать должна быть вызвана позже, чтобы проверить, что Установить был действительно вызван (а не оптимизирован). Вызывающая задача должна иметь достаточно высокий приоритет, чтобы не быть прерванной во время периода измерения. Защищенный объект должен иметь достаточно высокий потолочный приоритет, чтобы позволить задаче вызвать Установить.
Для многопроцессорной системы, если поддерживается, метрика должна быть представлена в случае, когда нет конкуренции (за ресурс выполнения) со стороны задач, выполняемых на других процессорах.