Руководство по Ada (Ada 2022)
Точность задержки
В этом подпункте приводятся требования к производительности для оператора_задержки. Правила применяются как к оператору_задержки_относительно, так и к оператору_задержки_до. Аналогично, они одинаково применяются к простому оператору_задержки и к оператору, который появляется в альтернативе_задержки.
Динамическая семантика
Эффект оператора_задержки для Real_Time.Time определяется в терминах Real_Time.Clock:
- Если C1 – значение Clock, прочитанное перед выполнением задачей оператора_задержки_относительно с продолжительностью D, и C2 – значение Clock, прочитанное после возобновления выполнения задачи после этого оператора_задержки, то C2 – C1 >= D.
- Если C – значение Clock, прочитанное после возобновления выполнения задачи после оператора_задержки_до со значением Real_Time.Time T, то C >= T.
Простой оператор_задержки с отрицательным или нулевым значением времени истечения не приводит к блокировке вызывающей задачи; тем не менее, это потенциально блокирующая операция (см. 9.5.1).
Когда оператор_задержки появляется в альтернативе_задержки вызова_входа_с_временным_ограничением, выбор вызова входа выполняется независимо от указанного времени истечения. Когда оператор_задержки появляется в альтернативе_выбора, и вызов помещен в очередь одного из открытых входов, выбор этого вызова входа выполняется независимо от значения выражения задержки.
Требования к документации
Реализация должна документировать минимальное значение выражения задержки оператора_задержки_относительно, которое приводит к фактическому блокированию задачи.
Реализация должна документировать минимальную разницу между значением выражения задержки оператора_задержки_до и значением Real_Time.Clock, которая приводит к фактическому блокированию задачи.
Метрики
Реализация должна документировать следующие метрики:
- Верхняя граница времени выполнения, в тактах процессора, оператора_задержки_относительно, значение выражения задержки которого меньше или равно нулю.
- Верхняя граница времени выполнения, в тактах процессора, оператора_задержки_до, значение выражения задержки которого меньше или равно значению Real_Time.Clock в момент выполнения оператора. Аналогично для Calendar.Clock.
- Верхняя граница опоздания оператора_задержки_относительно для положительного значения выражения задержки в ситуации, когда задача имеет достаточный приоритет для прерывания процессора, как только она станет готовой, и может продолжить работу без ожидания других ресурсов выполнения. Верхняя граница выражается как функция от значения выражения задержки. Опоздание получается путем вычитания значения выражения задержки из фактической продолжительности. Фактическая продолжительность измеряется с момента непосредственно перед выполнением задачей оператора_задержки до момента непосредственно после возобновления выполнения задачи после этого оператора.
- Верхняя граница опоздания оператора_задержки_до в ситуации, когда значение запрошенного времени истечения после времени, когда задача начинает выполнение оператора, задача имеет достаточный приоритет для прерывания процессора, как только она станет готовой, и может продолжить работу без ожидания других ресурсов выполнения. Верхняя граница выражается как функция от разницы между запрошенным временем истечения и значением часов в момент начала выполнения оператора. Опоздание оператора_задержки_до получается путем вычитания запрошенного времени истечения из реального времени возобновления выполнения задачи после этого оператора.