Аппаратные прерывания. Работа контроллера Intel 8259. Приоритет прерываний. Запрет и маскирование аппаратных прерываний

Прерывание— сигнал, сообщающий ЦП о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается, и управление передаётся обработчику прерывания(специальная процедура, вызываемая по прерыванию для выполнения его обработки.), который реагирует на событие и обслуживает его, после чего возвращает управление в прерванный код.

В зависимости от источника возникновения сигнала прерывания делятся на:

· асинхронные, или внешние (аппаратные) — события, которые исходят от внешних источников (например, периферийных устройств) и могут произойти в любой произвольный момент: сигнал от таймера, нажатие клавиш клавиатуры, движение мыши. Факт возникновения в системе такого прерывания трактуется как запрос на прерывание (Interrupt request, IRQ);

· синхронные, или внутренние — события в самом ЦП как результат нарушения каких-то условий при исполнении машинного кода: деление на ноль, переполнение стека, обращение к недопустимым адресам памяти; программные (частный случай внутреннего прерывания) — инициируются исполнением специальной инструкции в коде программы. Программные прерывания обычно используются для обращения к функциям встроенного ПО (firmware), драйверов и ОС.

Внешние (аппаратные) прерывания в зависимости от возможности запрета делятся на:

· маскируемые — прерывания, которые генерируются контроллером прерываний Intel 8259 по запросу периферийных устройств и которые можно запрещать установкой соответствующих битов в регистре маскирования прерываний (в x86-процессорах — сбросом флага IF в регистре флагов);

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

Программы на Ассемблере могут запретить аппаратные прерывания. Это маскируемые прерывания, и они зависят от флага прерывания IF (9 бит регистра флагов):

IF = 1 - маскируемые прерывания разрешены; IF = 0 - маскируемые прерывания запрещены.

С этим флагом работают две команды процессора:

CLI – запретить все аппаратные прерывания; SLI - разрешить все аппаратные прерывания.

Существует несколько причин для запрета аппаратных прерываний:

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

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

Когда происходит прерывание, ЦП «приостанавливает» свою работу, выполняет программу прерывания, а затем возвращается к работе в прерванном месте. Для того чтобы иметь возможность вернуться в нужное место программы, адрес этого места сохраняется в стеке. Сохраняется дальний адрес возврата и регистр (регистр - это определенный участок памяти внутри самого процессора, от 8-ми до 32-х бит длиной, который используется для промежуточного хранения информации, обрабатываемой процессором) флагов CS:IP, PSW. Затем в CS:IP загружается адрес программы обработки прерываний, которой передается управление. Программа обработки прерывания – драйвер прерывания.

Программа обработки аппаратных прерываний заканчивается всегда инструкцией iret (возврат из прерывания код CF). Из стека восстанавливается CS:IP и регистр флагов PSW, давая возможность продолжить выполнение прерванной программы.

Cистема прерываний – это совокупность программных и аппаратных средств, реализующих механизм прерываний. К аппаратным средствам относятся:

• выводы микропроцессора:

- INTR – вывод для входного сигнала внешнего прерывания.

- INTA – вывод МП для выходного сигнала подтверждения получения сигнала.

- NMI – вывод МП для немаскируемого прерывания

• микросхема ПКП (программируемый контроллер прерывания) 8259А.

• внешние устройства: таймер, клавиатура, диски и т.д.

К программным средствам относятся:

• таблица векторов прерываний – указатели на процедуры обработки прерываний; находится в первом Кб оперативной памяти. Каждый указатель – 4 байта, итого 256 указателей.

• флаги в регистре флагов:

o IF (Interrupt Flag) - флаг прерывания. Предназначен для маскирования аппаратных прерываний. Если он = 1, то прерывания разрешены, иначе – запрещены.

o TF (Trace Flag) – флаг трассировки. Если = 1, то МП в режиме покомандной работы и после выполнения каждой машинной команды в МП генерируется внутреннее прерывание с номером 1 далее следуют действия в соответствии с алгоритмом обработки данного прерывания.

• Машинные команды МП: int( программныепрерывания, предназначены для выполнения некоторых действий операционной системы), into (прерывание по переполнению), iret (извлечь последовательно три слова из стека и поместить их соответственно в регистры ip, cs, flags.), cli (защитить от возможного искажения содержимого регистров), sti(разрешить аппаратные прерывания).

Устройство ПКП 8259А

Эта микросхема может обрабатывать запросы от 8 источников внешних прерываний. Этого недостаточно, поэтому обычно используют 2 последовательно соединенные микросхемы (итого 15 источников).

Аппаратные прерывания. Работа контроллера Intel 8259. Приоритет прерываний. Запрет и маскирование аппаратных прерываний - student2.ru

Рисунок 2.1 - Подсистема прерываний компьютера

Аппаратные прерывания. Работа контроллера Intel 8259. Приоритет прерываний. Запрет и маскирование аппаратных прерываний - student2.ru

Рисунок 2.2 - Структурная схема и схематическое представление выводов i8259A

Функции, выполняемые микросхемой ПКП:

• фиксирование запросов на обработку прерывания от 8 источников, формирование единого запроса на прерывание и подача его на вход INTR МП;

• формирование номера вектора прерывания и выдача его на шину данных;

• организация приоритетной обработки прерываний (приоритет NMI выше всех маскируемых прерываний)

• запрещение (маскирование) прерываний с определенными номерами.

Назначения выводов микросхемы:

• d0…d7 – выводы на системную шину данных. По ним передается номер прерывания и принимается управляющая информация.

• INT – вывод выходного сигнала запроса на прерывание, который подается на вход МП INTR.

• INTA – вывод для сигнала МП, подтверждающего факт принятия им прерывания на обслуживание;

• Irq0…irq7 – выводы для входных сигналов запросов на прерывания от внешних устройств.

Назначение основных структурных компонент ПКП:

• IRR – регистр запросов на прерывания – 8-разрядный регистр, фиксирующий поступление сигнала на один из входов irq0-irq7. Устанавливается в 1 соответствующий бит.

• IMR – регистр маскирования прерываний. 8-разрядный регистр, с помощью которого можно запретить обработку соответствующих запросов на прерывания. Для запрещения необходимо установить соответствующие биты IMR – путем программирования порта 21h.

• ISR – регистр обслуживаемых прерываний – 8-разрядный регистр, показывающий какие прерывания обрабатываются в данный момент в МП (если соответствующий бит=1).

• PR- арбитр приоритетов – разрешение конфликтов при одновременном приходе запросов на входы irq0-irq7.

• Блок управления чтением/записью – организация информационного обмена контроллера прерывания и МП через шину данных.

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