Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція№5.docx
Скачиваний:
2
Добавлен:
23.11.2019
Размер:
220.38 Кб
Скачать

Лекція № 5. 04.10.12 Прерывание программы и принципы обработки прерываний в микропроцессорных системах

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

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

Классификация прерываний представлена на рис. 7.1.

Рис. 7.1.  Классификация прерываний

Прерывания делятся на аппаратные и программные.

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

Аппаратные прерывания это события от периферийных устройств(например, нажатия клавиш клавиатуры, движение мыши, сигнал от таймера, сетевой карты или дискового накопителя).

Другими словами, Аппаратные прерывания используются для организации взаимодействия с внешними устройствами.

Запросы аппаратных прерываний поступают на специальные входы микропроцессора.

Данная группа прерываний делится на две подгруппы: внешние прерывания и внутренние прерывания(или события в микропроцессоре – (например, деление на ноль).

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

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

  • при наличии в поле кода не задействованной двоичной комбинации.

  • при делении на нуль.

  • при обнаружении ошибок четности, ошибок в работе различных устройств аппаратуры средствами контроля.

Внешние прерывания возникают по сигналу какого-либо внешнего устройства  и могут произойти в любой произвольный момент, например:

  • Прерывание, которое информирует систему о том, что требуемый сектор диска уже прочитан, его содержимое доступно программе.

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

  • Прерывания по нарушению питания.

  • Нормальное завершение некоторой операции ввода-вывода (нажатие клавиши на клавиатуре).

  • Прерывание по таймеру.

Внешние прерывания подразделяются на два вида: немаскируемые и маскируемые.

Маскируемые прерывания - это прерывания, которые могут быть замаскированы программными средствами компьютера;

Часто при выполнении критических участков программ, для того чтобы гарантировать выполнение определенной последовательности команд целиком, приходится запрещать прерывания –т.е. маскировать (т.е. сделать систему нечувствительной ко всем или отдельным прерываниям). Замаскировать прерывания можно программными средствами компьютера,а именно командой СLI (устанавливается бит маски (I битом) регистра кодов признаков и локальными битами масок разрешения в регистрах управления встроенной периферией), которую нужно поместить в начало критической последовательности команд, а в конце расположить команду STI, разрешающую процессору воспринимать прерывания. Команда СLI запрещает только маскируемые прерывания, немаскируемые всегда обрабатываются процессором.

 Для выполнения требования маскируемого прерывания ЦП 8088 автоматически выполняет сле­дующую последовательность действий:

• генерируется сигнал подтверждения внешнего пре­рывания. Этот сигнал сообщает внешнему устройству о том, что его требование признано;

• считывается код прерывания, поступивший на ин­формационную шину с внешнего устройства;

• содержимое регистра флагов записывается в ячей­ку памяти, адрес которой хранится в текущей вер­шине стека, определяемой регистрами SS и SP;

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

• обнуляется флаг ловушки TF, что делает невоз­можным пошаговый режим;

• в указатель команд IP засылается 16-битовое сло­во, находящееся по физическому адресу (TYPE X 4) и (TYPE X 4)+ 1, где TYPE  -  код типа прерывания;

• в регистр сегмента команд CS засылается 16-бито­вое слово, находящееся в ячейках памяти с физиче­ским адресом (TYPE X 4)+ 2 и (TYPE X 4)+ 3.

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

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

Это внешние преры­вания, поступающие в микропроцессор по линии NMI. Обычно ими являются прерывания, сигнализирующие ЦП о внешних событиях особой важности (носящих катастрофический характер), таких, как отключение питания, сбой памяти и т. п. Немаскируемые прерыва­ния признаются микропроцессором всегда независимо от состояния флага прерываний. Таким образом, не­маскируемые прерывания имеют более высокий при­оритет по сравнению с маскируемыми. Им присвоен тип 2. Микропроцессор в ответ на требование нема­скируемого прерывания выполняет следующую после­довательность операций:

• содержимое регистра флагов записывается в ячей­ку памяти (адрес которой хранится в текущей верши­не стека), определяемую регистрами SS и SP;

• обнуляется флаг прерываний IF, что запрещает вы­полнение всех маскируемых прерываний;

• обнуляется флаг ловушки TF, что делает невоз­можным пошаговый режим;

• в стек загружается содержимое регистра сегмента команд CS;

• в стек загружается содержимое указателя команд IP;

• 16-битовое слово из ячейки с физическим адресом 00008Н записывается в регистр IP;

• 16-битовое слово из ячейки с физическим адресом 0000AH записывается в регистр CS.

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

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

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

Программные прерывания выполняются по команде INT хх.

Программные прерывания делятся на следующие типы.

Нарушение (отказ) - особый случай, который микропроцессор может обнаружить до возникновения фактической ошибки (например, отсутствие страницы в оперативной памяти); после обработки нарушения программа выполняется с рестарта команды, приведшей к нарушению. Отказы, использующиеся в системе виртуальной памяти, позволяют, например, подкачать с диска в оперативную память затребованную страницу или сегмент.

Ловушка (trap) — особый случай, которое обнаруживается и обслуживается после выполнения инструкции, его вызывающей. (например, наличие в программе команды INT n или установленный флаг TF врегистре флагов). После обслуживания этого исключения управление возвращается на инструкцию, следующую за вызвавшей ловушку.

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

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

Программные прерывания являются частным случаем Внутренние прерывания

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

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

В персональном компьютере фирмы IBM програм­мные прерывания используются для реализации воз­можностей, предоставляемых системным программным обеспечением Basic I/O. Так, например, команда INT 16Н может быть использована для чтения символа из буфера клавишного пульта компьютера.

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

Работа системы прерываний при различнойглубине прерываний ( n ) представлена на рис. 14.2. Здесь предполагается, что с увеличением номера запроса прерыванияувеличивается его приоритет.

Рис. 14.2.  Работа системы прерываний при различной глубине прерываний

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

Структура контроллера прерываний

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

Схема на рис.6.1 иллюстрирует взаимодействие процессора и контроллера прерываний при обработке группы внешних запросов.

Рис. 6.1. Структура контроллера прерываний и его взаимодействие с процессором

Контроллеры прерываний являются сложными устройствами; в их структуре можно выделить четыре основных блока:

  • фиксации запросов;

  • разрешения запросов;

  • анализа приоритета запросов;

  • схема управления.

Блок фиксации запросов выполнен на основе регистра фиксации запросов прерываний (РФЗ) и служит для фиксации асинхронных сигналов запросов от внешних устройств.

Блок разрешения запросов предназначен для выборки из поступивших сигналов тех запросов, которые наиболее важны для обработки на конкретном этапе реализации основных алгоритмов. Основу блока составляет регистр разрешения прерываний(РРП). В этот регистр можно записать программным путем двоичный код, который будет определять набор запросов, разрешенный для обработки в данный момент. Пусть, например, в РРП контроллера прерываний, имеющего восемь входов, записан код 01100010. Это означает, что в данный момент разрешены прерывания по входам 1, 5 и 6 (считая с нуля, справа налево). Простейшая структура блока разрешения запросов показана на рис. 6.2.

Рис. 6.2. Схема построения блока фиксации и анализа запросов прерываний

Код, записываемый в РРП, принято называть маской прерываний, так как нулевые биты в этом коде запрещают (маскируют) обработку определенных запросов.

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

Код, определяющий шкалу приоритетов, записывают в регистр приоритетов прерываний (РПП)программным путем. Как правило, контроллеры прерываний имеют встроенную аппаратную шкалу, согласно которой вход с меньшим номером имеет наивысший приоритет. Поэтому запись кода в РПП, по сути, изменяет стандартную аппаратную шкалу.

Как видно из рис. 6.1, процессор также имеет встроенный блок разрешения прерывания и проверки приоритетности. Данный блок служит для согласования внешнего запроса INT и внутренних и программных запросов при их одновременном поступлении.

Взаимодействие контроллера прерываний и процессора

Рассмотрим последовательность действий, реализуемых контроллером прерываний и процессором при обработке внешних запросов прерываний. Контроллер автоматически осуществляет фиксацию внешних сигналов запросов, поступающих по входам   , их фильтрацию на основе маски прерываний и поиск приоритетного из активных разрешенных запросов. В случае обнаружения такого запроса контроллер выдает в процессор специальный сигнал INT – сигнал запроса на прерывание для процессора (соответствующий вход процессора обычно называется тоже INT).

Если процессор может обработать сигнал по входу INT (что определяется программной настройкой в самом процессоре), то он выдает на контроллер прерываний ответный сигнал INTA–подтверждение прерывания.

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

Дальнейшие действия процессора при переходе на процедуру обработки прерывания жестко определяются его аппаратной структурой. В современных процессорах реализован один из двух принципов перехода на процедуру обработки: векторный переход и векторно-программный переход.

Векторный переход на процедуру обработки прерывания

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

Адрес AdrN, по которому находится в памяти конкретный элемент таблицы, определяется соотношением AdrN = k´ N, где k - размер элемента таблицы в байтах (4 байта), зависящий от типа процессора, N - условный номер прерывания. Пример таблицыпредставлен на рис.

Рис.  Структура таблицы векторов прерываний

Прерыванию с номером 0 соответствует адрес 0000:0000, прерыванию с номером 1 - 0000:0004 и т.д. Адрес такой состоит из пары 2-байтовых слов, поэтому каждый из векторов занимает четыре байта.

Можно просмотреть таблицу векторов прерываний в компьютере, если воспользоваться программой DEBUG. Используйте команду D для вывода содержимого начала памяти: D 0:0. Программа DEBUG покажет вам первые 128 байтов или 32 вектора, которые могут иметь вид наподобие следующего:

0000:0000 E8 4E 9A 01 00 00 00 00-C3 E2 00 F0 00 00 00 00

0000:0010 F0 01 70 00 54 FF 00 F0-05 18 00 F0 05 18 00 F0

0000:0020 2C 08 51 17 D0 0A 51 17-AD 08 54 08 E8 05 01 2F

0000:0030 FA 05 01 2F 05 18 00 F0-57 EF 00 F0 F0 01 70 00

0000:0040 90 13 C7 13 4D F8 00 F0-41 F8 00 F0 3E 0A 51 17

0000:0050 5C 00 B7 25 59 F8 00 F0-E2 0A 51 17 9C 00 B7 25

0000:0060 00 00 00 F6 8E 00 DE 09-6E FE 00 F0 F2 00 7B 09

0000:0070 27 08 51 17 A4 F0 00 F0-22 05 00 00 00 00 00 F0

Векторы хранятся как «слова наоборот»: сначала смещение, а потом сегмент. Например, первые четыре байта, которые программа DEBUG показала выше (E8 4E 9A 01) можно преобразовать в сегментированный адрес 019A:4EE8.

Можно встретить три вида адресов в таблице векторов. Это могут быть адреса, указывающие на ROM-BIOS, которые можно идентифицировать шестнадцатеричной цифрой F, которая предшествует номеру сегмента. Это могут быть адреса, которые указывают на главную память (как в примере: 019A:4EE8). Эти адреса могут указывать на подпрограммы ДОС или на резидентную программу (например, SideKick или Prokey), либо они могут указывать на саму программу DEBUG (поскольку DEBUG должна временно управлять прерыванием). Также векторы могут состоять из одних нулей, когда прерывание с данным номером не обрабатывается в текущий момент.

Инициализация таблицы происходит частично BIOS после тестирования аппаратуры и перед началом загрузки операционной системой, частично при загрузке операционной системы.

Ниже приведено назначение некоторых векторов:

Описание

0

Ошибка деления. Вызывается автоматически после выполнения команд DIV или IDIV, если в результате деления происходит переполнение (например, при делении на 0).

2

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

5

Печать копии экрана. Генерируется при нажатии на клавиатуре клавиши PrtScr. Обычно используется для печати образа экрана.

8

IRQ0 - прерывание интервального таймера, возникает 18,2 раза в секунду.

9

IRQ1 - прерывание от клавиатуры. Генерируется при нажатии и при отжатии клавиши. Используется для чтения данных от клавиатуры.

A

IRQ2 - используется для каскадирования аппаратных прерываний в машинах класса AT

77

IRQ15 - зарезервировано.