Режимы обмена между ЦП и ВУ модели ЭВМ

В конспекте лекций отмечалось, что связь процессора и ВУ может осуществляться как в программно-управляемом режиме ( синхронном или асинхронном), так и в режиме прерывания ( см. раздел 7). Синхронный программно-управляемый режим используется для ВУ, всегда готовых к обмену. В нашей модели такими ВУ являются дисплей и тоногенератор— процессор может обращаться к этим ВУ, не анализируя их состояние (правда дисплей блокирует прием данных после ввода 128 симво­лов, формируя флаг ошибки).

Асинхронный обмен предполагает анализ процессором состояния ВУ, которое определяет готовность ВУ выдать или принять данные или факт осуществле­ния некоторого события, контролируемого системой. К таким устройствам в нашей модели можно отнести клавиатуру и блок таймеров.

В модели учебной ЭВМ предусмотрен также и механизм векторных внешних прерываний. Внешние устройства формируют запросы на прерывания, которые поступают на входы контроллера прерываний. При подключении ВУ, способного формировать запрос на прерывание, ему ставится в соответствие номер входа контроллера прерываний — вектор прерывания, принимающий значе­ние в диапазоне 0—9. Контроллер передает вектор, соответствующий запросу, процессору, который начинает процедуру обслуживания прерывания.

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

Механизм прерываний, реализованный в модели учебной ЭВМ, поддержива­ет таблицу векторов прерываний, которая создается в оперативной памяти моделью операционной системы (если она используется) или непосредствен­но пользователем.

Номер строки таблицы соответствует вектору прерывания, а элемент табли­цы — ячейка памяти, в трех младших разрядах которой размещается началь­ный адрес подпрограммы, обслуживающей прерывание с этим вектором. Таблица прерываний в рассматриваемой модели жестко фиксирована — она занимает ячейки памяти с адресами 100—109.

Таким образом, адрес обработчика с вектором 0 должен располагаться в ячейке 100, с вектором 2 в ячей­ке 102. При работе с прерываниями не рекомендуется использовать ячейки100—109 для других целей.

Процессор начинает обработку прерывания (если они разрешены), завершив
текущую команду. При этом он выполняет следующие действия:

1. Получает от контроллера вектор прерывания.

2. Формирует и помещает в верхушку стека слово, три младших разряда
([3:5]) которого — текущее значение PC (адрес возврата из прерывания), а разряды [1:2] сохраняют десятичный эквивалент шестнадцатеричной цифры, определяющей значение вектора флагов (I, OV, S, Z). Например, если 1 = 1,OV = 0, S= 1,Z= 1,то в разряды [1:2] запишется число 1110 = 10112.

3. Сбрасывает в 0 флаг разрешения прерывания I.

4. Извлекает из таблицы векторов прерываний адрес обработчика, соответст­вующий обслуживаемому вектору, и помещает его в PC, осуществляя тем самым переход на подпрограмму обработчика прерывания

Таким образом, вызов обработчика прерывания, в отличие от вызова подпро­граммы, связан с помещением в стек не только адреса возврата, но и текуще­го значения вектора флагов. Поэтому последней командой подпрограммы обработчика должна быть команда iret, которая не только возвращает в PC три младшие разряда ячейки — верхушки стека (как ret), но и восстанавли­вает те значения флагов, которые были в момент перехода на обработчик прерывания.

Не всякое событие, которое может вызвать прерывание, приводит к прерыва­нию текущей программы, В состав процессора входит программно-доступный флаг I разрешения прерывания. При I = 0 процессор не реагирует на запросы прерываний. После сброса процессора флаг I так же сброшен и все прерывания запрещены. Для того чтобы разрешить прерывания, следует в программе выполнить команду EI (от англ. enable interrupt).

Выше отмечалось, что при переходе на обработчик прерывания флаг I авто­матически сбрасывается, в этом случае прервать обслуживание одного пре­рывания другим прерыванием нельзя. По команде IRET значение флагов вос­станавливается, в т. ч. вновь устанавливается I = 1, следовательно, в основной программе прерывания опять разрешены.

Если требуется разрешить другие прерывания в обработчике прерывания, достаточно в нем выполнить команду EI. Контроллер прерываний и процес­сор на аппаратном уровне блокируют попытки запустить прерывание, если его обработчик начал, но не завершил работу.

Таким образом, флаг I разрешает или запрещает все прерывания системы. Если требуется выборочно разрешить некоторое подмножество прерываний, используются программно-доступные флаги разрешения прерываний непо­средственно на внешних устройствах.

Как правило, каждое внешнее устройство, которое может вызвать прерыва­ние, содержит в составе своих регистров разряд флага разрешения прерыва­ния (см. формат регистров CR и CTR на рис. 3.4.2, 3.4.6), по умолчанию уста­новленный в 0. Если оставить этот флаг, равным нулю , то внешнему устройству за­прещается формировать запрос контроллеру прерываний.

Иногда бывает удобно (например, в режиме отладки) иметь возможность вы­звать обработчик прерывания непосредственно из программы. Если исполь­зовать для этих целей команду CALL, которая помещает в стек только адрес возврата, то команда IRET, размещенная последней в обработчике, может ис­казить значения флагов (все они будут сброшены в 0, т. к. команда CALL фор­мирует только три младшие разряда ячейки верхушки стека, оставляя осталь­ные разряды в 000). Поэтому в системах команд многих ЭВМ, в т. ч. и в рассматриваемой модели, имеются команды вызова прерываний – INT n (в нашей модели n {0, 1,..., 9}), где: n – вектор прерывания.

Процессор, выполняя команду INT n, производит те же действия, что и при обработке прерывания с вектором n.

Характерно, что с помощью команды int n вызывается обработчик пре­рывания даже в том случае, когда флаг разрешения прерывания I сброшен.

Анализ состояния ВУ может осуществляться процессором двумя способами:

• в программно-управляемом режиме;

• в режиме прерывания.

В первом случае предполагается программное обращение процессора к реги­стру состояния ВУ с последующим анализом значения соответствующего разряда слова состояния. Такое обращение следует предусмотреть в про­грамме с некоторой периодичностью, независимо от фактического наступле­ния контролируемого события (например, нажатие клавиши).

Во втором случае при возникновении контролируемого события ВУ форми­рует процессору запрос на прерывание программы, по которому процессор и осуществляет связь с ВУ.

 








Дата добавления: 2015-04-07; просмотров: 2578;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.