Принципы обработки прерываний
Конечно, применяемый в операционных
системах механизм обработки внутренних
и внешних прерываний в основном зависит
от того, какая аппаратная поддержка
обработки прерываний обеспечивается
конкретной аппаратной платформой. К
счастью, к настоящему моменту (и уже
довольно давно) основные производители
компьютеров де-факто пришли к соглашению
о базовых механизмах прерываний.
Суть принятого на сегодня механизма
состоит в том, что каждому возможному
прерыванию процессора (будь то внутреннее
или внешнее прерывание) соответствует
некоторый фиксированный адрес физической
оперативной памяти. В тот момент, когда
процессору разрешается прерваться по
причине наличия внутренней или внешней
заявки на прерывание, происходит
аппаратная передача управления на
ячейку физической оперативной памяти
с соответствующим адресом - обычно адрес
этой ячейки называется "вектором
прерывания" (как правило, заявки на
внутреннее прерывание, т.е. заявки,
поступающие непосредственно от
процессора, удовлетворяются немедленно).
Дело операционной системы - разместить
в соответствующих ячейках оперативной
памяти программный код, обеспечивающий
начальную обработку прерывания и
инициирующий полную обработку.
В основном ОС UNIX придерживается общего
подхода. В векторе прерывания,
соответствующем внешнему прерыванию,
т.е. прерыванию от некоторого внешнего
устройства, содержатся команды,
устанавливающие уровень выполнения
процессора (уровень выполнения определяет,
на какие внешние прерывания процессор
должен реагировать незамедлительно) и
осуществляющие переход на программу
полной обработки прерывания в
соответствующем драйвере устройства.
Для внутреннего прерывания (например,
прерывания по инициативе программы
пользователя, при отсутствии в основной
памяти нужной страницы виртуальной
памяти, при возникновении исключительной
ситуации в программе пользователя и
т.д.) или прерывания от таймера в векторе
прерывания содержится переход на
соответствующую программу ядра ОС UNIX.