Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
11_Прерывания__и_причины_их...doc
Скачиваний:
5
Добавлен:
21.09.2019
Размер:
112.64 Кб
Скачать
  1. Последовательность действий при обработке прерываний Механизм прерываний

При возникновении прерываний ОС выполняет следующую последовательность операций:  1. Запоминает адрес текущей команды из регистров CS:IP в стеке вместе с регистром флагов (состояний).  2. Загружает в CS:IP адрес обработчика прерываний.  3. Обработчик прерываний завершается командой IRET (возврат управления), которая восстанавливает из стека содержимое СS:IP и регистр флагов состояния, структура которого приведена на рисунке 2 

Основная концепция обработки прерываний

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

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

  1. Классы прерываний

Во многих системах прерывания, в зависимости от источника возникновения, делятся на несколько типов. Например, в ОС больших ЭВМ существуют следующие виды прерываний: машинные, программные,  обращение к функциям ОС, внешние, ввода/вывода. Операционные системы персональных ЭВМ группируют прерывания по следующим типам: аппаратные, программные в особой ситуации, программные при обращении к функциям ОС.

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

Аппаратные прерывания мы уже рассмотрели - они вырабатываются устройствами, требующими внимания процессора. В IBM/PC таких прерываний на удивление мало. Во-первых, имеется так называемое немаскируемое прерывание, используемое для сообщения об отказе питания, оно имеет номер 2. Далее, прерывание 8 используется таймером, номер 9 - клавиатурой и 14 - контролером гибких дисков, всего четыре аппаратных прерывания. Имеется также семь зарезервированных номеров прерываний, 6, 7, с 10 по 13 и 15, которые могут быть использованы в дальнейшем, если возникнет необходимость в дополнительных аппаратных прерываниях. Два из этих семи прерываний уже нашли свое назначение, прерывание 12 зарезервировано для адаптера связи, а прерывание 15 - для интерфейса устройства печати.

Логические прерывания формируются самим процессором 8088, когда он встречает какое-либо необычное условие. Таких прерываний предусмотрено четыре. Прерывание 0 возникает при попытке деления на ноль. Прерывание 1 используется для управления пошаговым режимом работы микропроцессора, при котором команды выполняются по одной. Это прерывание выставляется отладчиками для пошагового выполнения программ. Прерывание 3 вырабатывается командой установки "контрольных точек", которая также используется при отладке. Прерывание 4 формируется при возникновении условия переполнения, например, если результат арифметической операции не помещается в регистр. Таким образом, четыре логических прерывания распадаются на две пары: одна для арифметических операций (деление на ноль и переполнение) и вторая для отладки программ (шаговый режим и контрольные точки).

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

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

Программные прерывания используются для вызова всех служебных функций, представляемых обычным пользователям. Эти функции включают все процедуры системы BIOS и ПЗУ и служебные процедуры ДОС. Программные прерывания используются вместо непосредственных адресов по двум причинам. Наиболее важная причина состоит в обеспечении возможности изменения служебных процедур, вызываемых с помощью прерываний. Изменение процедуры обычно приводит к изменению ее размера и размещения в памяти. Если процедура вызывается с помощью прерывания, то использующие ее программы не требуется изменять, когда изменилась процедура.

Другая причина использования программных прерываний для вызова процедур связана с возможностью их замены. Рассмотрим пример. Служебные процедуры для обслуживания дисплея выдают звуковой сигнал с помощью динамика IBM/PC, каждый раз когда выдается код CHR(7). Предположим, что Вам необходимо подавить выдачу звукового сигнала. Для этого можно написать программу, которая будет проверять какие символы выдаются на экран и при появлении кода CHR(7) заменяет его пробелом. После окончания проверки эта программа должна передавать управление обычной процедуре обслуживания дисплея. Фактически, нужно сделать небольшое добавление перед стандартной процедурой обслуживания дисплея. Чтобы задействовать эту программу необходимо заменить вектор прерывания дисплея (прерывание 16) адресом Вашей программы.