Маскируемые прерывания (поступающие в процессор по линии INT)

СИСТЕМА ПРЕРЫВАНИЙ

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

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

Основное назначение контроллера прерываний – направление сигналов запросов прерываний от 8-ми (15-ти для PC/AT) устройств на единственный вход прерываний микропроцессора.При этом, кроме сигнала INT, инициирующего процедуру прерывания в микропроцессоре, контроллер передает в микропроцессор по линиям данных номер вектора, через который должна быть вызвана программа обработки поступившего прерывания.

Контроллер программируетсячерез порты 20h и 21h.

Таблица векторов прерываний. Начало оперативной памяти от адреса 0000 : 0000 до 0000 : 03FFh отводится под векторы прерываний - 4-байтовые области, в которых хранятся адреса обработчиков прерываний (называемые таблице прерываний). Каждый элемент таблицы (называемый вектором прерывания) содержит 32-разрядный адрес "сегмент-смещение", указывающий на одну из существующих сервисных подпрограмм. В два старших байта каждого вектора записывается сегментный адрес обработчика, в два младших - смещение точки входа в обработчик. Всего в выделенной под векторы области памяти помещается 256 векторов.

Процессор содержит 256 различных прерываний, пронумерованных от 0 до FF.

4 основных узла в структуре контроллера:

· регистр входных запросов;

· регистр маски;

· схему анализа приоритетов;

· регистр обслуживаемых запросов.

В машинах PC/AT устанавливают два контроллера, увеличивая тем самым возможное число для входных устройств до 15-ти (по сравнению с 8-ю у PC/XT): 7 у ведущего и 8 у ведомого контроллеров.

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

Прерывание низкого уровня не может приостановить работу прерывания высокого уровня.

Выход INT ведомого контроллера подсоединяется к входу IRQ2 ведущего, а выход INT ведущего – к входу INT микропроцессора.

В компьютерах PC/AT, где ведомый контроллер подключается к входу IRQ2 ведущего, все приоритеты ведомого контролера располагаются между приоритетами уровней IRQ1 и IRQ3ведущего, т.е. образуется такая цепочка приоритетов: IRQ0 – IRQ1 – (ведомый) IRQ8 … IRQ15 (ведомый) – IRQ3…IRQ7.

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

Выполнение обработчика прерывания

Можно выполнить подпрограммы обработки прерывания двумя способами. Любая прикладная программа, содержащая команду INT, может сделать вызов подпрограммы как программное прерывание. Также подпрограмма обработки прерывания может быть вызвана с помощью аппаратного прерывания, когда некоторое устройство (асинхронный порт, клавиатура, таймер и т.д.) посылает сигнал в программируемый контроллер прерываний.

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

Обработчик прерываний всегда заканчивается командой iret (interrupt return, возврат из прерывания), выполняющей обратные действия - извлечение из стека сохраненных там слов и помещение их назад в регистры IP, CS и FLAGS. Это приводит к возврату в основную программу в ту самую точку, где она была прервана.

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

Внешние прерывания(аппаратные прерывания) бывают маскируемые и немаскируемые

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

Маскируемые прерывания (поступающие в процессор по линии INT)

Прерывание считается маскируемым, если реакция на него со стороны процессора зависит от состояния флага разрешения прерывания IF. Если IF содержит 0 (прерывание невозможно), CPU игнорирует запрос, и маскируемые прерывания должны ждать обслуживания центральным процессором. При состоянии флага IF=1 (прерывание разрешено) выполнение текущей программы приостанавливается, и процессор обслуживает запрос на прерывание.

2.

3. Немаскируемые поступающие в процессор по линии NMI. Обычно ими являются прерывания, сигнализирующие процессору о внешних событиях особой важности. Немаскируемые прерывания признаются процессором всегда, независимо от флага прерываний! Т.о., немаскируемые прерывания имеют более высокий приоритет по сравнению с маскируемыми. Им присвоен тип 2. Немаскируемые прерывания – это фактически "катастрофы", такие, как ошибки памяти или признаки сбоя питания.

Внутренние прерывания

1. Эти прерывания обуславливаются прикладными программами, использующими команду INT. Такие прерыванияназываются программными прерываниями.

2. Они возникают также при некоторых условиях автоматически по сигналам в самом CPU, например, при ошибках деления, переполнении и т.п.

Внутренние прерывания аналогичны маскируемым. Отличие заключается только в том, что CPU реагирует на запросы внутренних прерываний независимо от состояния флага прерываний IF.

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

Исключения подразделяются на отказы, ловушки и выходы из процесса (аварийное завершение).

1. Отказ – такое исключение, которое обнаруживается и обслуживается до выполнения команды вызвавшей ошибку. После обслуживания этого исключения управление возвращается на ту же команду, вызвавшую отказ.

2. Ловушка – исключение, обнаруживаемое и обслуживаемое после команды его вызвавшей. После обслуживания этого исключения управление передается команде, следующей за вызвавшей исключение. К классу ловушек относятся и программные прерывания - исполнение команды INTxx где хх – номер прерывания. Строго говоря, программные прерывания название некорректное, точнее – программный вызов подпрограммы обработки прерываний.

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

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