PersCom — Компьютерная Энциклопедия Компьютерная Энциклопедия

Ввод-вывод

Ввод-вывод

Четвёртое. ICW4 — дополнительные особенности обработки прерываний

Этот приказ (см. таблицу ниже) определяет дополнительные особенности обработки прерываний контроллером i8259А. Данный приказ посылается в порт 21h.

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

Программные прерывания

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

Особенности вызова-возврата при прерывании:

1) сохранение большей части контекста, чем при выполнении call,
2) хранение адреса перехода в определенном месте (в векторе прерывания).

Эти особенности в некоторых случаях могут дать определенные преимущества.

В системах команд многих процессоров есть команда (команды) программных прерываний (software interrupt), позволяющие запустить механизм прерывания программно. Чаще всего для таких команд используются мнемоники int (от interrupt — прерывание) или trap (англ. ловушка). Команда обычно имеет один параметр, указывающий номер прерывания (т.е. фактически задающей адрес вектора — местоположение ячеек, хранящих адрес перехода на соответствующую подпрограмму).

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

Пятое. OCW1 — управление регистром масок IMR

Этот приказ (см. таблицу ниже) предназначен для управления регистром масок IMR для маскирования прерываний конкретных уровней. Данный приказ посылается в порт 21h.

Действия, которые должен выполнить программист, чтобы прерывание было работоспособным

В дальнейшем описании предполагается, что используется "свободное" прерывание.

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

2. Написать подпрограмму реакции на запрос (обработчик, handler). Не забыть обеспечить в ней сохранение контекста на входе в обработчик и его восстановление на выходе из прерывания (иногда существуют соглашения о "свободных регистрах"). Выход надо делать командой возврата из прерывания. Примите решение, допускаете ли Вы вложенные прерывания, и, если да, то в обработчике надо разрешить прерывания процессору, так как обычно при входе в прерывания повторные прерывания процессору автоматически запрещаются.

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

4. Настроить контроллер прерываний на нужный режим: задать приоритет выбранного входа, задать форму сигнала запроса (для аппаратного прерывания).

5. Разрешить запрос прерывания от выбранного источника (для аппаратного прерывания).

6. Разрешить прерывания процессору.

Шестое. OCW2 — управление приоритетом

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

  • сбросить бит в ISR с наибольшим приоритетом;
  • сбросить бит в ISR для определенного уровня прерываний;
  • установить низший приоритет для определенного уровня;
  • поменять приоритеты уровней с максимальным и минимальным приоритетами;
  • поменять приоритеты уровней с заданным и минимальным приоритетами.

Данный приказ посылается в порт 20h.

Подкатегории