Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 6004.doc
Скачиваний:
21
Добавлен:
30.04.2022
Размер:
1.29 Mб
Скачать

4.3.5.2Файлы и Fnodes

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

Пространство, зарезервированное для информации распределения в Fnode может содержать указатели на восемь групп секторов до 16 МБ каждая. (Этот размер является только суммой размера полосы и свободного пространства растра размещения и не является ограничением файловой системы). Маленькие файлы или сильно непрерывные файлы, следовательно, могут описываться полностью внутри Fnode.

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

Структура распределения Fnode становится корнем для B+дерева секторов распределения, которые содержат фактические указатели к группам секторов файла. Корень Fnode имеет участок памяти для 12 элементов. Каждый сектор распределения может содержать, кроме различной информации управления, не более 40 указателей на группу секторов.

Следовательно, распределение с двумя уровнями B+дерева может описывать файл, имеющий 480 (12 * 40) групп секторов с теоретическим максимальным размером 7.68Gb (12 * 40 * 16 МБ) в отдельной реализации.

Маловероятно, что B+дерева с двумя уровнями будет недостаточно для описания сильно фрагментированного файла, по необходимости файловая система будет представлять дополнительные уровни в дереве. Секторы распределения в промежуточных уровнях могут содержать не более 60 внутренних (нетерминальных) узлов. Например, 3-х уровневое распределение B+дерева может описывать файл с 28,800 (12 * 60 * 40) групп секторов.

Групповое кодирование и B+деревья сектора распределения являются эффективными с точки зрения памяти способами определять размер и расположение файла, но они имеют другие значительные преимущества. Трансляция логического смещения файла в номер сектора чрезвычайно быстра: файловая система нуждается только в списке обхода (или B+дерева списках) указателей групп до тех пор, пока она найдет правильный диапазон. Она тогда может идентифицировать сектор внутри группы простым вычислением. Групповое кодирование также делает это просто для логического расширения файла, если недавно назначенный сектор непрерывен с предыдущим последним сектором файла; файловая система просто должна инкрементировать двойное слово последнего группового указателя файла и очистить бит сектора в соответствующем растре свободного пространства.