Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Белош_Лекции_4_курс_2010г.doc
Скачиваний:
27
Добавлен:
16.07.2019
Размер:
2.92 Mб
Скачать

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

Подсистема прерываний - это совокупность аппаратных и программных средств, обеспечивающее реакцию на внешнее по отношению к программе событие, это событие возникает случайно и не синхронно с работой программы, кроме того, эти события требуют временного прекращения выполнения основной программы и перехода к подпрограммам, которые умеют реагировать на возникающее событие. В вычислительных системах различают внутренние и внешние прерывания, они так называются потому, что обусловлены внутренним или внешним, по отношению к вычислительной системе, событием. К внутренним событиям обычно относятся переполнение разрядной сетки, появление несуществующего кода команды, попытка деления на 0, внешними событиями считаются следующие: достижение крайнего положения исполнительного механизма, окончание бумаги в принтере. Эти события обычно называют «Аварийными». Для внешних событий существует еще и рабочая группа, к которой можно отнести и следующее событие – обнуление буфера печатного устройства, в данном случае возникает задача при возникновении любого прерывания идентифицировать источник прерывания.

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

  1. Программное определение источника прерывания, путем опроса.

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

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

  1. Использование подсистемы прерывания

В этом случае микропроцессорную систему оснащают дополнительными аппаратными средствами, они должны уметь выполнять следующие функции:

  1. обнаружение запросов на прерывание

  2. идентификация источников прерывания

  3. разрешение конфликтных ситуаций при возникновении нескольких запросов

  4. определение возможности прерывания текущей программы

  5. запоминание состояния прерываемой программы

  6. переход к подпрограмме обслуживающей прерывание

  7. возврат прерванной программе после завершения обслуживания прерывания

1 – функция реализуется обычно следующими средствами:

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

2 – функция идентификации запроса необходима для того, чтобы определить, какое именно устройство выставило запрос на прерывание. В микропроцессорных системах для запросов на прерывание существует 2 типа входов: радиальный или векторный входы. При исользовании радиальных входов каждому такому входу поставлен в соответствие некоторый адрес поля памяти, где расположен указатель начала программы обслуживания прерывания.

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

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

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

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

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

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

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

Одним из механизмов сохранения текущей программы и адреса возврата является применение стека.

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

К шине ввода/вывода микропроцессора подключено n различных устройств ввода/вывода. При необходимости облуживания, эти устройства выдают на линию прерывания Int свой запрос z1, z2, … zn. Микропроцессор в ответ на полученный сигнал запроса zi выставляет сигнал опроса IntA, который может последовательно проходить через все устройства, подключенные к шине. Если некоторое i-ое устройство запрос zi не выставляло, то оно никак не реагирует на сигнал идентификации прерывания IntA, просто пропускает этот сигнал дальше к следующему устройству. Если же сигнал идентификации дошел до устройства, которое выставило запрос, то это устройство сигнал идентификации IntA дальше не пропускает и выдает на шину свой вектор прерывания Vi. Т.о., в этой схеме сразу решаются задачи:

1 – идентификация.

2 – одновременно решается задача идентификации источника прерывания по управляющему слову – вектора прерывания и разрешения конфликтных ситуаций, если возникло больше одного запроса. Здесь получается система приоритетов для внешних устройств, поскольку первым будет обслуживаться то устройство, которое находится ближе к процессору. P1>P2>…>Pn

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