Кэш – 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 связано с наличием у данных объективных свойств – локальность обращения, которое включает пространственную локальность (если произошло обращение по некоторому адресу, то с высокой степенью вероятности произойдет обращение к соседним адресам), временную локальность (если произошло обращение по некоторому адресу, то в ближайшее время будет обращение по этому же адресу). Однако, несмотря на свою простоту и высокое быстродействие кэш-память прямого доступа обладает большими недостатками, вытекающими из того факта, что различные строки основной памяти конкурируют за одну и ту же область кэш-памяти. Решение этих проблем достигается на пути конструирования различных видов иерархии кэш-памяти.