Где может размещаться блок в кэш-памяти?


Способы организации кэш-памяти

Чтобы описать некоторый уровень иерархии памяти надо ответить на следующие четыре вопроса:

1. Где может размещаться блок на верхнем уровне иерархии? (размещение блока).

2. Как найти блок, когда он находится на верхнем уровне? (идентификация блока).

3. Какой блок должен быть замещен в случае промаха? (замещение блоков).

4. Что происходит во время записи (стратегия записи)?

Рассмотрим организацию кэш-памяти в общем случае, отвечая на четыре вопроса об иерархии памяти.

Принципы размещения блоков в кэш-памяти определяют три основных типа их организации:

· Если каждый блок основной памяти имеет только одно фиксированное место, на котором он может появиться в кэш-памяти, то такая кэш-память называется кэшем с прямым отображением (direct mapped). Это наиболее простая организация кэш-памяти, при которой для отображения адресов блоков основной памяти на адреса кэш-памяти просто используются младшие разряды адреса блока. Таким образом, все блоки основной памяти, имеющие одинаковые младшие разряды в своем адресе, попадают в один блок кэш-памяти (сегментирование). Скорость поиска данных в таком кэше достаточно высока, однако последовательный опрос нескольких ячеек ОП которым соответствует только одна ячейка кэша, предполагает каждый раз обращаться к медленной ОП.

· Если некоторый блок основной памяти может располагаться на любом месте кэш-памяти, то кэш называется полностью ассоциативным (fully associative). Когда процессор запрашивает данные из ОП, начинается поиск во всех ячейках кэша. Если кэш не содержит искомой информации, она считывается из ОП и одновременно записывается в ячейку кэша к которой дольше всего не было обращений. Скорость поиска данных в ассоциативном кэше меньше, чем в кэше прямого отображения. Преимуществом ассоциативного кэша является то, что в нем всегда хранится та информация к которой в последнее время производился доступ.

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

На рис. 7.7 приведена структура кэш i486 [21], выполненная по схеме четырех направлений 0, 1, 2, 3. Каждое направление содержит множество из 128 строк размерностью по 16 байт. Другими словами, кэш-память процессора i486 представляет собой четырех направленную ассоциативную по множеству память. Это означает, что блок данных из конкретной ячейки основной памяти может хранится в любой из четырех ячеек кэш-памяти. Ассоциация по четырем направлениям является компромиссом между скоростью кэш-памяти с прямым отображением и высоким коэффициентом попаданий полностью ассоциативной кэш-памяти. Иными словами, реализованная в i486 кэш-память обеспечивает быстрый поиск данных и высокий процент попаданий. Кэш-память состоит из трех блоков: блок данных, блок тэгов и блок достоверности.

Блок данных: Состоит из четырех массивов (направлений), каждый из которых содержит 128 строк. (cash line). Четыре строки образуют множество. Каждая строка содержит данные из 16 последовательных адресуемых байтов данных памяти, начиная с адреса кратного 16. Индекс массива блока данных, состоящий из 7 бит, соответствует 4 строкам кэша, по одной из каждого массива. Четыре строки кэша с одним и тем же индексом называются множеством. Таким образом, объем кэш-памяти равен 8 Кбайт, т.е. 16 байт*4*128=8192 б =8 Кбайт.

 

Блок достоверности/ Блок тегов множество Блок данных направление

LRU 0 1 2 3 L0 L1 L2 L3

0

1

2

 

 

k

       
   
 

 


126

127

 
 

 

 


LRU xxxxx
0

Данные 16 байт
D1

1

D2

0 выбор байта

D3

       
 
   
 


0 D4

           
   
   
 
 
   
 

 


DCC

31 21 11 10 4 3 0

 
 

 

 


Рис. 7.7 Внутренний кэш i486

Блок тэгов: 128 строк тэгов, каждый тэг состоит из 21 бита, и тоже 4 массива.

Блок достоверности: содержится по одному 7-ми битному значению для каждого из множеств кэш-памяти.

· 4 бита отмечают достоверны или не достоверны соответствующие строки.

· 3бита LRUотслеживают использование (чтение / запись) данных во множестве.

 

LRU обновляется при каждом попадании в кэш-память или заполнении строки. При очистке кэш-памяти все биты LRU сбрасываются в 0, т.е. все строки не достоверны. Когда производится заполнение строки кэш-памяти, то выбирается недостоверная строка, если недостоверных строк нет, то перезаписываемую строку выбирают по битам LRU.