Принцип действия кэш-памяти

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

· элементы данных;

· адрес, который этот элемент имеет в основной памяти;

· дополнительную информацию, которая используется для реализации алгоритма включает признак модификации и признак действительности данных.

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

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

Далее возможны два варианта развития:

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

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

Эффективность кэширования зависит от вероятности попадания в кэш.

Принцип действия кэш-памяти - №1 - открытая онлайн библиотека

Если обозначить вероятность кэш-попадания через p, а время доступа к основной памяти через t1, время доступа через t2, то по формуле полной вероятности среднее время доступа будет равно:

t=t2p+t1(1-p)

Если p=1, время доступа равно t2.

Вероятность обнаружения данных в кэше зависит от различных факторов, таких как:

· объем кэша;

· объем кэшируемой памяти;

· алгоритм замещения данных в кэше;

· особенностей выполняемой программы и т.п.

На практике процент попаданий оказывается весьма высоким – порядка 90%. Такой процент объясняется наличием у данных объективных свойств таких как пространственной и временной локальности.

Пространственная локальность. Если произошло обращение по некоторому адресу, то с высокой вероятностью в ближайшее время произойдет обращение по соседним адресам.

Временная локальность. Если произошло обращение по некоторому адресу, то следующее обращение по тому же адресу с большой вероятностью произойдет в ближайшее время.

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

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

Наличие в компьютере двух копий данных – в основной памяти и в кэше – порождает проблему согласования данных.

Существует два подхода к решению этой проблемы:

· сквозная запись (write through). При запросе к основной памяти (в том числе при записи) просматривается кэш. Если данные по запрашиваемому адресу отсутствуют, запись выполняется только в основную память. Если данные находятся в кэше, запись делается и в кэш ив память.

· обратная запись (write back). Выполняется просмотр кэша, если данных там нет, то запись делается в основную память. В противном случае запись делается только в кэш. При этом устанавливается признак модификации. При вытеснении данных из кэша эти данные будут переписаны в основную память.