Политика записи при кэшировании
При чтении данных кэш-память даёт однозначный выигрыш в производительности. При записи данных выигрыш можно получить только ценой снижения надёжности. Поэтому в различных приложениях может быть выбрана та или иная политика записи кэш-памяти..
Существуют две основные политики записи кэш-памяти — сквозная запись (write-through) и отложенная записи:
1.Сквозная запись — запись производится непосредственно в основную память (и дублируется в кэш), то есть запись не кэшируется.
2.Отложенная запись — запись данных производится в кэш. Запись же в основную память производится позже, группируя в одной операции несколько операций записи в соседние ячейки. Технология обратной записи на некоторое время делает данные в основной памяти неактуальными, для самого ЦП эти неактуальности не заметны, но перед обращением к памяти другого ведущего системной шины кэш должен быть записан в память принудительно. При использовании обратной записи в многопроцессорной системе кэши различных ЦП должны быть согласованы (или процессоры должны использовать одну кэш-память).
|
|
Алгоритм работы кэша с отложенной записью
Изначально все заголовки буферов помещаются в список свободных буферов. Если процесс намеревается прочитать или модифицировать блок, то он выполняет следующий алгоритм:
- пытается найти в хеш-таблице заголовок буфера с заданным номером;
- в случае, если полученный буфер занят, ждёт его освобождения;
- в случае, если буфер не найден в хеш-таблице, берёт первый буфер из хвоста списка свободных;
- в случае, если список свободных буферов пуст, то выполняется алгоритм вытеснения;
- в случае, если полученный буфер помечен как «грязный», выполняет асинхронную запись содержимого буфера во внешнюю память.
- удаляет буфер из хеш-таблицы, если он был помещён в неё;
- помещает буфер в хеш-таблицу с новым номером.
Процесс читает данные в полученный буфер и освобождает его. В случае модификации процесс перед освобождением помечает буфер как «грязный». При освобождении буфер помещается в голову списка свободных буферов.
Таким образом:
- если процесс прочитал некоторый блок в буфер, то велика вероятность, что другой процесс при чтении этого блока найдёт буфер в оперативной памяти;
- запись данных во внешнюю память выполняется только тогда, когда не хватает «чистых» буферов, либо по запросу.