Во время инициализации системы
ядро выделяет место под
совокупность буферов, потребность
в которых определяется в
зависимости от размера памяти и
производительности системы. Каждый
буфер состоит из двух частей:
области памяти, в которой хранится
информация, считываемая с диска, и
заголовка буфера, который
идентифицирует буфер. Поскольку
существует однозначное
соответствие между заголовками
буферов и массивами данных, в
нижеследующем тексте используется
термин "буфер" в ссылках как на
ту, так и на другую его
составляющую, и о какой из частей
буфера идет речь будет понятно из
контекста. Информация в буфере
соответствует информации в одном
логическом блоке диска в файловой
системе, и ядро распознает
содержимое буфера, просматривая
идентифицирующие поля в его
заголовке. Буфер представляет
собой копию дискового блока в
памяти; содержимое дискового блока
отображается в буфер, но это
отображение временное, поскольку
оно имеет место до того момента,
когда ядро примет решение
отобразить в буфер другой дисковый
блок. Один дисковый блок не может
быть одновременно отображен в
несколько буферов. Если бы два
буфера содержали информацию для
одного и того же дискового блока,
ядро не смогло бы определить, в
каком из буферов содержится
текущая информация, и, возможно,
возвратило бы на диск некорректную
информацию. Предположим, например,
что дисковый блок отображается в
два буфера, A и B. Если ядро запишет
данные сначала в буфер A, а затем в
буфер B, дисковый блок будет
содержать данные из буфера B, если в
результате операций записи буфер
заполнится до конца. Однако, если
ядро изменит порядок, в котором оно
копирует содержимое буферов на
диск, на противоположный, дисковый
блок будет содержать некорректные
данные. Заголовок буфера (Рисунок 3.1)
содержит поле "номер
устройства" и поле "номер
блока", которые определяют
файловую систему и номер блока с
информацией на диске и однозначно
идентифицируют буфер. Номер
устройства - это логический номер
файловой системы (см.
раздел 2.2.1), а не физический номер
устройства (диска). Заголовок
буфера также содержит указатель на
область памяти для буфера, размер
которой должен быть не меньше
размера дискового блока, и поле
состояния, в котором суммируется
информация о текущем состоянии
буфера. Состояние буфера
представляет собой комбинацию из
следующих условий: В заголовке буфера также
содержатся два набора указателей,
используемые алгоритмами
выделения буфера, которые
поддерживают общую структуру
области буферов (буферного пула), о
чем подробнее будет говориться в
следующем разделе. Предыдущая
глава || Оглавление
|| Следующая глава
3.1 ЗАГОЛОВКИ БУФЕРА
Рисунок 3.1. Заголовок буфера