Четверг, 19.09.2024
Kober
Меню сайта
Поиск
Категории раздела
Шпоры Орг ЭВМ [42]
Шпоры ОС [22]
Главная » Статьи » Шпоры Орг ЭВМ

14. Способы обнаружения запросов, распознавания причин прерывания и способы формирования начального адреса прерывающей программы

14. Способы обнаружения запросов, распознавания причин прерывания и способы формирования начального адреса прерывающей программы

Упрощенная структура контроллера прерываний

 

Микропроцессоры типа х86 имеют два входа запросов внешних аппаратных прерываний:

NMI – немаскируемое прерывание, используется обычно для запросов прерываний по нарушению питания;

INT – маскируемое прерывание, запрос от которого можно программным образом замаскировать путем сброса флага IF в регистре флагов.

Для подключения запросов прерываний от нескольких внешних устройств к одному входу INT микропроцессора используется контроллер прерываний.

Распознавание причин прерываний источника

Внутренние: источник CPU – по КОП можно узнать причину

Внешние: устройство посылает запрос к CPU – вектор прерываний однозначно идентифицирует источник прерыв.

 

Вектор – адрес, он передается по шине DB (не по АВ т.к. АВ однонаправленная), т.е. по вектору можно узнать источник

За каждым устройством закреплены 3 адреса (не в ОП)

-        в RGK – управление

-        в RG данных

-        в SRG

При обработке внутреннего прерывания МП «известна» его причина, а следовательно известен источник запроса.

Существуют два метода определения внешнего источника запроса:

·  метод опроса;

·  векторные прерывания.

Метод опроса. Этот метод можно реализовать, например, следующим образом. В систему вводится специальный порт (или несколько портов, при большом числе внешних источников прерываний). Все внешние запросы заводятся на входы этого порта, причем для каждого запроса отводится один бит порта. Одновременно, все запросы через схему ИЛИ заводятся на вход INTR МП. на рис. 18 приводится подобная схема для восьми внешних источников прерываний (IR7 – IR0).

Восприняв запрос на входе INTR, МП выполняет следующий фрагмент программы:

in al, port_int       ; читаем port_int

shl al, 1                  ; сдвигаем содержимое al на один разряд  влево

jc obr7                   ; если флаг cf установлен, то это запрос по ли

                               ; нии IR7, и мы переходим к   бработчику этого

                               ; прерывания

shl al, 1                  ; сдвигаем al еще на один разряд влево

jc obr6                   ; если cf установлен, это запрос по IR

и. т. д.

Возможна ситуация, когда МП получает сразу несколько запросов на прерывание от разных внешних источников. Чтобы МП мог в такой ситуации функционировать, всем источникам запросов присваиваются приоритеты. При одновременном поступлении нескольких запросов, обслужен будет запрос с наивысшим приоритетом. Для нашего примера старший приоритет будет у IR7, а младший – у IR0. Для того чтобы изменить приоритеты в нашем примере на противоположные, достаточно использовать команду сдвига вправо.

Достоинством метода опроса являются небольшие аппаратурные затраты, а недостатком – медленная реакция МП на запросы с низким приоритетом.

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

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

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

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

 

Каждый вектор представляет собой пару сегмент:смещение и однозначно задает начальный адрес обработчика прерывания данного типа.

Распознавание причин прерывания

Текущее состояние устройство отображается в регистре состояния. Причина прерывания опознается опросом регистра состояния. Формирование адреса дескриптора (рис).

Вызов обработчика прерываний



 

 

Вход в прерывающую программу

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

1) Размещение прерывающих программ по фиксированным адресам. В некоторой постоянно распределенной области основной памяти по фиксированным адресам размещаются прерывающие программы, это размещение не меняется. Вход реализуется аппаратно, то есть адрес формируется аппаратно – это самый быстрый способ. Но у данного способа существуют серьезные ограничения:

a) привязка к адресам

b) количество причин прерывания должно быть достаточно малым

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

2) вход на основании слов состояния программы (PSW). Типичная структура слова состояния программы:

Маска прерывания

Ключ защиты памяти

Код состояния CPU

Адрес команды (пр-мы)

 

Схема входа в прерывающую программу. В некоторой постоянно распределенной области основной памяти формируется два массива: массив старых PSW и массив новых PSW. Любая пара слов состояния соответствует определенному запросу на прерывание. После выполнения активного запроса по соответствующему адресу в массив старых PSW загружается PSW текущей (прерываемой) программы. Характеристика программы в виде PSW записывается по определенному адресу. Из второго массива загружается новое (соответствующее прерывающей программе) PSW. Адрес записан в памяти – из PSW. Массив новых PSW всегда формируется при загрузке ОС. Массив старых PSW формируется в процессе работы. В отличие от предыдущего способа, использование PSW позволяет обслуживать и вложенные прерывания, если их приоритет выше текущей программы. Все это позволяет прерывать прерывающую программу. Недостаток: Вход в прерывающую программу требует загрузки достаточно больших слов (большого процессорного времени), следовательно, данный способ не очень быстрый. Этот вариант используется в универсальных компьютерах (для решения расчетных задач, т.е. не критичных ко времени)

3) Векторное прерывание – самый распространенный способ. Данный способ является программно-аппартным, т.е. для любого запроса (для любого выделенного запроса) аппаратно формируется адрес вектора прерывания. Чаще всего эти адреса фиксированы. Адреса векторных прерываний хранятся в системной области памяти. На основе адреса вектора из таблицы векторов прерывания извлекается начальный адрес прерывающей программы. Это приводит к тому, что код запроса может быть малобитным, но таблица векторов прерывания должна хранится в начальной области памяти. В качестве вектора прерывания используются:

a) адрес начала прерывающей программы (применяется в PC)

b) команда безусловного перехода к программе

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

Категория: Шпоры Орг ЭВМ | Добавил: Kober (10.06.2013)
Просмотров: 1091
Архив записей
Copyright MyCorp © 2024
Бесплатный хостинг uCoz