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

Формат дерева экстентов

Экстент представляет собой непрерывную последовательность блоков, идентифицируемую номером первого блока последовательности и длиной последовательности.

Один экстент может адресовать до 128 Мб. Для отображения файлов большего размера используется структура дерева. Экстенты хранятся в узлах дерева. Конечные узлы, содержащие указатели на сами экстенты, называются «листьями», остальные узлы, содержащие указатели на другие узлы дерева, называются «индексами» [16].

Каждый узел, лист или индекс, даже хранимый непосредственно в индексном дескрипторе, начинается с заголовка узла, представленного в табл. П.2.13. Формат экстента представлен в табл. П.2.14, а формат индекса экстента – в табл. П.2.15.

Таблица П.2.13

Формат заголовка узла

Размер поля, байт

Поле

2

Магическое число 0хF30A

2

Число входов

2

Максимальное число входов

2

Глубина дерева

4

Поколение дерева (пока не используется)

Таблица П.2.14

Формат экстента

Размер поля, байт

Поле

4

Первый логический блок экстента

2

Длина экстента

2

Старшие 16 битов номера физического блока

4

Младшие 32 бита номера физического блока

Таблица П.2.15

Формат индекса экстента

Размер поля, байт

Поле

4

Номер логического блока, с которого начинается индекс

4

Указатель на физический блок следующего уровня

2

Старшие 16 битов физического блока

2

Зарезервировано

Максимально возможное число блоков, которые может адресовать один экстент, составляет , поскольку старший значащий бит в поле «длина экстента» используется для указания на неинициализированный (зарезервированный) экстент. Если это поле принимает максимальное значение, т. е. 0x8000, то, несмотря на единичное значение старшего значащего бита, это инициализированный экстент, имеющий длину 32768. Таким образом, максимальная длина инициализированного экстента – 32768, а неинициализированного – 32767.

На рис. П.2.7 представлено дерево экстентов, состоящее из основных описанных выше структур [17].

Рис. П.2.7. Структура дерева экстентов

После того как ФС смонтирована, все новые файлы создаются с картой экстентов.

Карта экстентов – не слишком эффективный способ хранения разрозненных или сильно фрагментированных файлов. Разработчики собираются ввести новый тип экстента, с картой блоков. Другое магическое число в заголовке экстента будет определять новый тип «листа», содержащего список номеров выделенных блоков, так, как это делается сейчас в ext3 [17]. Карта блоков по-прежнему доступна из ext4, если в индексном дескрипторе не выставлен флаг EXTENTS_FL.

Принципы выделения блоков и индексных дескрипторов

В ext4 алгоритмы выделения блоков подчиняются принципам уменьшения фрагментации диска и уменьшению времени обращения к файлам.

Исходные коды ядра содержат разнообразные алгоритмы выделения (аллокации) блоков. За выделение блоков группами (множественное выделение блоков) отвечает так называемый аллокатор Орлова.

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

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

Если группа блоков еще не инициализирована при выделении в ней индексного дескриптора, она помечается как инициализированная [15].

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