Мегаобучалка Главная | О нас | Обратная связь  


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




СИСТЕМА ПРЕРЫВАНИЙ

 

Принципы организации системы прерываний

Организация IBM PC XT/AT и совместимых с ними РС, реализованных на базе МП Intel 80x86, основывается на открытой архитектуре, в основу которой положен принцип развитой иерархической системы прерываний базового микропроцессора. Это качество позволяет обеспечить гибкий механизм доступа к ресурсам РС системных и пользовательских программ. В системах, построенных на базе Intel 80x86, прерывания могут генерироваться собственно микропроцессором, аппаратурой, входящей в состав РС, а также программой.

На рис. 7.1 изображена общая структура системы прерываний PC/AT.

 
 

Рис. 7.1. Общая структура системы прерываний PC/AT

 

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

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



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

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

Прерывания передают управление в новое место программы, определяемое из таблицы векторов прерываний. Старый адрес программы (CS:IP) и состояние машины (флажки) сохраняются в стеке для создания возможности возобновления программы.

 

Аппаратные прерывания

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

Что касается организации аппаратных прерываний в архитектуре IBM PC/AT, то они разбиты на два подкласса с точки зрения возможности программного маскирования запроса на прерывание непосредственно в микропроцессоре: маскируемые и немаскируемые. При этом предусматривается шестнадцать линий подключения внешних маскируемых источников прерываний, обозначаемых IRQ0-IRQ15. Они распределены между двумя контроллерами прерываний, объединенных в подсистему. Одна из линий служит для каскадирования контроллеров и никаких других системных функций выполнять не может. Выход подсистемы контроллеров прерываний соединен со входом INTR микропроцессора.

Запросы немаскируемых прерываний поступают на специальный вход NMI микропроцессора и имеют высший по отношению к маскируемым прерываниям приоритет обслуживания. Следует помнить, что условия запроса немаскируемого прерывания (ошибки паритета основной и дополнительных подсистем оперативной памяти) могут маскироваться при помощи системного порта 70h.

Уровни маскируемых прерываний IBM PC/АТ распределяются по приоритету от IRQ0 (высший) до IRQ7 (низший).

Ниже приведен список аппаратных прерываний, расположенных в порядке убывания приоритета обслуживания в базовой конфигурации PC/AT.

 
 

Примечание. Уровень IRQ9 обеспечивает потенциальную возможность использовать прерывание от видеоадаптера для ускорения выполнения операции перемещения изображения (скроллинг) и обеспечивает совместимость для этой операции по уровню IRQ2 в PC/XT.

 

Для разрешения приоритетных конфликтов и управления маскированием в IBM PC/АТ используется программируемый контроллер прерываний (PIC) 8259А. Процессор 8088 может обрабатывать одновременно только одно прерывание, поэтому PIC 8259 оценивает каждый запрос и "решает", следует ли передавать прерывание на процессор. Если PIC 8259 получает запрос более высокого приоритета, выполняемая сервисная программа может быть прервана. В базовой конфигурации PC/АТ системный таймер может прервать работу дискового контроллера, но не наоборот.

Когда имеется запрос прерывания и прерывания разрешены, 80286/80386 входит в машинный цикл подтверждения прерывания. Машинный цикл подтверждения прерывания "проталкивает" регистр флажков в стек (аналогично команде PUSHF). Затем сбрасывается флажок IF, запрещающий прерывания. После этого в стек "проталкивается" содержимое регистра кодового сегмента (CS) и указателя команды (IP). (Таким образом, стек сохраняет состояние флажков и местоположение точки возврата к программе после прерывания, которые затем используются при возвращении из программы-обработчика). 8259A готов передать управление для выполнения обработки прерывания соответствующей сервисной программе. Это выполняется в течение последовательности из двух импульсов INTA, выдаваемых процессором 80286/80386. Первый импульс INTA используется только для извещения 8259A об удовлетворенном запросе и позволяет подготовиться соответствующему контроллеру к передаче необходимой информации. Второй импульс INTA заставляет 8259A поместить на шину Х байт указателя типа прерывания. Этот байт не используется в качестве прямого адреса таблицы векторов прерываний, а относится к одному из 256 "типов" прерываний, поддерживаемых 80286/80386.

Когда 80286/80386 получает байт указателя типа прерывания от 8259A, его значение умножается на четыре, чтобы получить адрес входа в таблицу прерываний. Например, если байт указателя типа прерывания указывает тип 128 (80H), то соответствующий адрес, выдаваемый 80286/80386, составляет 4 ´ 80H = 200H. После этого выполнение программы направляется к сервисной программе, адрес которой задан кодовым сегментом и указателем команды для типа 128 по адресу 200H в таблице векторов прерываний.

 

Приоритет прерываний

