Кэш – 256 байт ОП – 4 Кбайт


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

Самый простой тип кэш-памяти – это кэш прямого отображения, когда любая строка из ОП может появиться только на одном месте кэша. Пусть кэш-память содержит 16 строк по 16 байт. Каждый элемент кэша (строка) вмещает ровно одну строку из ОП. В этом случае мы имеем кэш-память объемом 256 байт на которую должен быть отображен объем 4 Кбайт ОП (Рис.6.3)

Адрес строки кэша Адрес блока и строки

15…………………………0 байт 15……………………….0 байт

1111 15,31… 1111 1111 255

1110

- 0011 0000 48

-

-

0111 7,23,39,… 0010 0001 33

- 0010 0001 32

-

-

0001 1,17,33,…

0000 0,16,32,… 0001 0001 17

0001 0000 16

16 байт

 

0000 0001 1

0000 0000 0

       
 
   


Тэг Строка Слово(байт)

Рис. 7.4 Отображение пространства ОП на пространство кэш-памяти.

 

Очевидно, что при таком отображении основной памяти на память кэша каждому блоку (по объему) ОП отводится одна строка кэш-памяти.

Предположим, процессор обращается по адресу 0010 0001 0110,в этом случае мы должны проверить 1-ую строку кэша (0001) и если в ней находится нужная строка памяти, то считать 5-ый байт (0110). Но в этой строке кэша могут быть представлены 1,17,33 и т.д. строки из основной памяти. Как же узнать, какая именно строка записана в кэш? Для этого служит информация представленная в тэге (tag), четыре бита в нашем случае (0010), т.е. это 33 строка (0010 0001) и никакая другая. Таким образом, физический адрес разбивается на несколько частей:

 
 

 

 


Структура кэш-памяти для нашего случая будет иметь вид как на рисунке 3.6.

 

Адрес Блок Тэг Данные Адреса, которые использует

строки достоверности этот элемент


1111 15, 31, 47,….

-

-

-

-


0001 1, 17, 33,…

0000 0, 16, 32,…

 

Рис. 7.5 Кэш-память прямого отображения

 

Из рисунка видно, что в первую строку кэша можно помещать только первую, семнадцатую, тридцать третью и т.д. строки основной памяти.

Каждый элемент кэш-памяти состоит из четырех частей:

· адрес строки кэша;

· блок достоверности, управляющая информация (указывает есть ли достоверные данные в элементе или нет, и т.д.);

· поле «Тег», указывает соответствующую строку памяти, из которой поступили данные;

· поле «Данные» содержит копию данных основной памяти, поле данных вмещает одну строку в 16 байт.

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

Для каждой строки в кэш-памяти должен храниться один управляющий бит, называемый битом достоверности. При включении питания системы и при загрузке с диска в ОП все биты достоверности устанавливаются в ноль. Когда строка кэша в первый раз загружается из ОП, его бит достоверности устанавливается в 1. Если блок ОП обновляется из другого источника (например, из ЖД), минуя кэш, система проверяет, находится ли загружаемый блок в кэше. Если нет, его бит достоверности устанавливается в 0, чтобы в кэш-памяти не оказалось устаревших данных.

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

· если данные обнаруживаются в кэше, т.е. произошло кэш-попадание (cache-hit), они считываются из нее и результат передается источнику запроса;

· если нужные данные отсутствуют в кэш-памяти, т.е. произошел кэш-промах (cache-miss), они считываются из основной памяти и одновременно копируются из ОП в кэш.

На практике в кэш-память считывается не один элемент данных, к которому произошло обращение, а целый блок данных, что увеличивает вероятность попадания в кэш. Покажем на примере эффективность применения кэш-памяти. Пусть имеется ОП со средним временем доступа t1=60,0 нс и кэш-память, имеющая время доступа к данным t2=12,0 нс, а p – вероятность кэш-попадания, причем p=0,8, тогда среднее время доступа к данным t в системе с кэш-памятью равно:

 

t = t1 ­(1-p) + t2p = 60,0*0,2 + 12,0*0,8 = 21,6 нс

 

Очевидно, что полученное среднее время доступа к такой системе больше чем среднее время доступа непосредственно к кэшу, но значительно меньше времени доступа к ОП. В реальных системах вероятность попадания в кэш близка к 0,9. Столь высокое значение hit rate связано с наличием у данных объективных свойств – локальность обращения, которое включает пространственную локальность (если произошло обращение по некоторому адресу, то с высокой степенью вероятности произойдет обращение к соседним адресам), временную локальность (если произошло обращение по некоторому адресу, то в ближайшее время будет обращение по этому же адресу). Однако, несмотря на свою простоту и высокое быстродействие кэш-память прямого доступа обладает большими недостатками, вытекающими из того факта, что различные строки основной памяти конкурируют за одну и ту же область кэш-памяти. Решение этих проблем достигается на пути конструирования различных видов иерархии кэш-памяти.