MS-DOS для программиста

Кэширование дисковой памяти


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

Можно привести много примеров, когда в процессе работы программы происходит частое обращение к одним и тем же областям диска, или даже к одним и тем же секторам диска.

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

При этом когда программе в первый раз потребуется содержимое, скажем, таблицы FAT , ее можно считать в некоторый буфер. Когда эта таблица потребуется еще раз, ее не надо читать с диска, так как она уже находится в оперативной памяти.

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

Описанный выше механизм хранения в оперативной памяти наиболее часто используемых секторов диска называется кэшированием дисковой памяти или просто кэшированием диска. Существуют различные способы организации кэширования диска в MS-DOS. Все они реализуются специальными драйверами, которые необходимо подключать в файлах config.sys или autoexec.bat.

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

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


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

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

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

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


Содержание раздела