Буферизация работы с операндами
Буфер операндов – аппаратная таблица, логически являющаяся компонентом ЦП (физически это может быть и отдельное от ЦП устройство), призванная аппаратно минимизировать количество обращений к «медленному» ОЗУ при записи и чтении операндов.
Таблица состоит из фиксированного числа строк. Каждая строка имеет следующие поля:
- адрес – физический адрес машинного слова в ОЗУ;
- значение – значение машинного слова, соответствующего адресу;
- признак изменения – код, характеризующий факт изменения поля значения (в соответствующей ячейке ОЗУ значение отличается от значения в таблице);
- код старения – код, характеризующий интенсивность обращений к данной строке. По значению поля определяются наиболее «популярные» строки. Конкретный алгоритм изменения данного поля зависит от ЭВМ.
Примерные алгоритмы использования буфера операндов
Алгоритм для чтения данных из ОЗУ
Пусть имеется команды чтения данных из машинного слова по физическому адресу Aисп.
- Поиск по таблице строки, содержащей адрес, совпадающий с Aисп. Если такой строки нет, то на п. 3.
- Происходит обновление кода старения. Результатом команды чтения является содержимое поля «Значение».
- По значениям поля «Код старения» осуществляется поиск строки, используемой наименее интенсивно.
- Анализируется код изменения. Если значение изменялось в таблице, то происходит запись значения по адресу в ОЗУ.
- Считывается машинное слово из ОЗУ по адресу Aисп и заполняется данная строка.
- Считанное значение является результатом выполнения команды чтения.
Алгоритм для записи данных в ОЗУ
Пусть имеется команда записи значения в машинное слово по физическому адресу Aисп.
- Поиск по таблице строки, содержащей адрес, совпадающий с Aисп. Если такой строки нет, то на п. 3.
- Значение записывается в поле «Значение». Происходит обновление полей «Признак изменения», «Код старения». Выполнения команды записи завершено.
- По значению поля «Код старения» осуществляется поиск строки, используемое наименее интенсивно.
- Анализируется код изменения. Если значение изменялось в таблице, то происходит запись значения по адресу в ОЗУ.
- Происходит обновление содержимого полей строки в соответствии с командой записи. Выполнение команды завершено.
Буферизация выборки команд
Буфер команд – минимизация обращений в ОЗУ за машинными командами.
Интерпретация одноименных полей аналогична буферу операндов.
Примерный алгоритм использования
Центральному процессору требуется для выполнения машинная команда, размещенная по физическому адресу ОЗУ Aисп.
- Поиск по таблице строки, содержащей Aисп. Если такой не то на п. 3.
- Обновление поля «Код старения», чтение поля «Значение» и передача его процессору для исполнения.
- Поиск наименее интенсивно используемой строки. Чтение машинного слова из ОЗУ по адресу Aиспи заполнение всех полей строки. Передача процессору значения для исполнения.
Конкретные реализация и алгоритмы зависят от архитектуры ЭВМ. Возможно, например, использование одного буфера.
(Регистры буферной памяти (Cache, КЭШ).
Следующая группа регистров — регистры, относящиеся к т.н. буферной памяти. Мы возвращаемся к проблеме взаимодействия процессора и оперативной памяти и сглаживанию скоростей доступа в оперативную память. Предположим, у нас есть некоторая программа, которая производит вычисление некоторого выражения, при этом, процесс вычисления этого выражения будет представим следующим образом. В какие-то моменты идут обращения за операндами в оперативную память, в какие-то моменты обработанные данные записываются в оперативную память. Есть один из нескольких путей, которые сглаживают несоответствие скоростей процессора и оперативной памяти, который заключается в сокращении реальных обращений к оперативной памяти. Процессоры содержат быстродействующую регистровую память, призванную
буферизовать обращения к оперативной памяти.
Алгоритм чтения из оперативной памяти следующий:
Проверяется наличие в специальном регистровом буфере строчки, в которой находится исполнительный адрес, совпадающий с исполнительным адресом требуемого операнда. Если такая строчка имеется, то соответствующее этому адресу значение, считается
значением операнда и передается в процессор для обработки (т.е. обращение в оперативную память не происходит).
Если такой строчки нет, то происходит обмен с оперативной памятью, и копия полученного значения помещается в регистровый буфер и помечается исполнительным адресом этого значения в оперативной памяти. Содержимое операнда поступает в процессор для обработки. При этом решается проблема размещения новой строчки. Аппаратно ищется свободная строка (но она может быть только в начале работы машины), и если таковая не найдена, запускается аппаратный процесс вытеснения из этого буфера наиболее “старой” строчки. “Старость” определяется по некоторому предопределенному критерию. Например, признаком старения может быть количество обращений к этому буферу, при котором нет обращений к этой строчке. В каждом таком случае число в третьем столбце таблицы увеличивается на единицу. Короче говоря, аппаратура решает, какую из строк надо вытолкнуть из таблицы, чтобы на ее место записать новое содержимое. При этом учитывается информация о том, были ли обращения к данной строке с использованием команд записи в память. Если такие обращения были, то перед выталкиванием происходит запись в ОЗУ по исполнительному адресу содержимого нашей строчки.
Алгоритм записи в оперативную память симметричен. Когда в программе встречается команда записи операнда в память, аппаратура выполняет следующие действия. Проверяется наличие в буфере строки с заданным исполнительным адресом. Если такая строка есть, то в поле “Содержимое” записывается новое значение и аппаратно корректируется признак старения строк. Если такой строчки нет, то запускается
описанный выше процесс выталкивания, и затем информация размещается в освободившейся строке.
Этот буфер чтения/записи служит достаточно мощным средством для
минимизации обращений к ОЗУ. Наибольший эффект достигается при небольших циклах, когда все операнды размещаются в буфере, и после этого циклический процесс работает без обращений к ОЗУ. Иногда эти буфера называют КЭШ-буферами, а также ассоциативной памятью, потому что доступ к этой памяти осуществляется не по адресу (как в ОЗУ), а по значению поля. Реально, все механизмы могут быть устроены иначе,
чем мы здесь изучаем, т.к. мы изучаем некоторую обобщенную систему.