
- •Глава 3
- •Регистр команды
- •Указатель стека
- •Языки микропрограммирования
- •Описание слов, шин, регистров
- •Описание памяти, слова памяти
- •Описание микроопераций
- •1 38 Глава 3. Функциональная организация фон-неймановской вм
- •Цикл команды
- •Этап формирования адреса следующей команды
- •Этап декодирования команды
- •Машинный цикл с косвенной адресацией
- •Машинный цикл с прерыванием
- •Диаграмма состояний цикла команды
- •Критерии эффективности вычислительных машин
- •Способы построения критериев эффективности
- •Учет приоритета частных показателей
- •Контрольные вопросы
Машинный цикл с косвенной адресацией
Многие команды предполагают чтение операндов из памяти или запись в память. В простейшем случае в адресном поле таких команд явно указывается исполнительный адрес соответствующей ячейки ОП. Однако часто используется и другой способ указания адреса, когда адрес операнда хранится в какой-то ячейке памяти, а в команде указывается адрес ячейки, содержащей адрес операнда. Как уже отмечалось ранее, подобный прием называется косвенной адресацией. Чтобы прочитать или записать операнд, сначала нужно извлечь из памяти его адрес и только после этого произвести нужное действие (чтение или запись операнда), иными словами, требуется выполнить два обращения к памяти. Это, естественно, отражается и на цикле команды, в котором появляется косвенная адресация. Этап косвенной адресации можно отнести к этапу вычисления адресов операндов, поскольку его сущность сводится к определению исполнительного адреса операнда.
Применительно к вычислительной машине, приведенной на рис. 3.1, при косвенной адресации имеют место следующие микрооперации:
РАРАП: РАП := РК(РА), ЧтЗУ: РДП := ОП[(РА)];
РДПРА:РК(РА):=РДП.
Иными словами, содержимое адресного поля команды в регистре команд используется для обращения к ячейке ОП, в которой хранится адрес операнда, после чего извлеченный из памяти исполнительный адрес операнда помещается в адрес ное поле регистра команды на место косвенного адреса. Дальнейшее выполнейИ команды протекает стандартным образом.
Машинный цикл с прерыванием
Практически во всех ВМ предусмотрены средства, благодаря которым модули ввода/вывода (и не только они) могут прервать выполнение текущей программы для внеочередного выполнения другой программы, с последующим возвратом к прерванной.
Первоначально прерывания были введены для повышения эффективности
ислений при работе с медленными ПУ. Положим, что процессор пересылает данные на принтер, используя стандартный цикл команды. После каждой операции записи ЦП будет вынужден сделать паузу, в ожидании подтверждения от принтера об обработке символа. Длительность этой паузы может составлять сотни и тысячи циклов команды. Ясно, что такое использование ЦП очень неэффективно. В случае прерываний, пока протекает операция ввода/вывода, ЦП способен выполнять другие команды.
В упрощенном виде процедуру прерывания можно описать следующим образом Объект, требующий внеочередного обслуживания, выставляет на соответствующем входе ЦП сигнал запроса прерывания. Перед переходом к очередному циклу команды процессор проверяет этот вход на наличие запроса. Обнаружив запрос, ЦП запоминает информацию, необходимую для продолжения нормальной работы после возврата из прерывания, и переходит к выполнению программы обработки прерывания (обработчика прерывания). По завершении обработки прерывания ЦП восстанавливает состояние прерванного процесса, используя запомненную информацию, и продолжает вычисления. Описанный процесс иллюстрирует рис. 3.5.
В терминах цикла команды сказанное выглядит так. Для учета прерываний к циклу команды добавляется этап прерывания, в ходе которого процессор проверяет, не поступил ли запрос прерывания. Если запроса нет, ЦП переходит к этапу выборки следующей команды программы. При наличии запроса процессор:
1. Приостанавливает выполнение текущей программы и запоминает содержимое всех регистров, которые будут использоваться программой обработки прерывания. Это называется сохранением контекста программы. В первую очередь необходимо сохранить содержимое счетчика команд, аккумулятора и регистра признаков. Контекст программы обычно сохраняется в стеке.
2. Заносит в счетчик команд начальный адрес программы обработки прерывания.
Рис. 3.5. Передача управления при прерываниях
146 Глава 3. Функциональная организация фон-неймановской ВМ
На языке микроопераций это можно записать следующим образом:
СКРДП: РДП := СК; -1УС: УС := УС - 1 <3апись в стек содержимого СК>;
УСРАП: РАП := УС; ЗпЗУ, СКРДП: ОП[(УС)] := РДП := СК;
АккРДП: РДП := Акк; -1УС: УС := УС - 1 <3апись в стек содержимого Акк>;
УСРАП: РАП := УС; ЗпЗУ, АккРДП: ОП[(УС)] := РДП := Акк;
РПрзРДП: РДП := РПрз; -1УС: УС := УС - 1 <3апись в стек содержимого РПрз>;
УСРАП: РАП := УС; ЗпЗУ, РПрзРДП: ОП[(УС)] := РДП := РПрз;
СК := Аобр <3анесение в СК начального адреса обработчика прерываниям
Теперь процессор продолжает с этапа выборки первой команды обработчика прерывания. Обработчик (обычно он входит в состав операционной системы) определяет природу прерывания и выполняет необходимые действия. Когда программа обработки прерывания завершается, процессор может возобновить выполнение программы пользователя с точки, где она была прервана. Для этого он восстанавливает контекст программы (содержимое СК и других регистров) и начинает с цикла выборки очередной команды прерванной программы. Соответствующая микропрограмма представлена ниже (с целью упрощения схемы некоторые тракты и сигналы управления не показаны, и соответствующие микрооперации отображают лишь логику выхода из прерывания).
УСРАП: РАП :=УС, ЧтЗУ: РДП:=ОП[(УС)] восстановление содержимого РПрз>;
+1УС: УС := УС + 1; РДПРПрз: РПрз := РДП;
УСРАП: РАП := УС, ЧтЗУ: РДП := ОП[(УС)] восстановление содержимого Акк>;
+1УС: УС := УС + 1; РДПАкк: Акк := РДП;
УСРАП: РАП := УС, ЧтЗУ: РДП := ОП[(УС)] восстановление содержимого СК>;
+1УС: УС := УС + 1; РДПСК: СК := РДП.