Система прерывания в мп семейства Х86, страница 3

  2. Прерывания в реальном режиме.

Прерывания в реальном режиме (R-режиме) процессоров семейства Х86 осуществляются, так же как и в процессоре 8086. Сигналы запросов прерывания от внешних устройств поступают на контроллер прерываний, расположенный в современных компьютерах в микросхеме «южного моста» ChipSet на системной плате. Контроллер прерываний осуществляет следующие основные функции:

·  позволяет пользователю маскировать отдельные входы запросов прерываний, т.е. блокировать прохождение от них запросов прерывания на вход системы прерываний процессора;

·  позволяет пользователю присваивать запросам прерывания уровни приоритета их обслуживания, в соответствии с важностью соответствующих периферийных устройств системы, запрашивающих эти прерывания;

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

·  Позволяет пользователю программировать входы запросов прерывания на чувствительность либо к уровню (Levelsensitive), либо к фронту (Edgesensitive)  сигнала запросов прерывания. Запрос прерывания по уровню сигнала означает, что прием контроллером запроса на прерывание определяется обнаружением заданного уровня сигнала на входе запроса. Поэтому, если после окончания обработки соответствующего прерывания, контроллер обнаружит вновь активный уровень сигнала запроса, то им снова выдается процессору общий запрос прерывания INTR. Запрос же прерывания по фронту сигнала означает, что прием контроллером запроса на прерывание фиксируется только в момент появления фронта сигнала (положительного или отрицательного, по определению). Поэтому повторный запрос по этому входу может быть принят только после появления аналогичного фронта сигнала запроса.

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

Запрос немаскируемого прерывания по входу NMI не требует от источника запроса прерывания последующей посылки кода типа, поскольку ему назначен фиксированный код типа прерывания (тип 2). Фиксированные коды типа прерывания имеют также все возможные особые случаи. Напомним также, что на запросы немаскируемых прерываний, как и на особые случаи, процессор реагирует всегда, независимо от состояния флага прерывания IF.

Код типа прерывания определяет номер вектора прерывания в таблице векторов прерывания, расположенной в ОЗУ в первом килобайте адресного пространства, т.е. начиная от адреса 00000h до 003FFh. Каждый вектор прерывания представляет собой логический адрес, соответствующей подпрограммы обработки прерывания, и  поэтому занимает 4 байта в адресном пространстве (2 байта – значение сегментного регистра CS, и 2 байта – смещение в этом сегменте). Таким образом, выбор вектора прерывания из таблицы прерывания – это, по сути, безусловная передача управления на адрес первой команды соответствующей подпрограммы обслуживания прерывания, которая реализуется путем загрузки двух старших байтов вектора прерывания в сегментный регистр CS, а младших двух байтов вектора – в регистр указателя команд IP.

Принцип организации системы прерываний МП семейства Х86 в реальном режиме работы приведен на рис.V.2. Последовательность действий при организации прерывания  будет следующая.

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

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

·  Сбрасывается в 0 состояние флага IF, а в регистры CS и IP пересылаются новые значения CS и IP, выбранные из таблицы векторов прерывания.

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

3. Прерывания в защищенном режиме

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

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

·  Расположение дескрипторной таблицы прерываний в адресном пространстве может быть установлено по любому физическому адресу, который заносится в регистр дескрипторной таблицы прерываний IDTR. Туда же заносится и размер самой дескрипторной таблицы.

·  Возможна передача подпрограмме обработки  дополнительной информации о причине возникновения особого случая.