HPFS – High Perfomance File System – высокопроизводительная ФС. Впервые появилась в ОС OS/2. Разработана лучшими
специалистами IBM и Microsoft как система для многозадачного режима и обеспечения высокой производительности при
работе с дисками больших объемов. Она стала первой системой, в которой реализована поддержка длинных имен. Она об-
ладает типичной структурой каталогов, однак4о поддерживает их автоматическую сортировку и расширенные атрибуты
файлов, позволяющие хранить дополнительную информацию о файле, например сопоставленное с файлом графическое изо-
бражение, описание файла, комментарий и др. В итоге такая организация позволяет упростить обеспечение безопасности и
создание множественных имен. Используется несколько базовых идей: каталоги размещаются в середине диска; для поиска
используются бинарные сбалансированные деревья; информация о местоположении файловых записей рассредоточено по
всему диску а записи файла располагаются по возможности в смежных секторах и поблизости от данных о его местоположе-
нии. Это существенно сокращает время позиционирования головок и время ожидания пока под головкой не окажется нуж-
ный сектор. Структура раздела HPFS следующая: загрузочный блок (boot block секторы 0-15, содержит имя тома, серийный
номер, блок параметров BIOS, программу начальной загрузки), дополнительный блок (super block, сектор 16, содержит ука-
затели на список битовых карт, список сбойных блоков, полосу каталогов, файловый узел корневого каталога, дату послед-
ней проверки раздела утилитой, размер полосы), резервный блок (17 сектор, содержит указатели на карту аварийного заме-
щения, список свободных запасных блоков каталогов для операций на сильно заполненном диске, ряд системных флагов и
дескрипторов, обеспечивает высокую отказоустойчивость системы, позволяя восстанавливать поврежденные данные и пере-
носить их в другое место), полоса 1, битовая карта 1, битовая карта 2, полоса 2, полоса 3, битовая карта 3, битовая карта 4,
полоса 4 и т.д. Вначале идет несколько управляющих блоков, далее пространство разбито на области из смежных секторов –
полос, в которой расположены данные файлов и вспомогательная служебная информация о свободных или занятых секторах
полосы. Полоса занимает 8 Мб диска и имеет свою битовую карту занятости секторов. Такая структура позволяет размес-
тить в непрерывном пространстве файл размером до 16Мб.
Файлы и каталоги базируются на файловом узле. Каждый файл и каталог имеют свой файловый узел, занимающий 1 сектор,
расположенный поблизости от файла, обычно сразу перед ним. Он содержит размер файла, первые 15 символов имени фай-
ла, специальную служебную информацию, статистику по доступу к файлу, расширенные атрибуты и список управления дос-
тупом либо его часть. Если расширенные атрибуты занимают много место, они выносятся отдельно, а узел содержит только
указатель на них. Если файл непрерывен, он описывается в узле 2 32 разрядными числами – указатель на первый блок файла,
и длину непрерывного экстента (число последовательных блоков файла). Для фрагментированного файла узел содержит не-
сколько таких пар. Для того, чтобы файл по возможности оставался непрерывным, в конце каждого из них система старается
зарезервировать пространство хотя бы в 4 Кб для роста. В узле помещается информация максимум о 8 экстентах. Если их
больше, в узел помещается указатель на блок размещения, содержащий до 40 указателей на экстенты или на другие блоки
размещения. Полоса каталогов находится в середине диска. Если она заполняется полностью, HPFS использует и другие по-
лосы. Поскольку обращения к каталогам наиболее часты, а размещение такой информации в середине диска в среднем сни-
жает время позиционирования в 2 раза, то производительность уже значительно возрастает.
Структура каталога представляет сбалансированное бинарное дерево, записи в котором расположены в алфавитном порядке.
Если в FAT для поиска файла требуется в среднем просмотреть N/2, в худшем - N записей, то здесь соответственно Int[log
2
N]
в худшем случае. Каждая запись дерева содержит атрибуты файла, указатель на соответствующий файловый узел, информа-
цию о дате и времени создания файла, обновления и обращения, об объеме расширенных атрибутов, счетчик обращений к
файлу, длина имени и само имя, другую информацию. При переименовании файла может потребоваться перебалансировка
дерева. В результате, если диск переполнен, может не хватить дискового пространства для этой операции. Поэтому исполь-
зуется небольшой пул свободных блоков, указатель на который хранится в резервном блоке. Для исправления ошибок ис-
пользуется механизм аварийного замещения HotFix. Если при записи обнаруживается сбойный сектор, информация записы-
вается в один из резервных секторов. Карта аварийного замещения представляет собой пару номеров – первый это номер
сбойного сектора, второй – номер сектора для его замещения. При операциях чтения записи просматривается эта карта и при
необходимости выполняется замена адреса. Это не влияет существенно на производительность, поскольку оно выполняется
только при физической операции, а не при чтении данных из кэша. При проверке диска утилитой, замещенные сектора пере-
носятся в новый обычный сектор диска, наиболее подходящий для файла, с учетом сохранения его непрерывности. Соответ-
ственно данные в карте аварийного замещения обнуляются, а номер сбойного сектора помещается в соответствующий спи-
сок, который хранится в дополнительном блоке HPFS. Большинство объектов ФС, в т.ч. файловые узлы, блоки размещения
и блоки каталогов имеют уникальные 32 разрядные идентификаторы и указатели на свои родительские и дочерние блоки.
Анализ файловых узлов, блоков размещения и каталогов во многих случаях позволяет восстановить структуру ФС после
сбоя.
ФС поддерживает управление алгоритмами оптимизации запросов, приоритетов, глубину просмотра очереди. Соответст-
вующий файл инициализации в OS/2 поддерживает ряд соответствующих параметров, позволяющих выбрать следующие
варианты оптимизации доступа: FIFO, элеваторный алгоритм, который используется и по умолчанию, либо алгоритм, вы-
бранный менеджером дисковых операций. При поддержке приоритетов используются отдельные очереди запросов для каж-
дого приоритета. Если приоритеты не поддерживать, используется одна общая очередь. По умолчанию приоритеты поддер-
живаются. Можно задать и тот вариант, который был выбран менеджером дисковых операций. Глубина просмотра очереди
для оптимизации запросов задается величиной от 1 до 255. По умолчанию глубина определяется автоматически на основа-
нии рекомендации драйвера дискового адаптера.
В целом по организации, HPFS является самой высокопроизводительной ФС.
При проектировании NTFS особое внимание было уделено следующим характеристикам:
- надежность. Высокопроизводительные системы и серверы должны обладать повышенной надежностью. Один из спосо-
бов повышения надежности – механизм транзакций, при котором выполняется журналирование файловых операций.
- расширенная функциональность. NTFS проектировалась с учетом возможности расширения. В ней повышена отказо-
устойчивость, имеется эмуляция других ФС, мощная модель безопасности, параллельная обработка потоков данных и
создание файловых атрибутов, определяемых пользователем.