Справочник по Ada (Ada 2022)
D.6 Прерывание с приоритетом
Этот подпункт определяет требования к скорости завершения прерванного блока.
Динамические семантики
В системе с одним процессором прерванный блок завершается немедленно в первой точке вне выполнения отложенной операции прерывания.
Требования к документации
В многопроцессорной системе реализация должна документировать любые условия, которые могут привести к задержке завершения прерванного блока по сравнению с тем, что указано для однопроцессорной системы.
Метрики
Реализация должна документировать следующие метрики:
- Время выполнения, в тактах процессора, необходимое для того, чтобы оператор abort_statement вызвал завершение прерванной задачи. Это измеряется в ситуации, когда задача T2 прерывает задачу T1 и прерывает T1. У T1 нет кода завершения. T2 должна проверить, что T1 завершена, с помощью атрибута Terminated.
- В многопроцессорной системе верхняя граница в секундах, на которую может быть замедлено завершение прерванной задачи после момента, необходимого для однопроцессорной системы.
- Верхняя граница времени выполнения asynchronous_select в тактах процессора. Это измеряется между точкой сразу перед выполнением задачей T1 защищенной операции Pr.Set, которая делает условие condition entry_barrier Pr.Wait True, и точкой, где задача T2 возобновляет выполнение сразу после вызова входа в Pr.Wait в asynchronous_select. T1 прерывает T2, пока T2 выполняет прерываемую часть, а затем блокирует себя, чтобы T2 могла выполниться. Время выполнения T1 измеряется отдельно и вычитается.
- Верхняя граница времени выполнения asynchronous_select в случае, если асинхронная передача управления не происходит. Это измеряется между точкой сразу перед тем, как задача выполняет asynchronous_select с ненулевой прерываеммой частью, и точкой, где задача продолжает выполнение сразу после неё. Время выполнения прерываеммой части вычитается.
Рекомендации по реализации
Несмотря на то, что abort_statement включен в список потенциально блокирующих операций (см. 9.5.1), рекомендуется реализовать этот оператор таким образом, чтобы задача, выполняющая abort_statement, никогда не блокировалась.
В многопроцессорной системе задержка, связанная с прерыванием задачи на другом процессоре, должна быть ограничена; для достижения этого следует использовать периодическое опросом, если это необходимо.
ПРИМЕЧАНИЕ 1 Прерывание не изменяет активный или базовый приоритет прерванной задачи.
ПРИМЕЧАНИЕ 2 Прерывание не может быть более мгновенным, чем это разрешено правилами откладывания прерывания во время завершения и в защищенных действиях.