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

4.3.5.3Каталоги

Каталоги, подобно файлам, базируются на Fnodes. Указатели на Fnode корневой директории находится в SuperBlock. Fnodes для некорневых каталогов ищутся через элементы подкаталогов в каталогах их хозяев. Каталоги могут расти до любого размера и создаются из 2 КБ блоков каталога, которые распределяются как четыре последовательных сектора на диске. Файловая система пытается распределять блоки каталога в полосе каталогов, которая размещается близко к центру диска. Если полоса каталогов полна, блоки каталога распределяются везде, где доступно свободное пространство.

Каждый 2 КБ блок каталога содержит от одного до множества элементов каталога. Элемент каталога содержит несколько полей, включая поля времени и даты, Fnode указатель, число для использования дисковыми утилитами, длину файла или имя каталога, само имя, и указатель B-дерева. Каждый элемент начинается словом, которое содержит длину элемента, что позволяет при необходимости очень быстро обходить блок каталога.

Количество элементов в блоке каталога зависит от длины имен. Если средняя длина имени файла - 13 символов, то блок каталога будет содержать приблизительно 40 входов. Элементы в блоке каталога сортируются по полю их имени (для английского алфавита). Последний элемент в блоке каталога - фиктивная запись, которая отмечает конец блока.

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

Можно предположить следующую ситуацию для подтверждения эффективности вышеописанных методов. Примем 40 элементов на блок, тогда дерево с двумя уровнями блоков каталога может содержать 1640 элементов каталога, а дерево с тремя уровнями может содержать 65,640 элементов!!! Другими словами, специфический файл может быть найден (или показано его отсутствие) в типичном каталоге с 65,640 файлами с максимально возможными тремя совпадениями - фактическое число операций с диском зависит от содержания кэша и расположения имени файла в блоке каталога B-дерева. Это - полная противоположность FAT, где в самом плохом случае более 4000 секторов нужно прочесть, чтобы установить наличие файла в каталоге, содержащим то же самое число файлов.

Структура каталога B-дерева имеет интересные особенности при некоторых дисковых операциях. Создание файла, переименование, или стирание может приводить к каскаду сложных операций, т.к. блоки каталога добавляются или освобождаются или имена перемещаются из одного блока в другой, а файловая система должна хранить сбалансированное дерево. Теоретически операция переименования может терпеть неудачу из-за отсутствия дискового пространства, даже если файл не увеличивается. Чтобы избежать такие неприятности, HPFS поддерживает небольшой пул свободных блоков, которые могут выводиться в аварийный каталог; указатель к этому пулу свободных блоков сохраняется в SpareBlock.