Программная реализация кеш – памяти

Политика записи при кэшировании

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

Существуют две основные политики записи кэш-памяти — сквозная запись (write-through) и отложенная записи:

1.Сквозная запись — запись производится непосредственно в основную память (и дублируется в кэш), то есть запись не кэшируется.

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

Алгоритм работы кэша с отложенной записью

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

- пытается найти в хеш-таблице заголовок буфера с заданным номером;

- в случае, если полученный буфер занят, ждёт его освобождения;

- в случае, если буфер не найден в хеш-таблице, берёт первый буфер из хвоста списка свободных;

- в случае, если список свободных буферов пуст, то выполняется алгоритм вытеснения;

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

- удаляет буфер из хеш-таблицы, если он был помещён в неё;

- помещает буфер в хеш-таблицу с новым номером.

Процесс читает данные в полученный буфер и освобождает его. В случае модификации процесс перед освобождением помечает буфер как «грязный». При освобождении буфер помещается в голову списка свободных буферов.

Таким образом:

- если процесс прочитал некоторый блок в буфер, то велика вероятность, что другой процесс при чтении этого блока найдёт буфер в оперативной памяти;

- запись данных во внешнюю память выполняется только тогда, когда не хватает «чистых» буферов, либо по запросу.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: