Режимы обмена между ЦП и ВУ модели ЭВМ
В конспекте лекций отмечалось, что связь процессора и ВУ может осуществляться как в программно-управляемом режиме ( синхронном или асинхронном), так и в режиме прерывания ( см. раздел 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;