Когда одновременно приходят запросы на выполнение нескольких прерываний, они обслуживаются в строго определенной последовательности, приведенной в табл. 7.1 для МП 80286 и в табл. 7.2 для МП 80386. Выполнение прерывания включает в себя сохранение в стеке флажков, адреса возврата (CS:IP) и настройку CS:IP на первую команду программы обработки прерывания. Если в это время произойдет разрешение другого прерывания, оно будет выполнено перед тем, как начнет выполняться первая команда программы обработки текущего прерывания. Следовательно, в этом случае последнее прерывание будет обслужено первым.

 

Табл. 7.1. Приоритет обработки внутренних прерываний в МП 80286

Приоритет Класс прерывания или исключительной ситуации
Исключительная ситуация из-за ошибки в команде
Прерывание пошагового режима
NMI
Переполнение сегмента сопроцессора
INTR
Команда INT

 

Табл. 7.2. Приоритет обработки внутренних прерываний в МП 80386

Приоритет Класс прерывания или исключительной ситуации
Исключительная ситуация из-за ошибки в команде
Ловушки команд INT0, INT n, INT 3
Ловушка отладки в данной команде *
Ошибка отладки в следующей команде *
NMI
INTR

* См. параграф "Прерывание 1 - исключительная ситуация отладки".

 

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

Прерывания передают управление в новое место программы, определяемое из таблицы векторов прерываний. Старый адрес программы (CS:IP) и состояние МП (флажки) сохраняются в стеке для создания возможности возобновления выполнения программы после обработки прерывания.

Для каждого прерывания выделяется свой уникальный номер в пределах 00-FFh. Каждый номер прерывания связан с одним вектором, представляющим собой двойное слово, которое является адресом входа в программу-обработчик, связанную с этим вектором. Векторы прерываний размещаются в таблице, находящейся в оперативной памяти, начиная с адреса 0000:0. Например, вектор для прерывания INT 00h находится в ячейке 0000:0h, а вектор для прерывания INT 01h - в ячейке 0000:4h. Каждая программа обслуживания прерывания ассоциируется с конкретным входом в таблицу векторов прерываний.

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

Прерывания от 0 до 31 зарезервированы для семейства микропроцессоров фирмы Intel, однако это ограничение относится только к защищенному режиму МП. Остальные 224 прерывания могут быть использованы системным программистом. При каждой процедуре прерывания, чтобы указать соответствующий вход в таблицу векторов, микропроцессор выдает 8-разрядный указатель.

В случае исключительных ситуаций этот указатель генерируется самим микропроцессором. Команды INT содержат непосредственно в себе или неявно указатели, которые позволяют иметь доступ ко всем 256 прерываниям. Аппаратные маскируемые прерывания используют 8-разрядные указатели, которые генерируются микропроцессором на основе указателя типа прерывания, получаемого из подсистемы контроллеров прерываний во время последовательности подтверждения прерывания. Немаскируемые аппаратные прерывания используют фиксированное архитектурой микропроцессора определение указателя.

Когда загружается операционная система, она инициализирует векторы, определяющие все ее функции. Пользователь, вызывающий программы BIOS, также может использовать и инициализировать необходимые векторы прерываний. Подробнее см. в разделе " Базовая система ввода-вывода (BIOS)". Вектор прерывания указывает на вход в программу обслуживания прерывания. В реальном режиме вектор - это 4-байтовая последовательность: сегмент кодов + 16-разрядное смещение. В защищенном режиме – это 8-байтовая последовательность, которая помещена в таблицу дескрипторов прерываний.

Все положения относительно прерываний в основном совпадают для МП 80286 и МП 80386. Те незначительные изменения, которые были внесены при переходе на МП 80386, отмечены особо.

В связи с введением страничного режима адресации в защищенном режиме МП 80386 добавляется исключительная ситуация 14.

В табл. 7.3 приведено распределение векторов прерываний для микропроцессоров 80286/80386.

 

Табл. 7.3. Распределение векторов прерываний в архитектуре МП 80286/80386

