Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OS.DOC
Скачиваний:
25
Добавлен:
28.10.2018
Размер:
653.82 Кб
Скачать
    1. Буфер кеш-памяти

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

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

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

Можно также представить себе ситуацию, когда процесс "зависает" в ожидании получения доступа к буферу. В случае, например, если несколько процессов приостанавливаются, ожидая освобождения буфера, ядро не гарантирует, что они получат доступ к буферу в той очередности, в которой они запросили доступ. Процесс может приостановить и возобновить своё выполнение, когда буфер станет свободным, лишь с той целью, чтобы приостановиться вновь из-за того, что другой процесс первым получил управление над буфером. Теоретически так может продолжаться вечно, но практически такой проблемы не возникает в связи с тем, что в системе обычно заложено большое количество буферов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]