Физическое окружение вычислительной техники

       

Кэш память


Функционально кэш-память предназначена для согласования скорости работы сравнительно медленных устройств, таких, на пример, как динамическая память, с относительно быстрым микропроцессором. Дело в том, что работа большинства элементов, на которых построен процессор, во многом похожа на работу ячеек статической памяти — триггеров. Поэтому их быстродействие существенно выше, нежели элементов динамической памяти. Использование кэш-памяти позволяет избежать циклов ожидания в его работе, которые снижают производительность всей системы.

Для пользователей IBM PC-совместимых компьютеров использование кэш-памяти началось еще с 386-х микропроцессоров. Для таких устройств, синхронизируемых, например, частотой 33 МГц, тактовый период составляет приблизительно 30 нс. Обычные микросхемы динамической памяти имеют время выборки от 60 до 100 нс. Отсюда, в частности, следует, что центральный процессор вынужден простаивать 2—3 периода тактовой частоты (то есть имеет 2—3 цикла ожидания), пока информация из соответствующих микросхем памяти установится на системной шине данных компьютера. Понятно, что в это время процессор не может выполнять никакую другую работу. Такая ситуация приводит к снижению общей производительности системы, что, разумеется, крайне нежелательно. Таким образом, узким местом системы становится оперативная динамическая память. Из этого положения существует, казалось бы, простой выход — использовать в качестве основной памяти достаточно быструю статическую. Однако если основную оперативную память выполнить на микросхемах статической памяти, то стоимость компьютера возрастет очень существенно. Таким образом, с помощью технологии обработки, использующей кэш-память, найден определенный компромисс между стоимостью и производительностью системы.

Заметим, что работа кэш-памяти практически "прозрачна" (то есть невидима) для пользователя. Тем не менее, она очень важна. В IBM PC-совместимых компьютерах технология использования кэш-памяти помимо обмена данными между микропроцессором и основной оперативной памятью находит применение также между основной оперативной памятью и внешней (накопителями на сменных и несменных носителях).


Архитектура кэш-памяти

Прежде чем говорить об архитектуре кэш-памяти, введем такое понятие, как длина строки-кэша (cache-line). Если при обмене данными между устройствами речь обычно идет о блоке информации, то для кэш-памяти существует некий набор данных, называемых строкой. Итак, архитектура кэш-памяти определяется тем, каким образом достаточно большая по размеру основная память отображается на сравнительно небольшой кэш. Существуют, вообще говоря, три разновидности отображения: кэш-память с прямым отображением (direct-mapped cache), частично, или наборно-ассоциативная (set-associative cache) и полностью ассоциативная (fully associative cache). Все эти архитектуры так или иначе используются для построения кэш-памяти современных микропроцессоров.

Кэш-память с прямым отображением

Самой простой организацией обладает кэш-память с прямым отображением. В этом случае адрес памяти полностью определяет используемую строку кэша. Таким образом, один или несколько блоков оперативной памяти строго соответствуют одной строке кэша, однако поскольку занимать ее в одно и то же время может только один из них, то для каждой строки используется специальный признак — тег (tag).

Преимуществом реализации такого типа архитектуры являются довольно низкие затраты, поскольку, по сути, требуется всего лишь одна операция сравнения (для тегов). Недостатки ее, впрочем, также очевидны. Например, если два блока данных основной памяти, используемые одинаково часто, претендуют на одну и ту же строку в кэше. Внешняя кэш-память с прямым отображением использовалась, например, вместе с 386-ми процессорами (кэш-контроллер 182385), а внутренняя — в микропроцессоре DEC Alpha 21064.

Полностью ассоциативная архитектура

Другим типом архитектуры является полностью ассоциативная кэш-память. В этом случае любой блок памяти может занимать любую строку кэша. Полный адрес памяти делится только на две части: младшие разряды — смещение в строке и старшие разряды — информация о теге. В этой архитектуре решена проблема конфликтов адресов, однако сама кэш-память требует для своей реализации больших аппаратных затрат, поскольку значения тегов должны уже сравниваться для всех линий кэша.


Тем не менее, микропроцессор 6x86 фирмы Cyrix, имел вторичную встроенную 256-байтную кэш память для команд, которая имела полностью ассоциативную архитектуру.

Наборно-ассоциативная архитектура

Разумным компромиссом между двумя рассмотренными архитектурами является наборно-ассоциативная организация кэш-памяти. В этом случае несколько линий (две, четыре, пять, восемь) объединяются в наборы, и средние биты адреса памяти определяют уже не конкретную линию (как в прямом отображении), а набор. Сравнение тегов (со значением старших разрядов) производится только для линий, входящих в набор. Подобную архитектуру имеет подавляющее число процессоров, например 486DX, 486DX2, Intel DX4, Pentium и т.д.

По количеству линий кэша, входящих в набор, подобная архитектура может называться 2-входовой (2-way set associative), 4-входовой (4-way set associative) и т.д.

Обновление информации

Каждый раз, когда микропроцессору требуется информация, отсутствующая в кэше (cache-miss), он вынужден обращаться через системную шину к основной оперативной памяти. После этого обычно решается, должна ли происходить замена строки в кэш-памяти и какая конкретно строка кэша будет заменена. В подавляющем большинстве случаев об этом заботится встроенный в контроллер LRU-алгоритм (Last Recently Used), который обновляет именно ту строку кэша, которая используется менее интенсивно.


Содержание раздела