Функция (тип) Номер К каким командам относится или причина исключительной ситуа- ции Адрес возврата указывает на команду, вызвавшую исключи- тельную ситуацию? Прерывание вырабаты- вается в 8086/8088?
Исключительная ситуация из-за ошибки деления (ошибка) DIV, IDIV Да Да, но CS:IP указывает на команду после DIV или IDIV
Пошаговое прерывание (для МП 80286, ловушка)   Исключительная ситуация отладки (для МП 80386, ловушка/ошибка)     Ко всем     Ко всем Да     Да Да     Да, но только пошаговое прерывание
NMI прерывание (NMI) INT 2 или контакт NMI Нет    
Точка останова прерывания (ловушка) INT 3 Нет Да
Выданная INT0 исключительная ситуация по переполнению (ловушка) INT0 Нет Да
Исключительная ситуация из-за нарушения отведен- ной области в команде BOUND (ловушка) BOUND Да Да
Исключительная ситуация из-за неверного кода опе- рации (ошибка) Любой неопределенный код операции Да Нет, 8086 трактует нераспоз- нанный код операции как NOP
Исключительная ситуация отсутствия сопроцессора (ошибка) ESC или WAIT Да Нет
Для реального режима: исключительная ситуация из-за слишком малой таб- лицы прерываний (ошибка) Для защищенного режима: двойная ошибка (ошибка)     Вектор INT вышел за пределы таблицы   Любая команда, которая может создать исключительную ситуацию Да     Да Нет     Нет
Исключительная ситуация из-за превышения сегмента сопроцессором (аварийное завершение) Превышена граница сегмента Нет Нет, 8086 позволяет сопроцессору вернуться к началу сегмента
Неверный TSS (аварийное завершение) JMP, CALL, IRET, INT Нет Нет
Сегмент отсутствует (ошибка) Сегментный регистр отсутствует в ОП. Команды, работающие с сегментными регистрами Да Нет
Для реального и защищенного режима: ошибка стека (ошибка)   Только для защищенного режима: ошибка стека (ошибка)   Нарушение границ стекового сегмента     Попытка загрузки дес- криптора сегмента SS с Р=0 Да   Да Нет   Нет
Для реального режима: исключительная ситуация нарушения границ сегмента (ошибка)     Для защищенного режима: исключительная ситуация общей защиты (ошибка)   Превышена граница сегмента 0FFFFh или смещение операнда памяти равно 0FFFFh. Сегменты CS, DS, ES, FS, GS. Все случаи нарушения защиты, которые не приводят к другим исключительным ситуациям Да Да Нет, 8086 позво-ляет сопро-цессору вер-нуться к началу сегмента   Нет
Страничная ошибка (только для МП 80386) Ошибка доступа к памяти или выборки кода Да Нет
Резерв, не использовать      
Исключительная ситуация в сопроцессоре (ошибка) 16* ESC или WAIT   Нет
Резерв 17 - 23      
Прерывания, определяемые пользователем (ловушка) 32 - 255 INT n Да Да
           

* В архитектуре PC/AT не реализовано.

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

Программные прерывания в отличие от аппаратных прерываний не привязаны к конкретным аппаратным ресурсам и иногда рассматриваются системными программистами как вызовы подпрограмм. Следует отметить, что концепция программного прерывания значительно "моложе" концепции аппаратного прерывания и возникла в микрокомпьютерах с появлением i8080 и его команды RESTART.

Программные прерывания включают в себя три уровня: BIOS-прерывания, DOS-прерывания и пользовательские прерывания. Одно из главных назначений BIOS-прерываний - обеспечение корректного (с точки зрения совместимости) доступа к аппаратуре со стороны операционной системы и пользовательской программы. Однако из-за недостаточной функциональной полноты и жестких требований к времени реакции программы многие программы манипулируют аппаратурой непосредственно. Такие программы могут быть неработоспособны на некоторых IBM-совместимых компьютерах.

Роль DOS-прерывания заключается в обеспечении доступа пользовательских программ к системным ресурсам. Большинство корректно разработанных программ использует интерфейс DOS-прерываний при работе с системной аппаратурой.

Пользовательские прерывания - это такие прерывания, которые нужны пользователю для создания собственных обработчиков прерываний и не используют никакие из существующих векторов прерываний DOS за исключением официально разрешенных: с INT 60 по INT 67. Иногда для этих целей используют прерывания, зарезервированные для BASIC.

По-видимому, наиболее удачным примером для представления взаимосвязи различных уровней системы прерываний может служить клавиатура PC/AT.

Клавиатуру обслуживают прерывания трех типов: аппаратное прерывание, BIOS-прерывание и DOS-прерывание.

Например: DOS-прерывание (INT 21, функция 01h), выполняющее процедуру считывания символа с клавиатуры и вывод его на какое-либо выходное устройство, будет использовать BIOS-прерывание INT 16 для интерфейса с буфером клавиатуры. Обработчик прерывания INT 16 работает с теми же ячейками памяти, что и аппаратное прерывание от буфера клавиатуры (09h).

Когда нажимается клавиша клавиатуры, вырабатывается прерывание 09h. Обработчик этого прерывания (INT 09) помещает принятый код сканирования символа и его преобразованный в код ASCII образ (исключение составляют управляющие символы) в текущую строку символов клавиатуры в разделяемой буферной области памяти (буфер клавиатуры) объемом в 16 слов; обработчик INT 16 сканирует буферную область и, обнаружив полученную строку, выделяет последний полученный символ вместе с его образом и передает его операционной системе.

 




Читайте также:
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...



©2015-2020 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (650)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.018 сек.)