Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 700363.doc
Скачиваний:
16
Добавлен:
01.05.2022
Размер:
3.69 Mб
Скачать

Структура блока и очередей дискового кэша

Перечисленные требования определяют структуру блока дискового кэша, показанную на рис. 44.

Рис.44. Структура блока дискового кэша

Флаги состояния определяют текущее состояние блока дискового кэша. Для работы алгоритма управления системным дисковым кэшем, должны быть определены, как минимум, следующие два флага:

  • флаг блокировки – устанавливается, если блок дискового кэша заблокирован;

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

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

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

Структура очередей дискового кэша поясняется на рис. 45.

Рис.45. Структура очередей блоков дискового кэша

На рис. 45 заштрихованы занятые (заблокированные) блоки дискового кэша – т.е. такие блоки с которыми была начата, и все еще не завершена операция обмена данными. Блоки дискового кэша могут оказаться заблокированными по двум причинам: 1) процесс начал обмен с дисковым кэшем, но затем оказался снятым с выполнения, так и не завершив операции с кэшем; 2) ожидается завершение асинхронного обмена с диском в режиме прямого доступа к памяти.

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

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

Работа системного дискового кэша

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

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

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

Рассмотрим указанные исходы более внимательно:

  1. В кэше найден блок дискового кэша, соответствующий требуемому дисковому блоку, и этот блок дискового кэша свободен. Найденный блок кэша блокируется, и выполняется пересылка данных между блоком дискового кэша и адресным пространством процесса. После этого блок дискового кэша освобождается. Если содержимое блока дискового кэша изменилось (была запись на диск), то в данном блоке дискового кэша выставляется флаг отложенной записи.

Рис.46. Возможные исходы при поиске дискового блока в кэше

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

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

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

  4. Если флаг отложенной записи сброшен – заблокировать блок дискового кэша, включить его в соответствующую хэш-очередь и инициировать асинхронное чтение. Ждать освобождения данного блока дискового кэша.

Алгоритм, реализующий описанную логику работы, показан на рис. 47.

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

Рис.47. Алгоритм работы дискового кэша

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

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