Дисковый буфер

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

Так как объем памяти, к сожалению, ограничен, то дисковый буфер обычно не может быть очень больших размеров. Когда буфер переполняется, то неиспользуемые данные стираются и память освобождается для другой информации. Дисковая буферизация также работает и на запись. С одной стороны, записанные данные часто вскоре считываются снова (например, исходный текст программы записан в файл, а затем считан компилятором). С другой стороны, если данные только помещать в буфер и не записывать их на диск, то это повышает скорость обмена с диском программ, часто работающих с записью на диск. Запись данных может быть произведена в фоновом режиме, без замедления выполнения других программ.

У большинства операционных систем существует дисковый буфер (хотя он может называться по другому), но не все из них работают по описанным выше алгоритмам. Некоторые из них бывают с прямой записью, т.е. данные записываются на диск сразу (хотя, конечно, они хранятся в буфере). Другие бывают с обратной записью, т.е. запись данных на диск производится позднее. Буферы с обратной записью более эффективны, чем с прямой, но и более склонны к ошибкам: при поломке компьютера или отключении питания, изменения, произведенные в буфере, чаще всего теряются. Это может привести к повреждению файловой системы. Поэтому не следует выключать питание компьютера без предварительного запуска специальной процедуры завершения работы. Команда sync(8) записывает содержимое буфера на диск для того, чтобы удостовериться, что все данные перенесены на диск. В традиционных UNIX системах существует программа, выполняющаяся в фоновом режиме, которая выполняет команду sync каждые 30 секунд, поэтому обычно в ее применении нет необходимости. В системе Linux существует дополнительная программа-демон, которая выполняет команду sync не полностью и более часто во избежание внезапного замедления работы всей системы во время обмена данными с диском, как это иногда случается со стандартной командой sync.

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

Эффективность буферизации в основном определяется объемом буфера. Маленький буфер практически не дает выигрыша: он хранит настолько мало информации, что она стирается прежде чем может быть использована повторно. Критический размер определяется по объему считываемых и записываемых данных, а также как часто производится доступ к одинаковой информации.

Если используется буфер фиксированного объема, то его не следует менять, так как это может привести к значительному уменьшению свободной памяти и увеличению обмена данными между памятью и swap областью (что также замедляет работу системы). Для увеличения эффективности использования физической памяти, Linux автоматически использует весь ее свободный объем под буфер и уменьшает его, если она требуется программам.

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

Примечание:
Цифра в скобках указывает на раздел в руководстве man, где можно найти детальное описание данной команды.