Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование прерываний.doc
Скачиваний:
2
Добавлен:
16.11.2019
Размер:
125.95 Кб
Скачать

Программирование прерываний Механизм прерываний

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

Возможны самые разнообразные прерывания по самым различным причинам. С каждым прерыванием связывают число, называемое номером прерывания. С каждым номером прерывания связывается то или иное событие. Система умеет распознавать, какое прерывание с каким номером произошло и запускает соответствующую этому номеру процедуру-обработчик прерывания.

Программы могут вызывать прерывания с заданным номером. Для этого они используют команду int в разных модификациях. Это так называемые синхронные (программные) прерывания. Программные прерывания являются синхронными, так как вызываются из программы (а она знает, когда вызывает прерывание!).

Программные прерывания удобно использовать для организации доступа к отдельным, общим для всех программ модулям. Например, программные модули операционной системы доступны прикладным программам именно через прерывания, и нет необходимости при вызове этих модулей знать их текущий адрес в памяти. Прикладные программы могут сами устанавливать свои обработчики прерываний для их последующего использования другими или этими же программами. Для этого встраиваемые обработчики прерываний должны быть резидентными в памяти.

Аппаратные прерывания вызываются физическими устройствами и приходят асинхронно по отношению к выполняющейся программе. Эти прерывания информируют систему о событиях, связанных с работой устройств, например о том, что завершилась печать символа на принтере и нужно выдать следующий символ, или о том, что требуемый сектор диска уже прочитан и его содержимое доступно программе.

Некоторые прерывания (первые пять в порядке номеров) зарезервированы для использования самим центральным процессором для особых событий вроде попытки деления на ноль, переполнения и т.п.

Использование прерываний при работе с медленными внешними устройствами позволяет совместить ввод/вывод с обработкой данных в центральном процессоре и в результате повышает общую производительность системы.

Обработчики прерываний могут сами вызывать программные прерывания, например, для получения доступа к сервису BIOS или MS-DOS.

Составление собственных программ обработки прерываний и замена стандартных обработчиков DOS и BIOS является ответственной и сложной работой. Необходимо учитывать все тонкости работы аппаратуры и взаимодействия программного и аппаратного обеспечения. При отладке возможно разрушение операционной системы с непредсказуемыми последствиями, поэтому надо очень внимательно следить за тем, что делает Ваша программа.

Таблица векторов прерываний

Для того чтобы связать адрес обработчика прерывания с номером прерывания, используется таблица векторов прерываний, занимающая первый килобайт оперативной памяти - адресá от 0000:0000 до 0000:03FF. Таблица состоит из 256 четырехбайтовых элементов – FAR-адресов обработчиков прерываний. Эти элементы называются векторами прерываний. В старшем слове вектора прерывания записан адрес сегмента обработчика прерывания, в младшем слове записано смещение.

Расположение векторов прерываний в ОП и их связь с обработчиками прерываний BIOS и MS-DOS:

0 1 2 3

Номера прерываний

Прерыванию с номером 0 соответствует адрес 0000:0000, прерыванию с номером 1 - 0000:0004 и т.д. Для программиста, использующего язык Си, таблицу можно описать следующим образом: