Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

8.3 Программные прерывания. 8.4 Аппаратные прерывания. 8.5 Сходства и различия аппаратных и программных прерываний




8. 3 Программные прерывания

Программные прерывания – это специальные вызовы сервисов операционной системы, драйверов устройств и BIOS. Программное прерывание вызывается специальной командой INT. Команда INT имеет только один операнд – номер прерывания, который указывается в команде в виде числа от 0 до 255. При выполнении команды INT процессор выполняет следующие действия:

1. Записывает в стек значение регистра флагов;

2. Записывает в стек значение регистра CS;

3. Записывает в стек смещение команды, следующей за командой INT;

4. Вычисляет смещение от начала таблицы векторов прерываний по формуле смещение = номер_прерывания * 4;

5. Извлекает из таблицы векторов прерываний вектор прерывания по вычисленному смещению;

6. Заносит в регистр IP значение смещения из вектора прерывания;

7. Заносит в регистр CS значение сегмента из вектора прерывания;

8. Сбрасывает флаг прерывания IF и флаг трассировки TF;

9. Передает управление процедуре обработки прерывания.

С этого момента выполняется процедура обработки прерывания. По завершении процедуры должна вызываться специальная команда возврата из процедуры обработки прерывания IRET. Команда IRET выполняет следующие действия:

1. Извлекает из стека сохраненное в нем значение смещения команды, следующей за командой INT, и записывает его в регистр IP;

2. Извлекает из стека сохраненное в нем значение регистра CS и записывает его в регистр CS;

3. Извлекает из стека сохраненное в нем значение регистра флагов и записывает его в регистр флагов;

4. Передает управление прерванной программе по адресу CS: IP.

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

На рис. 3 показано состояние стека после передачи командой INT управления процедуре обработки прерывания.

 

   
  флаги
  CS
SP® смещение
   
   
   
  .
  .
  .
   
 

 

Рис. 3. Состояние стека после передачи командой INT управления процедуре обработки прерывания

 

 

8. 4 Аппаратные прерывания

Цикл обработки аппаратного прерывания гораздо сложнее. Рассмотрим обработку маскируемых аппаратных прерываний. Все устройства, которые генерируют маскируемые прерывания, подключаются к контроллеру прерываний. Контроллер прерываний при поступлении сигнала прерывания от устройства выполняет следующие действия:

1. Если одновременно поступило несколько сигналов прерываний, то контроллер выбирает то устройство, чей приоритет выше;

2. Контроллер проверяет, замаскировано ли данное прерывание, т. е. запрещено ли прохождение этого сигнала прерывания. Если запрещено, то на этом процесс обработки прерывания завершается;

3. Выдает МП сигнал запроса на обработку прерывания.

Если в регистре флагов установлен флаг IF, то это означает, что маскируемые прерывания разрешены и МП отвечает контроллеру сигналом разрешения обработки прерывания. В ответ на это контроллер прерываний посылает МП номер вектора прерывания. Далее выполняются такие же действия, как и для программных прерываний: МП берет из таблицы векторов прерывания нужный вектор, который он определяет по номеру прерывания, переданного контроллером прерываний, и передает управление по этому вектору на процедуру обработки прерываний. Маскируемые прерывания можно запретить сбросом флага IF командой CLI. В этом случае МП игнорирует запросы от контроллера прерываний. Запретить маскируемое прерывание от конкретного устройства можно путем записи в контроллер прерываний специальной команды. При этом сигнал прерывания от данного устройства не будет обрабатываться контроллером прерывания. Сигналы прерываний от других устройств обрабатываться будут. Сброс флага IF микропроцессором при входе в обработчик прерывания необходим для исключения возможности появления вложенных прерываний – т. е. когда во время выполнения обработчика прерывания возникает еще одно аппаратное прерывание.

После того, как МП ответит контроллеру прерываний на его запрос, контроллер прерываний помечает пришедшее к нему прерывание как обрабатываемое и если во время обработки прерывания контроллеру поступит сигнал прерывания от устройства с более низким или с таким же приоритетом, он его проигнорирует. Чтобы дать контроллеру прерываний знать об окончании обработки прерывания, требуется в конце процедуры обработки аппаратного прерывания разблокировать контроллер, послав ему сигал конца прерывания EOI (End Of Interrupt). Это выполняется путем записи в порт ввода-вывода с номером 20h значения 20h.

 

8. 5 Сходства и различия аппаратных и программных прерываний

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

Различием аппаратных и программных прерываний являются ситуации их возникновения – аппаратные прерывания генерируются устройствами, а программные прерывания вызываются самой программой.

С точки зрения функций, выполняемых обработчиками аппаратных и программных прерываний, обработчики аппаратных прерываний отличаются тем, что помимо контроллера прерываний они работают непосредственно с той аппаратурой, которая вызвала возникновение сигнала прерывания. Обработчики программных прерываний, как правило, с аппаратурой напрямую не работают, а выполняют какую-либо обработку информации.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...