Каталоги и подкаталоги в os/2


Каталоги, подобно файлам, регистрируются в Fnodes. Для корневой директории Fnodes находится в SuperBlock. Fnodes для некорневых каталогов определяются через входы подкаталога.
Каталоги могут увеличиваться до любого размера и состоят из блоков каталога 2 КБ, которые распределяются как четыре последовательных сектора на диске. Файловая система делает попытку распределить блоки каталога в полосе каталога, которая размещается около “центра” диска. Если полоса каталога полна, блоки каталога распределяются там, где есть свободное место.
Каждый блок каталога 2 КБ состоит из большого количества входов каталога. Вход каталога содержит несколько полей, включая штампы времени и даты, Fnode указатель, длина имени каталога или файла, имя непосредственно, и указатель. Каждый вход начинается словом, которое содержит длину.
Число блоков каталога и входов различно при различной длине имени. Если средняя длина имени файла 13 символов, средний блок каталога будет содержать приблизительно 40 входов. Блоки каталога входов сортируются в двоичном лексическом порядке по полям имени в алфавитном порядке для алфавита США. Последний блок каталога входа - запись, которая отмечает конец блока.
Когда каталог получает слишком большой файл, который нужно сохранить в одном блоке, он увеличивает размер добавлением блоков 2 КБ, которые организуются как B-Tree. При поиске файловая система извлекает указатель B-Tree из входа. Если это не указатель, то поиск неудачен; иначе файловая система следует за указателем в следующий каталог и продолжает поиск.
Небольшая арифметика дает внушительную статистику. При использование 40 входов на блок, блоки каталога дерева с двумя уровнями могут содержать 1640 входов, каталога и дерева с тремя уровнями могут содержать на удивление 65640 входов. Другими словами, некоторый файл может быть найден в типичном каталоге из 65640 файлов максимум за три обращения. Это намного лучше файловой системы FAT, где в самом плохом случае более чем 4000 секторов нужно прочитать для нахождения файла.
Структура каталога B-Tree имеет интересные импликации. Создание файла, переименование или стирание может приводить к каскадированию блоков каталогов. Фактически, переименование может терпеть неудачу из-за недостатка дискового пространства, даже если файл непосредственно в размерах не увеличился. Во избежание этого “бедствия”, HPFS поддерживает маленький пул свободных блоков, которые могут использоваться при “аварии”;
Указатель на этот пул свободных блоков сохраняется в SpareBlock.