Жмакин А.П. Архитектура ЭВМ (2006) (1186252), страница 38
Текст из файла (страница 38)
Программное управление режимами блока таймеров осуществляется пут§ записи в регистры CTR соответствующих кодов. Запись по адресу SR ч с 1 в третьем разряде интерпретируется блоком таймеров как команда, п$ чем младшие разряды этого числа определяют код команды:
□ хххЮО — общий сброс (эквивалентна нажатию кнопки Сброс в окне обозревателя);
□ xxxlOl — сброс флага переполнения таймера FT1;
□ хххЮ2 — сброс флага переполнения таймера FT2;
□ хххЮЗ — сброс флага переполнения таймера FT3.
8.6.4. Тоногенератор
Модель этого простого внешнего устройства не имеет собственного обозревателя, содержит всего два регистра, доступных только для записи:
□ FR (адрес 0) — регистр частоты звучания (Гц):
□ LR (адрес 1) — регистр длительности звучания (мс).
По умолчанию базовый адрес тоногенератора— 30. Сначала следует записать в FR требуемую частоту тона в герцах, затем в LR — длительность звучания в миллисекундах. Запись числа по адресу регистра LR одновременно является командой на начало звучания.
8.7. Подсистема прерываний
В модели учебной ЭВМ предусмотрен механизм векторных внешних прерываний. Внешние устройства формируют запросы на прерывания, которые поступают на входы контроллера прерываний. При подключении ВУ, способного формировать запрос на прерывание, ему ставится в соответствие номер входа контроллера прерываний — вектор прерывания, принимающий значение в диапазоне 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 разрешения прерывания. При 1 = 0 процессор не реагирует на запросы прерываний. После сброса процессора флаг I так же сброшен и все прерывания запрещены. Для того чтобы разрешить прерывания, следует в программе выполнить команду ei (от англ. enable interrupt).
Выше отмечалось, что при переходе на обработчик прерывания флаг I автоматически сбрасывается, в этом случае прервать обслуживание одного прерывания другим прерыванием нельзя. По команде iret значение флагов восстанавливается, в т. ч. вновь устанавливается 1=1, следовательно, в основной программе прерывания опять разрешены.
Если требуется разрешить другие прерывания в обработчике прерывания, достаточно в нем выполнить команду ei. Контроллер прерываний и процессор на аппаратном уровне блокируют попытки запустить прерывание, если его обработчик начал, но не завершил работу.
Таким образом, флаг I разрешает или запрещает все прерывания системы. Если требуется выборочно разрешить некоторое подмножество прерываний, используются программно-доступные флаги разрешения прерываний непосредственно на внешних устройствах.
Как правило, каждое внешнее устройство, которое может вызвать прерывание, содержит в составе своих регистров разряд флага разрешения прерывания (см. формат регистров CR и CTR на рис. 8.9, 8.13), по умолчанию установленный в 0. Если оставить этот флаг в нуле, то внешнему устройству запрещается формировать запрос контроллеру прерываний. Иногда бывает удобно (например, в режиме отладки) иметь возможность вызвать обработчик прерывания непосредственно из программы. Если исполь зовать для этих целей команду call, которая помещает в стек только адре возврата, то команда iret, размещенная последней в обработчике, может ис казить значения флагов (все они будут сброшены в 0, т. к. команда call формирует только три младшие разряда ячейки верхушки стека, оставляя остальные разряды в 000).
Поэтому в системах команд многих ЭВМ, в т. ч. и нашей модели, имеются команды вызова прерываний— int л (в нашей модели л е {0, 1,9}), где л— вектор прерывания. Процессор, выполняя команду int л, производит те же действия, что и при обработке прерывания с вектором л. Характерно, что с помощью команды int л можно вызвать обработчик прерывания даже в том случае, когда флаг разрешения прерывания 1 сброшен.
8.8. Программная модель кэш-памяти
К описанной в разд. 8.1 программной модели учебной ЭВМ может быть подключена программная модель кэш-памяти, структура которой в общем вид" отображена на рис. 5.2. Конкретная реализация кэш-памяти в описываемо программной модели показана на рис. 8.15.
Кэш-память содержит N ячеек (в модели N может выбираться из множества {4, 8, 16, 32}), каждая из которых включает трехразрядное поле тега (адре са ОЗУ), шестиразрядное поле данных и три однобитовых признака (флага):
□ Z — признак занятости ячейки;
□ U — признак использования;
□ W — признак записи в ячейку.
Таким образом, каждая ячейка кэш-памяти может дублировать одну любу ячейку ОЗУ, причем отмечается ее занятость (в начале работы модели вс ячейки кэш-памяти свободны, VZ, = 0), факт записи информации в ячейку в время пребывания ее в кэш-памяти, а также использование ячейки (т. е. лю бое обращение к ней).
Текущее состояние кэш-памяти отображается на экране в отдельном окне в форме таблицы, причем количество строк соответствует выбранному числу ячеек кэш. Столбцы таблицы определяют содержимое полей ячеек, например, так, как показано в табл. 8.3.
Для настройки параметров кэш-памяти можно воспользоваться диалоговым окном Кэш-память, вызываемым командой Вид | Кэш-память, а затем нажать первую кнопку на панели инструментов открытого окна. После этих действий появится диалоговое окно Параметры кэш-памяти, позволяющее выбрать размер кэш-памяти, способ записи в нее информации и алгоритм замещения ячеек.
Напомним, что при сквозной записи при кэш-попадании в процессорных циклах записи осуществляется запись как в ячейку кэш-памяти, так и в ячейку ОЗУ, а при обратной записи — только в ячейку кэш-памяти, причем эта ячейка отмечается битом записи (Wt := 1). При очистке ячеек, отмеченных
битом записи, необходимо переписать измененное значение ноля данных в соответствующую ячейку ОЗУ.
При кэш-промахе следует поместить в кэш-память адресуемую процессором ячейку. При наличии свободных ячеек кэш-памяти требуемое слово помещается в одну из них (в порядке очереди). При отсутствии свободных ячеек следует отыскать ячейку кэш-памяти, содержимое которой можно удалить, записав на его место требуемые данные (команду). Поиск такой ячейки осуществляется с использованием алгоритма замещения строк.
В модели реализованы три различных алгоритма замещения строк:
□ случайное замещение, при реализации которого номер ячейки кэш-памяти выбирается случайным образом;
□ очередь, при которой выбор замещаемой ячейки определяется временем пребывания ее в кэш-памяти;
□ бит использования, случайный выбор осуществляется только из тех ячеек, которые имеют нулевое значение флага использования.
Напомним, что бит использования устанавливается в 1 при любом обращении к ячейке, однако, как только все биты £/, установятся в 1, все они тут же сбрасываются в 0, так что в кэш всегда ячейки разбиты на два непересекающихся подмножества по значению бита U — те, обращение к которым состоялось относительно недавно (после последнего сброса вектора U) имеют значение U = 1, иные — со значением U = 0 являются "кандидатами на удаление" при использовании алгоритма замещения "бит использования".
Если в параметрах кэш-памяти установлен флаг "с учетом бита записи", все три алгоритма замещения осуществляют поиск "кандидата на удаление прежде всего среди тех ячеек, признак записи которых не установлен, а пр отсутствии таких ячеек (что крайне маловероятно) — среди всех ячеек кэшпамяти. При снятом флаге "сучетом бита записи" поиск осуществляется по всем ячейкам кэш-памяти без учета значения W.
Оценка эффективности работы системы с кэш-памятью определяется числом кэш-попаданий по отношению к общему числу обращений к памяти. Учитывая разницу в алгоритмах записи в режимах сквозной и обратной записи, эффективность использования кэш-памяти вычисляется по следующим выражениям (соответственно для сквозной и обратной записи):
где:
О К — коэффициент эффективности работы кэш-памяти; С S0 — общее число обращений к памяти; □ SK — число кэш-попаданий;
а SKw — число сквозных записей при кэш-попадании (в режиме сквози записи);
П S'Kv — число обратных записей (в режиме обратной записи).
8.9. Вспомогательные таблицы
В данном разделе представлены вспомогательные таблицы (табл. 8.4—8. для работы с моделью учебной ЭВМ.
В табл. 8.6 приняты следующие обозначения:
□ DD— данные, формируемые командой в качестве (второго) операнда: прямо или косвенно адресуемая ячейка памяти или трехразрядный непосредственный операнд;
□ R* — содержимое регистра или косвенно адресуемая через регистр ячейка памяти;
□ ADR* — два младших разряда ADR поля регистра CR;
□ V — адрес памяти, соответствующий вектору прерывания;
□ М(*) — ячейка памяти, прямо или косвенно адресуемая в команде;
□ I — пятиразрядный непосредственный операнд со знаком.