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