Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_з_1.doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
2.57 Mб
Скачать

6.4.4. Запуск обработчиков прерываний

Обработчик прерывания можно запустить двумя способами. Во-первых, выполнить в прикладной программе команду INT с нужным но­мером прерывания. Она вызывает в процессоре программное прерывание, в результате которого процессор автоматически запустит программу его обработки. Во-вторых, обра­ботчик прерываний может быть вызван в результате реакции процессора на аппаратное прерывание. Оно происходит по инициативе периферийного устройства (асинхронного порта, клавиатуры, таймера и т.д.), которому требуется привлечь внимание центрального процессора. При этом периферийное устройство посылает сигнал программируемому контроллеру прерываний, а тот - центральному процессору.

Самым простым типом прерываний являются программные пре­рывания, представляющие собой особый способ вызова процедур. Программные прерывания инициируются специальной командой вызова процедур INT n и могут использоваться программистом в любом месте программы. Обработчиками программных прерыва­ний в большинстве случаев являются оптимизированные систем­ные процедуры, вызываемые пользовательскими или системны­ми программами для выполнения наиболее часто применяемых операций. Каждому типу прерываний назначается определенный номер из заданного диапазона чисел (для процессоров х86 из ди­апазона 0 - 255). Идентификационный номер прерывания исполь­зуется для индексации таблицы прерываний, которая содержит начальные адреса (векторы прерываний) программ обработчиков. Операнд n, указываемый в команде INT n, определяет тип (но­мер) программного прерывания, а сама команда INT n обеспечи­вает обращение к соответствующей строке таблицы и вызов иско­мого обработчика.

Команды INTn выполняют такие же действия, как и при зап­росе прерывания от внешнего периферийного устройства, но с одним исключением - тип прерывания содержится в команде, а не выдается периферийным устройством. Программные прерыва­ния часто используются для вызовов процедур BIOS (Basis Input/ Output System) и процедур ОС.

BIOS содержит набор программ обработки аппаратных прерываний от периферийных устройств и является связывающим звеном между ОС и внешней периферией. Прерывания ОС реализуют обмены с периферийными устройства­ми на более высоком уровне и опираются на прерывания BIOS.

Внешние аппаратные прерывания тесно связаны с вводом-вы­водом при обменах с прерыванием программы. С помощью аппа­ратных прерываний осуществляется взаимодействие процессора с ПУ. В отличие от программных прерываний, аппаратные прерыва­ния могут возникать в произвольные моменты времени, т.е. асин­хронно по отношению к действиям процессора.

Внутренние прерывания, генерируемые процессором при воз­никновении ошибок или нештатных ситуаций выполнения ко­манд, называют особыми случаями или исключениями (exception). Особый случай - это внутреннее событие, возникающее при не­возможности выполнять следующую команду. Особые случаи пред­видеть невозможно. Их генерируют, например, при нарушении защиты по привилегиям, превышении предела сегмента, деле­нии на нуль и т.п. Коды внутренних прерываний устанавливаются разработчиком МП и не могут быть использованы при назначе­нии внешних прерываний. Для выявления причин возникновения особых случаев, а в некоторых случаях и их устранения используются обработчики особых случаев. Передача управления обработ­чику особого случая осуществляется обычным способом через таб­лицу векторов прерываний. Особые случаи являются немаскируе­мыми, и процессор реагирует на них независимо от состояния флага IF. При наличии особой ситуации процессор прекращает работу текущей программы, обращается к таблице прерываний и по индексу (номеру) особой ситуации находит соответствующий обработчик. Реакция процессора на исключение зависит от усло­вий его возникновения. В соответствии с этими условиями исклю­чения подразделяются на ошибки (fault), ловушки (trap) и ава­рийные завершения (abort).

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

Ловушка - это особый случай, который обнаруживается и об­служивается после выполнения команды, его вызвавшей. По за­вершению обслуживания особого случая типа ловушка процессор возвращает управление команде, следующей за командой, выз­вавшей ловушку. Примером ловушки является команда прерыва­ния при переполнении INTO и программные прерывания, вызы­ваемые командой INT n.

Аварийное завершение - особый случай, который не позво­ляет точно установить команду, его вызвавшую. Аварийное завер­шение является серьезной ошибкой. При ее возникновении про­должение программы невозможно и ее необходимо прекратить. К авариям относятся аппаратные ошибки, нарушения системных таблиц и некоторые другие особые случаи.

В системах с процессором х86 каждый источник прерывания и каждый тип особой ситуации имеет свой идентификационный номер (вектор), с помощью которого определяется адрес обра­ботчика. Немаскируемому прерыванию (по входу NMI) и исклю­чениям выделены векторы от 0 до 31. Часть векторов из этого чис­ла зарезервированы разработчиками процессора для возможного использования в будущем. Векторы маскируемых прерываний оп­ределяются аппаратно, например, с помощью ПКП 8259А. Для аппаратных маскируемых прерываний по входу INTR выделены векторы с номерами от 32 до 255. Программным прерываниям, реализуемым командой INT n, соответствуют векторы с номера­ми от 0 до 255.