Справочник Ada 95
C.3 Поддержка прерываний
Этот пункт определяет модель прерываний аппаратуры, заданную языком, а также механизмы обработки прерываний.
Динамические семантика
Прерывание представляет собой класс событий, обнаруживаемых аппаратным обеспечением или программным обеспечением системы. Говорят, что прерывания происходят. Происшествие прерывания разделяется на генерацию и доставку. Генерация прерывания — это событие в базовом оборудовании или системе, делающее прерывание доступным для программы. Доставка — это действие, вызывающее часть программы в ответ на возникновение прерывания. Между генерацией и доставкой событие прерывания (или прерывание) находится в ожидании. Некоторые или все прерывания могут быть заблокированы. Когда прерывание заблокировано, все возникновения этого прерывания предотвращаются от доставки. Некоторые прерывания зарезервированы. Набор зарезервированных прерываний определяется реализацией. Зарезервированное прерывание — это либо прерывание, для которого не поддерживаются обработчики, определенные пользователем, либо прерывание, для которого уже прикреплен обработчик каким-либо другим способом, определенным реализацией. Программные модули могут быть подключены к незарезервированным прерываниям. При подключении программный модуль считается присоединённым к этому прерыванию. Выполнение этого программного модуля, обработчик прерываний, вызывается при доставке события прерывания.
Пока обработчик присоединён к прерыванию, он вызывается один раз для каждого доставленного события этого прерывания. Во время выполнения обработчика соответствующее прерывание блокируется.
Пока прерывание заблокировано, все события этого прерывания не могут быть доставлены. Остаются ли такие события в ожидании или теряются, определяется реализацией.
Каждое прерывание имеет стандартную обработку, которая определяет реакцию системы на событие этого прерывания, когда не присоединён обработчик, определённый пользователем. Набор возможных стандартных обработок определяется реализацией, как и метод (если он существует) конфигурации стандартных обработок для прерываний.
Прерывание доставляется обработчику (или стандартной обработке), который/ая активен/а для этого прерывания в момент доставки.
Исключение, распространяемое из обработчика, который вызывается прерыванием, не оказывает никакого влияния.
Если политика Ceiling_Locking (см. D.3) действует, обработчик прерывания выполняется с активным приоритетом, который является приоритетом потолка соответствующего защищенного объекта.
Требования к реализации
Реализация должна обеспечить механизм определения минимального размера стека, необходимого для каждого обработчика прерываний, и зарезервировать это место для выполнения обработчика. Этот размер должен вмещать вложенные вызовы обработчика, если система это допускает.
Если аппаратное обеспечение или базовая система содержат ожидающие события прерывания, реализация должна обеспечить последующую доставку этих событий программе.
Если политика Ceiling_Locking не действует, реализация должна предоставить средства для приложения, чтобы указать, должны ли прерывания блокироваться во время защищенных действий.
Требования к документации
Реализация должна документировать следующие пункты:
- 1.
- Для каждого прерывания, какие прерывания заблокированы от доставки, когда выполняется обработчик, присоединённый к этому прерыванию (либо в результате доставки прерывания, либо в результате обычного вызова процедуры соответствующего защищенного объекта).
- 2.
- Прерывания, которые не могут быть заблокированы, и влияние прикрепления обработчиков к таким прерываниям, если это разрешено.
- 3.
- Какой стек выполнения использует обработчик прерываний при выполнении в результате доставки прерывания; если это настраивается, какой механизм для этого используется; как указать, сколько места зарезервировать в этом стеке.
- 4.
- Любая деятельность, специфичная для реализации или оборудования, которая происходит перед тем, как пользовательский обработчик прерываний получит управление (например, чтение регистров устройств, подтверждение устройств).
- 5.
- Любые временные или другие ограничения, накладываемые на выполнение обработчиков прерываний.
- 6.
- Состояние (заблокировано/разблокировано) незарезервированных прерываний при запуске программы; если некоторые прерывания разблокированы, какой механизм программа может использовать для защиты себя до того, как она сможет подключить соответствующие обработчики.
- 7.
- Разрешено ли прерванной задаче возобновить выполнение до возвращения обработчика прерываний.
- 8.
- Обработка событий прерывания, которые генерируются, когда прерывание заблокировано; т. е. сохраняются ли одно или несколько событий для последующей доставки, или все они теряются.
- 9.
- Возникают ли предопределенные или определенные реализацией исключения в результате возникновения любого прерывания, и отображение между аппаратными прерываниями (или ловушками) и предопределенными исключениями.
- 10.
- В многопроцессорной системе правила, определяющие доставку прерывания конкретному процессору.
Разрешения на реализацию
Если базовая система или оборудование не позволяют блокировать прерывания, то блокировка не требуется во время выполнения подпрограмм защищенного объекта, одной из подпрограмм которого является обработчик прерываний.
В многопроцессорной системе с более чем одной подсистемой прерываний, определено реализацией, будут ли (и как) источники прерываний из разных подсистем использовать один и тот же тип Interrupt_ID (см. C.3.2). В частности, значение заблокированного или ожидающего прерывания может относиться только к одному процессору.
Реализации разрешено накладывать временные или другие ограничения на выполнение обработчиков прерываний.
Разрешается поддержка других форм обработчиков, в этом случае должны соблюдаться правила этого подраздела.
Активный приоритет выполнения обработчика прерывания может меняться от одного события того же прерывания к другому.
Рекомендации по реализации
Если политика Ceiling_Locking не действует, реализация должна предоставить средства для приложения, чтобы указать, какие прерывания должны быть заблокированы во время защищенных действий, если базовая система позволяет более тонкое управление блокировкой прерываний.
ПРИМЕЧАНИЯ
1 Стандартная обработка прерывания может заключаться в сохранении прерывания в ожидании или в доставке его в обработчик, определенный реализацией. Примеры действий, которые реализация может выполнить с помощью обработчика, определенного реализацией, включают прерывание раздела, игнорирование (т. е. отбрасывание событий) прерывания или помещение одного или нескольких событий прерывания в очередь для возможной последующей доставки, когда к этому прерыванию прикреплен обработчик, определенный пользователем.
2 Вызов Task_Identification.Current_Task (см. C.7.1) из обработчика прерываний является ошибкой с ограниченным значением.
3 Правило, согласно которому исключение, распространяемое из обработчика прерывания, не имеет никакого эффекта, моделируется по аналогии с правилом об исключениях, распространяемых из тел задач.