Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PRILOZhYeNIYe_2.doc
Скачиваний:
11
Добавлен:
10.07.2019
Размер:
337.92 Кб
Скачать

Выделение блоков

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

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

Одним из новшеств ext4 является множественное выделение блоков, что подразумевает поиск длинного непрерывного пространства на диске. Перед запросом на выделение блоков количество требуемых блоков нормализуется, т. е. выделяется больше блоков, чем файлу необходимо. Лишние блоки добавляются в список зарезервированных блоков для файла. Нормирование запроса происходит либо на основе данных о файле (если используется индивидуальное выделение блоков), либо, для группового выделения, на основе постоянной величины в 512 блоков. Эта величина содержится в /sys/fs/ext4/<partition/mb_group _prealloc и может быть изменена.

При выделении блоков ищется группа с наиболее длинной последовательностью блоков и именно она выбирается. Для большей безопасности записи все остальные операции поиска экстента в других группах и в этой блокируются, пока система не завершит выделение [18].

Резервирование блоков

Некоторые приложения, например базы данных или потоковые медиапрограммы, нуждаются в выделении блоков для файла заранее, при этом не инициализируя блоков данными или нулями. Предварительное выделение гарантирует, что под файл будет выделено столько непрерывного дискового пространства, сколько возможно. Эта функция полезна, если приложению заранее известно, сколько пространства необходимо будет выделить под файл. Файловая система интерпретирует выделенные, но неинициализированные блоки как заполненные нулями. Предварительное выделение должно быть устойчиво к перезагрузкам [16].

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

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

В ext4 можно выделить два вида резервирования блоков: групповое и индивидуальное для конкретного индексного дескриптора. В зависимости от размера файла система решает, делать ли групповое или индивидуальное резервирование. Порог этот по умолчанию равен 16 блокам. Если файл займет на диске меньше 16 блоков, происходит групповое резервирование для того, чтобы маленькие файлы лежали на диске как можно ближе друг к другу. Пороговое значение может быть изменено в разделе /sys/fs/ext4/<partition>/mb_stream_req.

Дескриптор резервирования содержит информацию о типе резервирования (групповое или индивидуальное), список индексных дескриторов или групп, начале и длине последовательности блоков.

Дескриптор резервирования активен, пока блок не будет помечен на битовой карте как занятый. Дескриптор меняется только после того, как изменена битовая карта [18].

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