Справочник Ada 2012
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.
Для многопроцессорной системы, если поддерживается, метрика должна быть представлена в случае, когда нет конфликтов (по ресурсу выполнения) от задач, выполняющихся на других процессорах.