19.2. Обработка прерываний
Прерывания обычно обрабатываются модулями операционной системы, так как действия, выполняемые по прерыванию, относятся к управлению общими (разделяемыми) ресурсами компьютера.
Процедуры, вызываемые по прерываниям, обычно называют обработчиками прерываний, или процедурами обслуживания прерываний.
Аппаратные прерывания обрабатываются драйверами соответствующих устройств ввода-вывода (периферийных или внешних устройств).
Исключения обрабатываются специальными модулями ядра операционной системы.
Программные прерывания обрабатываются процедурами операционной системы, обслуживающими системные вызовы.
Кроме этих модулей в операционной системе может находиться так называемый диспетчер прерываний, который координирует работу отдельных обработчиков прерываний.
Механизм прерываний поддерживается аппаратными средствами компьютера и программными средствами операционной системы. Аппаратная поддержка прерываний имеет свои особенности, зависящие от типа процессора и других аппаратных компонентов, передающих сигнал запроса прерывания от внешнего устройства к процессору (таких, как контроллер внешнего устройства, интерфейсы подключения внешних устройств, контроллер прерываний, являющийся посредником между сигналами интерфейса и сигналами процессора). Особенности аппаратной peaлизации прерываний оказывают влияние на средства программной поддержки прерываний, работающие в составе операционной системы.
В идеальной организации системы прерываний каждый источник запроса имеет отдельную линию для передачи запроса на прерывание. Каждому источнику запросов на прерывание присваивается номер от 0 до n.
Все источники прерываний делятся на классы. Каждому классу назначается свой уровень приоритета запроса на прерывание. Внутри класса каждому источнику присваивается свой приоритет. Например, чем меньше номер запроса на прерывание, тем выше приоритет этого прерывания внутри своего класса запросов.
Для каждого запроса на прерывание предусматривается маска прерывания – средство для разрешения или запрета операционной системой запроса на прерывание. Если маска установлена в нуль, то запрос на прерывание размаскирован, т.е., ему разрешены прерывания. Если маска установлена в единицу, то запрос на прерывание замаскирован, т.е., ему запрещены прерывания.
В системе прерываний могут быть также и общие маски прерываний для запросов на прерывание отдельных классов запросов. Если общая маска класса установлена в нуль, то запросы на прерывание для всего класса размаскированы, т.е., для этого класса запросов разрешены прерывания. Если общая маска класса установлена в единицу, то запросы на прерывание для всего класса замаскированы, т.е., для этого класса запросов запрещены прерывания.
При одновременном появлении нескольких запросов на прерывание для обслуживания выбирается запрос с высшим приоритетом. Запросы на прерывание с более низким приоритетом должны ожидать своей очереди на обслуживание.
С каждым источником запросов на прерывание связана определенная программа обслуживания. Начальные адреса всех программ обслуживания запросов на прерывания, как правило, располагаются в таблице в специальной области оперативной памяти. Индексом входа в эту таблицу в таком случае служит номер запроса на прерывание.
Обслуживание запросов прерываний может производиться как по схеме с относительными приоритетами, так и по схеме с абсолютными приоритетами.
Обслуживание запросов прерываний по схеме с относительными приоритетами заключается в том, что при одновременном поступлении запросов прерываний из разных классов выбирается запрос, имеющий высший приоритет. Однако в дальнейшем при обслуживании этого запроса процедура обработки прерывания уже не откладывается (не прерывается) даже в том случае, когда появляются более приоритетные запросы — решение о выборе нового запроса принимается только в момент завершения обслуживания очередного прерывания.
Если же более приоритетным прерываниям разрешается приостанавливать (прерывать) работу процедур обслуживания менее приоритетных прерываний, то это означает, что работает схема приоритезации с абсолютными приоритетами.
Если ядро процессора работает по схеме с абсолютными приоритетами, то оно поддерживает в одном из своих внутренних регистров переменную, фиксирующую уровень приоритета обслуживаемого в данный момент прерывания. При поступлении новых разрешенных запросов на прерывание их приоритет сравнивается с приоритетом обслуживаемого запроса на прерывание, и если приоритет запроса выше, то текущая процедура обработки прерываний прерывается (откладывается), а по завершении обслуживания нового прерывания происходит возврат к прерванной процедуре.
Так как количество линий прерывания ограничено, то одну линию прерывания могут использовать несколько источников. В этом случае при возникновении запроса на прерывание необходимо определить, какое устройство из тех, которые связаны с этой линией прерывания, действительно запросило прерывание. Это достигается вызовом всех обработчиков прерываний для данной линии прерывания, пока один из обработчиков не подтвердит, что прерывание пришло от обслуживаемого им устройства.
Если же с каждой линией прерывания связано только одно устройство, то определение нужной программы обработки прерывания происходит немедленно.
Для каждого источника прерывания в операционной системе предусматривается свой обработчик прерывания.
