Справочник Ada 95
D.9 Точность задержки
Данный пункт описывает требования к производительности для delay_statement. Правила применимы как к delay_relative_statement, так и к delay_until_statement. Аналогично, они одинаково применяются к простому delay_statement и к тому, который используется в delay_alternative.
Динамические семантики
Эффект delay_statement для Real_Time.Time определяется в терминах Real_Time.Clock:
- Если C1 — значение Clock, считанное до того, как задача выполняет delay_relative_statement с продолжительностью D, а C2 — значение Clock, считанное после возобновления выполнения задачи после этого delay_statement, то C2 - C1 >= D.
- Если C — значение Clock, считанное после возобновления выполнения задачи после delay_until_statement со значением Real_Time.Time T, то C >= T.
Простой delay_statement с отрицательным или нулевым значением времени окончания не приводит к блокированию вызывающей задачи; тем не менее, это потенциально блокирующая операция (см. 9.5.1).
Когда delay_statement появляется в delay_alternative вызова timed_entry_call, попытка выбора вызова входа предпринимается независимо от указанного времени окончания. Когда delay_statement появляется в selective_accept_alternative, и вызов очередится на одном из открытых входов, выбор этого вызова входа продолжается независимо от значения выражения задержки.
Требования к документации
Реализация должна задокументировать минимальное значение выражения задержки delay_relative_statement, которое приводит к фактическому блокированию задачи.
Реализация должна задокументировать минимальную разницу между значением выражения задержки delay_until_statement и значением Real_Time.Clock, которая приводит к фактическому блокированию задачи.
Метрики
Реализация должна задокументировать следующие метрики:
- Верхняя граница времени выполнения, в циклах процессора, delay_relative_statement, значение выражения задержки которого меньше или равно нулю.
- Верхняя граница времени выполнения, в циклах процессора, delay_until_statement, значение выражения задержки которого меньше или равно значению Real_Time.Clock в момент выполнения оператора. Аналогично для Calendar.Clock.
- Верхняя граница запаздывания delay_relative_statement для положительного значения выражения задержки в ситуации, когда задача имеет достаточный приоритет для прерывания процессора, как только она становится готовой и не должна ждать других ресурсов выполнения. Верхняя граница выражается как функция от значения выражения задержки. Запаздывание получается путем вычитания значения выражения задержки из фактической продолжительности. Фактическая продолжительность измеряется с точки непосредственно перед выполнением задачи delay_statement до точки сразу после возобновления выполнения задачи после этого оператора.
- Верхняя граница запаздывания delay_until_statement в ситуации, когда значение запрошенного времени окончания находится после момента начала выполнения оператором задачи, задача имеет достаточный приоритет для прерывания процессора, как только она становится готовой, и ей не нужно ждать других ресурсов выполнения. Верхняя граница выражается как функция от разницы между запрошенным временем окончания и значением часов в момент начала выполнения оператора. Запаздывание delay_until_statement получается путем вычитания запрошенного времени окончания из реального времени возобновления выполнения задачи после этого оператора.
ПРИМЕЧАНИЯ
32 Время выполнения delay_statement, которое не приводит к блокированию задачи (например, ``delay 0.0;''), представляет интерес в ситуациях, когда задержки используются для достижения произвольного кругового распределения задач среди задач с одинаковым приоритетом.