Программная модель кэш-памяти
К описанной в разд. 8.1 программной модели учебной ЭВМ может быть подключена программная модель кэш-памяти, структура которой в общем виде отображена на рис. 5.2. Конкретная реализация кэш-памяти в описываемой программной модели показана на рис. 8.15.
Кэш-память содержит N ячеек (в модели N может выбираться из множества {4, 8, 16, 32}), каждая из которых включает трехразрядное поле тега (адреса ОЗУ), шестиразрядное поле данных и три однобитовых признака (флага):
□ Z — признак занятости ячейки;
□ U — признак использования;
□ W — признак записи в ячейку.
Таким образом, каждая ячейка кэш-памяти может дублировать одну любую ячейку ОЗУ, причем отмечается ее занятость (в начале работы модели все ячейки кэш-памяти свободны, VZ, = 0), факт записи информации в ячейку во время пребывания ее в кэш-памяти, а также использование ячейки (т. е. любое обращение к ней).
Текущее состояние кэш-памяти отображается на экране в отдельном окне в форме таблицы, причем количество строк соответствует выбранному числу ячеек кэш. Столбцы таблицы определяют содержимое полей ячеек, например, так, как показано в табл. 8.3.
Таблица 8.3. Пример текущего состояния кэш-памяти
Теги | Данные | Z | U | W | |
Для настройки параметров кэш-памяти можно воспользоваться диалоговым окном Кэш-память,вызываемым командой Вид| Кэш-память,а затем нажать первую кнопку на панели инструментов открытого окна. После этих действий появится диалоговое окно Параметры кэш-памяти,позволяющее выбрать размер кэш-памяти, способ записи в нее информации и алгоритм замещения ячеек.
Напомним, что при сквозной записи при кэш-попадании в процессорных циклах записи осуществляется запись как в ячейку кэш-памяти, так и в ячейку ОЗУ, а при обратной записи — только в ячейку кэш-памяти, причем эта ячейка отмечается битом записи (Wt := 1). При очистке ячеек, отмеченных битом записи, необходимо переписать измененное значение ноля данных в соответствующую ячейку ОЗУ.
При кэш-промахе следует поместить в кэш-память адресуемую процессором ячейку. При наличии свободных ячеек кэш-памяти требуемое слово помещается в одну из них (в порядке очереди). При отсутствии свободных ячеек следует отыскать ячейку кэш-памяти, содержимое которой можно удалить, записав на его место требуемые данные (команду). Поиск такой ячейки осуществляется с использованием алгоритма замещения строк.
В модели реализованы три различных алгоритма замещения строк:
□ случайное замещение, при реализации которого номер ячейки кэш-памяти выбирается случайным образом;
□ очередь, при которой выбор замещаемой ячейки определяется временем пребывания ее в кэш-памяти;
□ бит использования, случайный выбор осуществляется только из тех ячеек, которые имеют нулевое значение флага использования.
Напомним, что бит использования устанавливается в 1 при любом обращении к ячейке, однако, как только все биты Ut установятся в 1, все они тут же сбрасываются в 0, так что в кэш всегда ячейки разбиты на два непересекающихся подмножества по значению бита U — те, обращение к которым состоялось относительно недавно {после последнего сброса вектора U ) имеют значение U = 1, иные — со значением U = 0 являются "кандидатами на удаление" при использовании алгоритма замещения "бит использования". Если в параметрах кэш-памяти установлен флаг "с учетом бита записи", то все три алгоритма замещения осуществляют поиск "кандидата на удаление" прежде всего среди тех ячеек, признак записи которых не установлен, а при отсутствии таких ячеек (что крайне маловероятно) — среди всех ячеек кэшпамяти. При снятом флаге "с учетом бита записи" поиск осуществляется по всем ячейкам кэш-памяти без учета значения W.
Оценка эффективности работы системы с кэш-памятью определяется числом кэш-попаданий по отношению к общему числу обращений к памяти. Учитывая разницу в алгоритмах записи в режимах сквозной и обратной записи, эффективность использования кэш-памяти вычисляется по следующим выражениям (соответственно для сквозной и обратной записи):
где:
К — коэффициент эффективности работы кэш-памяти;
So — общее число обращений к памяти;
SK — число кэш-попаданий;
SK — число сквозных записей при кэш-попадании (в режиме сквозной записи);
S'K — число обратных записей (в режиме обратной записи).
Вспомогательные таблицы
В данном разделе представлены вспомогательные таблицы (табл. 8.4—8.8) для работы с моделью учебной ЭВМ.
Таблица 8.4. Таблица команд учебной ЭВМ
МЛ\СТ | |||||||||
NOP | JMP | MOV | |||||||
IN | JZ | RD | RD | RDI | |||||
OUT | JNZ | WR | WR | ||||||
IRET | JS | ADD | ADD | ADI | |||||
WRRB | JNS | SUB | SUB | SBI | |||||
WRSP | JO | MUL | MUL | MULI | |||||
PUSH | JNO | DIV | DIV | DIVI | |||||
POP | JRNZ | IN | |||||||
RET | INT | El | OUT | ||||||
HLT | CALL | DI | |||||||
Таблица 8.5.Типы адресации, их коды и обозначение | |||||||||
Обозначение | Код | Тип адресации | Пример команды | ||||||
Прямая (регистровая) | ADD 23 (ADD R3) | ||||||||
# | Непосредственная | ADD #33 | |||||||
@ | Косвенная | ADD @33 | |||||||
Обозначение | Код | Тип адресации | Пример команды | ||||||
[ ] | Относительная | ADD [33] | |||||||
@R | Косвенно-регистровая | ADD @R3 | |||||||
@R+ | Индексная с постинкрементом | ADD @R3+ | |||||||
-@R | Индексная с преддекрементом | ADD -@R3 | |||||||
В табл. 8.6 приняты следующие обозначения:
□ DD — данные, формируемые командой в качестве (второго) операнда: прямо или косвенно адресуемая ячейка памяти или трехразрядный непосредственный операнд;
□ R* — содержимое регистра или косвенно адресуемая через регистр ячейка памяти;
□ ADR* — два младших разряда ADR поля регистра CR;
□ V — адрес памяти, соответствующий вектору прерывания;
□ М(*) — ячейка памяти, прямо или косвенно адресуемая в команде; О I — пятиразрядный непосредственный операнд со знаком.
Таблица 8.6. Система команд учебной ЭВМ
Таблица 8.7.Таблица кодов ASCII (фрагмент)
I | A | В | С | D | Е | F | ||||||||||
@ | Р | £ | P | A | Р | а | Р | |||||||||
! | А | Q | а | q | Б | С | б | с | ||||||||
В | R | b | r | В | т | в | т | |||||||||
# | С | S | с | s | Г | У | г | У | ||||||||
$ | D | т | d | t | Д | ф | д | -в- | ||||||||
% | Е | и | е | u | Е | X | е | X | ||||||||
& | F | V | f | V | Ж | Ц | ж | ц | ||||||||
« | G | W | g | w | ч | ч | ||||||||||
( | Н | X | h | X | И | ш | и | ш | ||||||||
) | I | Y | i | У | й | щ | й | Щ | ||||||||
А | J | Z | j | z | к | ъ | к | ъ | ||||||||
В | + | ; | К | [ | k | { | л | ы | л | ы | ||||||
С | < | L | м | ь | м | ь | ||||||||||
D | - | = | М | ] | m | } | н | э | н | э | ||||||
Е | > | N | n | щ | ю | Щ | ю | |||||||||
F | / | ? | О | _ | п | я | п | я |
Для решения с помощью ЭВМ некоторой задачи должна быть разработана программа. Программа на языке ЭВМ представляет собой последовательность команд. Код каждой команды определяет выполняемую операцию, тип
Таблица 8.8. Перевод НЕХ-кодов в десятичные числа
адресации и адрес. Выполнение программы, записанной в памяти ЭВМ, осуществляется последовательно по командам в порядке возрастания адресов команд или в порядке, определяемом командами передачи управления.
Для того чтобы получить результат выполнения программы, пользователь должен:
- ввести программу в память ЭВМ;
- определить, если это необходимо, содержимое ячеек ОЗУ и РОН, содержащих исходные данные, а также регистров IR и BR;
- установить в PC стартовый адрес программы; □ перевести модель в режим Работа.
Каждое из этих действий выполняется посредством интерфейса модели, описанного в главе 8. Ввод программы может осуществляться как в машинных кодах непосредственно в память модели, так и в мнемокодах в окно Текст программыс последующим ассемблированием.
Цель настоящей лабораторной работы — знакомство с интерфейсом модели ЭВМ, методами ввода и отладки программы, действиями основных классов команд и способов адресации. Для этого необходимо ввести в память ЭВМ и выполнить в режиме Шагнекоторую последовательность команд (определенную вариантом задания) и зафиксировать все изменения на уровне программно-доступных объектов ЭВМ, происходящие при выполнении этих команд.
Команды в память учебной ЭВМ вводятся в виде шестиразрядных десятичных чисел (см. форматы команд на рис. 8.3, коды команд и способов адресации в табл. 8.2—8.4).
В настоящей лабораторной работе будем программировать ЭВМ в машинных кодах.
Пример
Дана последовательность мнемокодов, которую необходимо преобразовать в машинные коды, занести в ОЗУ ЭВМ, выполнить в режиме Шаги зафиксировать изменение состояний программно-доступных объектов ЭВМ (табл. 9.1).
Таблица 9.1.Команды и коды
Последовательность | Значения | |||||
Команды | RD #20 | WR 30 | ADD #5 | WR @30 | JNZ 002 | |
Коды | 21 1 020 | 22 0 030 | 23 1 005 | 22 2 030 | 12 0 002 |
Введем полученные коды последовательно в ячейки ОЗУ, начиная с адреса 000. Выполняя команды в режиме Шаг, будем фиксировать изменения программно-доступных объектов (в данном случае это Асе, PC и ячейки ОЗУ 020 и 030) в табл. 9.2.
Таблица 9.2.Содержимое регистров
PC | Асс | М(30) | М(20) | PC | Асс | М(30) | М(20) |
Номер варианта выбираем по двум последним цифрам в зачетной книжке. Если номер больше 28 то от цифры отнимаем 28.
Задание для нечетных вариантов