Кэш-память


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

Кэш-память

Рис. 1. 39. Кэш-память

А – адрес блока;

D – смещение внутри блока.

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

Ёмкость кэш-памяти составляет 1/500…1/100 ёмкости кэшируемой памяти, а её быстродействие 5…10 раз выше нижележащей памяти.

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

Локальность потока команд и данных, заключающийся в том, что взаимосвязанные данные в потоке команд и взаимосвязанные команды в потоке данных находятся на небольшом расстоянии друг от друга, как во времени, так и в пространстве.

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

Частотный принцип реализуется путём накопления в кэш-памяти наиболее часто используемых блоков. Если блок долго не используется, при очередной блочной пересылке его место занимают новые данные. Блок заведомо в несколько раз больше разрядности нижележащей памяти.

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

Адресное пространство кэш-памяти

Рис. 1. 40. Адресное пространство кэш-памяти

Имеется адресное пространство кэш-памяти, которое разбито на М-мест. Имеется ОП, которая разбивается на блоки (блоков больше чем мест). Причем, в одном месте в кэш-памяти помещается один блок. В кэш-памяти каждый блок снабжается тэгом, в котором записывается, хранящийся в ОП, номер блока. Это означает, что в 0-м месте может находиться 3-й блок, на 1-м месте может находиться N-1 блок в месте М-1 может ничего не находится и т.д. Возникает проблема: если вся кэш-память занята и процессор затребовал данные, которые в данный момент не находятся в кэш-памяти. Необходимо освободить место, которое занято и в него переписать, используя блочный обмен, блок который содержит кусочек требуемых данных, а потом разрешить процессору работать с этими данными в кэш-памяти. Но как выбрать это место в кэш-памяти, ведь можно попасть в то место, которое потребуется в следующий момент времени, поэтому при рассмотрении кэш-памяти говорят о стратегии замещения места. Стратегия обновления основной памяти определяет метод замещения старых данных в основной памяти новыми. Допустим, процессор записал в кэш-память какие-то данные. Освободить это место, не сохранив измененные данные в основной памяти нельзя, то есть должен быть флаг, указывающий на то, что эти данные изменены. Если необходимо освободить место, надо до этого освобождения сохранить эти данные в основной памяти, чтобы не нарушилась целостность данных, иначе процессор, программист или программа будут считать, что они эту ячейку изменили, а окажется, что они изменили кэш-память, а до основной памяти это изменение не дошло. Для решения такой проблемы необходимо выполнить стратегию обновления.