Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение арх.ЭВМ2.docx
Скачиваний:
5
Добавлен:
02.12.2018
Размер:
17.75 Mб
Скачать

Система прерываний.

ПРЕРЫВАНИЯ - это остановка текущей программы по запросу, сохранение «контекста» и переход на процедуру обработчик прерывания с последующим возвратом в основную программу. Прерывания бывают 1) программные - вызываются программой int с указанием номера прерывания.

2) исключения или ловушки - прерывания генерируются в результате внутренней ошибки процессора.

3) аппаратные прерывания - это прерывания, генерируемые одним, из каких либо из углов ПК.

3.1) маскируемые- поступают на вход процессора, генерируется каким либо устройством при возникновения у него события требующего обработки.

3.2) не маскируемые- возникают в результате критических ошибок аппаратуры поступают на входы SMI или NMI процессора.

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

Запросы поступают процессору на вход int r, прерывания называются маскируемые так как можно задать маску то есть правило разрешающее либо запрещающее реакцию системы на прерывания . Для управления маскируемыми аппаратными прерываниями существует флаг разрешения прерываний . Флаг IF глобальное разрешение прерываний. Для управления им служит 2 команды.

CLI(IF=>0) запрещает прерывания.

STI(IF=>1) разрешает прерывания.

Вектор прерываний- это ссылка содержащая адрес программы обработчика данного прерывания. Таблица векторов прерываний- это область ОП выделенная в младших адресах для хранения векторов прерывания. Каждый вектор состоит из 4 байт младшее слова имеет, относительный адрес обработчика, старшее слово базу. Таблица располагается в диапазоне 0000-03FFh. Объем таблицы 1 килобайт она содержит 256 векторов.

Каждый PHP содержит 3 регистра:

IRR-регистр предназначен для фиксирования запросов поступающих на входы PHP если на вход поступает запрос то соответствующий разряд регистра устанавливается в 1.

IMR -предназначен для хранения маски, единица в разряде регистра запрещает реакцию на данное прерывание.

ISR-служит для хранения номера обрабатываемого прерывания и построения очереди.

Программирование контролера осуществляется при помощи приказов инициализации(ISW) и обработчик приказов(OSW). Используется 4 приказа инициализации.

ISW1- передается в PHP ведущий по адресу 020h, ведомый по 0А0h.

Остальные ISW2,ISW3,ISW4 передаются в ведущий ПКП по адресу 021h, ведомый 0А1h.

Реакция системы прерываний на поступление запросов. Пусть запрос поступит на линию IRQ0. В регистре ПКП IRR фиксируется запрос установкой нулевого бита в единицу. Проверяется маска если нулевой разряд регистра IMR равен 1 то регистр считается замаскированным, дальнейшая обработка не производится, значение регистра IMR сбрасывается. Если разряд = 0 и приоритет у входа достаточно высокий с выхода ПКП IN формируется запрос процессору на вход INT R. Процессор получив запрос от PHP проверяет флаг глобального расширений прерываний. Если прерывания запрещены IF=0, обработка будет отложена до разрешения прерываний. IF=1 то процессор завершает обработку текущей команды сохраняя контекст формирует цикл магистрали.

Получив признак этого цикла, системный контроллер передает сигнал на вход пкп. INT A.

Шифратор приоритетов пкп уменьшает приоритет обрабатываемого входа по шине данных пкп передает процессору вход команды KALL и номер вектора прерывания. Процессор преобразует полученный номер в адрес вектора таблицы векторов, считывает адрес данного вектора(4 байта). Младшее слово будет являться смещением, и будет помещаться в регистр IP. Старше слово будет являться базой и будет помещено в регистр CS. Следующая команда будет выполнена по загруженному адресу, то есть начнется выполнение обработчика прерывания.

  1. Прерывание может быть сгенерировано в любой момент времени, поэтому необходимо в первую очередь сохранить контекст, то есть значение регистра. Команды PUSHA. Завершение обработчика должно производиться восстановлением значений регистров командой POPA.

  2. Для предотвращения возникновения повторных прерываний во время обработки текущего необходимо запретить прерывания сбросив флаг глобального разрешения прерываний.

  3. Последними командами обработчика должны быть команды разрешающие прерывания и команда выхода из под программы, при генерировании прерывания необходимо обращать внимание на регистры CS, IP, FLAGS. Для восстановления регистров из стека при выходе из под программы используется команда IRET. Таким образом общий вид можно представить