Классификация систем прерывания

Идентификация запросов прерывания (определение источников запросов) в системах прерывания может осуществляться двумя основными способами: способом опроса (Polling) и векторным способом.

В связи с этим и системы прерывания могут быть реализованы двух типов:

1. Системы прерывания с опросом источников прерывания (Polling).

2. Векторные системы прерывания.

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

Для упрощения понимания рассмотрим эти режимы по отдельности.

Системы прерывания с опросом – поллинг (polling).

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

Различают две разновидности режима опроса:

а) программный поллинг;

б) аппаратный поллинг.

а) Программный поллинг.

При программном поллинге запросы прерывания опрашиваются программно, так же программно определяется порядок их опроса и их обслуживания. Схема алгоритма реализации программного поллинга приведена на рис ХI.6. Появление самих запросов прерывания фиксируется в специальном регистре, так называемом регистре обслуживаемых запросов прерываний, разряды которого часто именуются «флагами», аналогично разрядам регистра Flags процессора. Регистр обслуживаемых запросов прерываний находится в контроллере прерываний, который, в свою очередь, как уже упоминалось выше, в современных процессорах входит в состав «южного» моста Chipset. Приход запроса прерывания устанавливает соответствующий ему бит этого регистра в состояние 1 (устанавливает «флаг» появления запроса).

Классификация систем прерывания - student2.ru

Рис ХI.6 Блок-схема алгоритма реализации программного поллинга.

б) Аппаратный поллинг.

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

соединения запрашивающих прерывание устройств в виде гирляндной цепи (рис XI.7).

Классификация систем прерывания - student2.ru Классификация систем прерывания - student2.ru

Рис XI.7. Схема реализации аппаратного поллинга.

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

этот сигнал получает устройство 1. Если обслуживание ему не требуется, он пересылает сигнал устройству 2.

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

Векторные системы прерывания.

В случае векторных систем прерывания (основных у современных процессоров) инициатива принадлежит устройству, запрашивающему прерывание. Аналогично аппаратному поллингу, при поступлении в систему хотя бы одного запроса, процессору выставляется сигнал общего прерывания – INTR. Однако, процессор, принудительно проверяет состояние этого сигнала в конце каждого машинного цикла исполнения очередной команды. Если INTR=1, и процессору разрешено прерывание (флаг IF=1), он заканчивает выполнение текущей команды и подтверждает прием запрашиваемого прерывания путем подачи на контроллер прерывания сигнал INTA (Interrupt Acknowledge). Получив сигнал INTA, контроллер выдает процессору код типа прерывания (номер прерывания), по которому процессор определяет логический адрес начала процедуры обслуживания прерывания и, который, обычно, называется вектором прерывания (см. рис ХI.8).

Поскольку полный логический адрес для процессоров i8086/88, а также для всех последующих моделей процессоров семейств Х86, Pentium и Intel Core в реальном режиме работы состоит из четырех байт (два байта – указатель базового адреса сегмента и два байта – смещение в данном сегменте), то вектора прерываний являются 4-х байтовым двоичным словом.

Вектора прерываний в защищенном режиме работы всех современных компьютеров семейств Х86, Pentium, Intel Core 2, 3, 5, 7 имеют размер 8 байт, поскольку они определяют специальные 8-ми байтовые структуры – дескрипторы, из которых находятся начальные физические адреса, соответствующих процедур обслуживания прерываний. И в том и в другом случае всего определено 256 типов прерываний и, следовательно, любое возможное прерывание определяется 8-ми разрядным двоичным кодом типа прерывания.

Классификация систем прерывания - student2.ru Классификация систем прерывания - student2.ru Классификация систем прерывания - student2.ru Классификация систем прерывания - student2.ru Классификация систем прерывания - student2.ru

Рис.ХI.8 Принцип организации векторной системы прерываний процессоров

i8086.

Для процессоров i8086/88 и старших моделей семейства Х86, в реальном режиме работы, все возможные вектора прерываний располагаются в первом килобайте адресного пространства компьютеров. Эта таблица векторов прерываний для процессоров i8086/88 приведена на рис ХI.8.

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

1. Код типа внутреннего прерывания или код типа внешнего маскируемого аппаратного прерывания, суммируемый с константой 8, сдвигаются на 2 разряда влево и определяют адрес вектора прерывания в ОЗУ. Суммирование с константой 8 производится потому, что для всех внешних аппаратных прерываний предусмотрено использование векторов, начиная с восьмого. Вектора, начиная с нулевого до седьмого включительно, зарезервированы под внутренние прерывания. А умножение кода типа прерывания на 4 (его сдвиг на 2 разряда влево) производится потому, что каждый вектор занимает 4 байта адресного пространства и, следовательно, чтобы сформировать адрес n – го вектора прерывания необходимо код n –го типа прерывания умножить на 4.

2. Для того чтобы можно было возвратиться, после выполнения процедуры обслуживания прерывания, к продолжению прерванной программы, в стеке запоминаются: содержимое кодового сегментного регистра CS, указателя инструкций IP, а также содержимое регистра флагов F.

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

4. По новому значению CS и IP передается управление на процедуру обслуживания прерывания, соответствующую полученному запросу прерывания.

5. После окончания обслуживания прерывания, выбирается из стека запомненная информация, и восстанавливаются прежние состояния кодового сегментного регистра CS, указателя инструкций IP и регистра флагов F.

6. Передается управление по адресу, находящемуся в регистре IP.

Наши рекомендации