Кэширование внешних накопителей




Многие периферийные устройства хранения данных используют кэш для ускорения работы, в частности, жёсткие диски используют кэш-память от 1 до 64 Мбайт, устройства чтения CD/DVD/BD-дисков также кэшируют прочитанную информацию для ускорения повторного обращения. Операционная система также использует часть оперативной памяти в качестве кэша дисковых операций (в том числе для внешних устройств, не обладающих собственной кэш-памятью, в том числе жёстких дисков, flash-памяти и гибких дисков).

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

1. скорость доступа процессора к оперативной памяти во много раз больше, чем к памяти внешних накопителей;

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

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

4. для некоторых блоков памяти внешних накопителей не требуется непосредственной записи после модификации, и использование кэша для таких блоков оптимизирует использование ввода-вывода. [5]


 

Кэширование, выполняемое операционной системой

Кэш оперативной памяти состоит из следующих элементов:

1. набор страниц оперативной памяти, разделённых на буферы, равные по длине блоку данных соответствующего устройства внешней памяти;

2. набор заголовков буферов, описывающих состояние соответствующего буфера;

3. хеш-таблицы, содержащей соответствие номера блока заголовку;

4. списки свободных буферов.

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

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

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

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

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

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

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

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

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

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

 

 

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

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

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

 

Алгоритм вытеснения

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

1. LRU (Least Recently Used) — вытесняется буфер, неиспользованный дольше всех;

2. MRU (Most Recently Used) — вытесняется последний использованный буфер;

3. LFU (Least Frequently Used) — вытесняется буфер, использованный реже всех;

4. ARC (Adaptive Replacement Cache) — алгоритм вытеснения, комбинирующий LRU и LFU, запатентованный IBM.

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


 

2. ПРАКТИЧЕСКАЯ ЧАСТЬ



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: