Аппаратные прерывания. Работа контроллера 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 источников).
Рисунок 2.1 - Подсистема прерываний компьютера
Рисунок 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.
• Блок управления чтением/записью – организация информационного обмена контроллера прерывания и МП через шину данных.