HPFS - (High Performance File System) – новое решение/упор на скорость




FAT32 - замена FAT16

К середине 90-х годов возможностей ФС FAT16 для передовых дисковых накопителей того времени стало не хватать. Главным образом, виной этому послужило ограничение на максимальный размер тома равный 2ГБ (при максимальном размере кластера в 64КБ). Продолжение увеличения размера кластера (очевидный подход к решению этой проблемы) вело к неудовлетворительному увеличению размера слэка. Другое решение состояло в переходе от 16-разрядной ФС к 32-разрядной, что и было сделано фирмой Microsoft, включившей новую ФС FAT32 в состав ОС Windows 95 OSR 2 в 1996 году.

Для сохранения совместимости со старыми программами структура FAT32 претерпела минимальные изменение относительно FAT16. Главные отличия от предыдущих версий FAT состоят в следующем. Блок начальной загрузки на разделах с FAT32 был увеличен до 2 секторов и включает в себя резервную копию загрузочного сектора, что позволяет системе быть более устойчивой к возможным сбоям на диске. Объем, занимаемый таблицей размещения файлов, увеличился, поскольку теперь каждая запись в ней занимает 32 байта, и общее число кластеров на разделе FAT32 составляет 228 (в 32-битном слове учитываются только 28 разрядов). Соответственно, выросло и количество зарезервированных секторов.

Кроме повышения максимального размера тома до 4ТБ и максимального размера файла до 4ГБ, FAT32 вносит ряд необходимых усовершенствований в структуру корневого каталога, который больше не располагается в определенном месте. Вместо этого в блоке BPB хранится указатель на начальный кластер корневого каталога. В результате снимается ранее существовавшее ограничение на число записей в корневом каталоге. Кроме того, для учета свободных кластеров, в зарезервированной области на разделе FAT32 имеется сектор, содержащий число свободных кластеров и номер самого последнего использованного кластера. Это позволяет системе при выделении следующего кластера не перечитывать заново всю таблицу размещения файла.

Помимо перечисленных нововведений, в FAT32 существует множество унаследованных от FAT16 ограничений. Например, максимальная длина пути к файлу не должна превышать 260 символов, в то время как 255 из них может занимать имя файла.

HPFS - (High Performance File System) – новое решение/упор на скорость

Другой подход к решению проблем FAT16 демонстрирует ФС HPFS, разработанная специалистами Microsoft и IBM на основе опыта IBM по созданию файловых систем MVS, VM/CMS и виртуального метода доступа. Впервые HPFS появилась в 1988 году (на 8 лет раньше FAT32) как основа реализации ОС OS/2 1.2.

Диск в HPFS делится на сектора фиксированного размера (512 байт в текущей реализации, при этом номер сектора или их количество кодируются во внутренних структурах как 4-байтовое беззнаковое целое, что позволяет адресовать диски размером до (232 — 1) * 512 = 2ТБ).

В начале диска расположены несколько управляющих блоков:

  1. Загрузочный сектор DOS-овского вида (boot sector).
  2. SuperBlock содержит информацию о геометрии диска, указатели на битмапы свободного пространства, указатель на корневой каталог, размер дисковой полосы, номер полосы с каталогами, указатель на список сбойных блоков и т. п.
  3. SpareBlock содержит указатели на пул HOTFIX-areas, пул Fault-Tolerance областей, пул блоков для операций на почти переполненном диске и другие указатели, флаги и дескрипторы.
  4. Область начальной загрузки.
  5. Область секторов используемых (временно) для выполнения операций требующих дополнительную дисковую память. Эта область например, иногда задействуется при переименовании файла на заполненном диске.
  6. Другие области.

Для того чтобы определить, свободен ли сектор, HPFS использует битмапы, в которых каждый бит соответствует одному сектору. Если бит содержит 1 (соответственно 0), то это означает, что сектор занят (соответственно свободен). Если бы на весь диск был только один битмап, то для его подкачки приходилось бы перемещать головки чтения/записи в среднем через половину диска. Чтобы избежать этого, HPFS разбивает диск на «полосы» (bands) длиной по 8 мегабайт и хранит битмапы свободных секторов в начале или конце каждой полосы. При этом битмапы соседних полос располагаются рядом.

Расстояние между двумя битмапами равно 16MB. Размер полосы (8MB) может быть изменён в следующих версиях HPFS, так как на него нет прямых завязок. Размер битмапа равен 2K (8MB/512/8 = 2K).

Полоса, находящаяся в центре диска, используется для хранения каталогов. Эта полоса называется Directory Band. Однако, если она будет полностью заполнена, HPFS начнёт располагать каталоги файлов в других полосах.

Файлы и каталоги в HPFS базируются на фундаментальном объекте, называемом FNode. Каждая FNode занимает один сектор и всегда располагается в HPFS поблизости от своего файла или каталога (обычно непосредственно перед файлом или каталогом). FNode содержит длину и первые 15 символов имени файла, статистику по доступу к файлу, внутреннюю информацию, расширенные атрибуты и ACL (или только часть, если они очень большие), ассоциативную информацию о расположении и подчинении файла и т. д.

Имена файлов и каталогов при полной подстановке (от корня) не должны превышать 260 символов, при этом каждая компонента пути не должна быть длиннее 255 символов. При создании файла HPFS запоминает написание его имени, хотя и не различает регистров в дальнейших операциях, кроме тех, что возвращают информацию о файле.

С точки зрения размещения файлы, каталоги и их расширенные атрибуты (если они не помещаются в FNode) рассматриваются HPFS как наборы экстентов. Экстент — это кусок файла, лежащий в последовательных секторах. Каждый экстент описывается двумя числами: номером первого сектора и длиной (в секторах). Два последовательных экстента всегда объединяются HPFS в один. Минимальный размер экстента — один сектор. Так как расстояние между соседними битмапами свободных секторов равно 16MB, то и размер максимального экстента равен 16MB. Если файл состоит из восьми или менее экстентов, то его описание целиком хранится в FNode.

Если файл состоит более чем из восьми экстентов (реальные файлы состоят из 1-3 экстентов), то его описание может занимать несколько секторов, расположенных поближе к файлу, при этом эти сектора содержат не список, а прошитое сбалансированное дерево экстентов (B±Tree). Дерево построено так, что его разбалансировка никогда не превышает 1/3 по объёму, и оно не отличается от оптимального более чем на один уровень. Корень дерева находится в FNode, причём может содержать до 12 элементов. Каждый дополнительный сектор, представляющий собой ветку дерева, содержит до 60 элементов, а лист — 40 элементов. Таким образом, двухуровневая структура блоков размещения может хранить информацию о 480 секторах, что позволяет работать с файлами размером до 7.68ГБ. На практике размер файла не может превышать 2ГБ, что обусловлено реализацией СУФ.

При создании/расширении файлов HPFS пытается минимизировать количество экстентов, используя для этого статистику, битмапы свободных секторов и другую информацию. Например, HPFS старается условно резервировать хотя бы 4 килобайта места в конце файлов, которые растут. Другой прием: расположение конкурентно растущих файлов или файлов, открытых разными цепочками или процессами, в разных полосах диска.

Каталоги в HPFS, как и в FAT, образуют древовидную структуру. Но при этом внутри каталога HPFS строит сбалансированное дерево (B-Tree) на основе имён файлов для быстрого поиска файла по имени внутри каталога. Так, если каталог содержит 4096 файлов, FAT будет читать в среднем 64 сектора для поиска файла внутри каталога, а HPFS 2-4 сектора.

Размер блока, в терминах которых выделяются каталоги, равен 2KB в текущей версии HPFS. Размер записи, описывающей файл, зависит от размера имени файла. Если имя занимает 13 байтов (8.3), то 2-килобайтовый блок вмещает 41 описатель файлов. Блоки прошиты списком (как и описатели экстентов) для облегчения последовательного обхода.

При переименовании файла может возникнуть перебалансировка дерева. Эта операция может потребовать выделения дополнительных блоков на заполненном диске. В этом случае блоки берутся из специального пула, указатель на который лежит в SpareBlock.

Расширенные атрибуты и их разновидность ACL HPFS хранит в FNode. Если они не влезают в FNode, HPFS хранит из почти как файл, построив для этого B±Tree.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: