OS Site.ru


Всё об операционных системах.
Операционные системы
Mac OS
NetWare
OS/2
Windows
BSD/386
FreeBSD
Linux
QNX
Solaris
Unix
BeOS
Miraculix OS
MorphOS
ReactOS
SkyOS
Syllable
MS-DOS
FreeDOS
OpenDOS
Novell DOS
DR-DOS
IBM PC DOS
RDOS
Меню

Файловая система

HPFS


Многие спорят об достоинствах HPFS и недостатках FAT, однако не все понимают ее устройство.

1. HPFS разработана специалистами MS и IBM на основе опыта IBM по созданию файловых систем MVS, VM/CMS и виртуального метода доступа. Со стороны MS проектом руководил Gordon Letwin.

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

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

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

4. Для определения свободен сектор или занят HPFS использует битмапы в которых каждый бит соответствует одному сектору. Если бит содержит 1 то это означает что сектор занят, иначе он свободен. Если бы на весь диск был бы только один битмап то для его подкачки приходилось бы перемещать головки чтения/записи в среднем через половину диска. Чтобы избежать этого HPFS разбивает диск на "полосы" (Bands) длиной по 8 мегабайт и хранит битмапы свободных секторов в начале или конце каждой полосы. При этом битмапы соседних полос располагаются рядом:
      +--------- 16MB --------+    *** - Use/Free sector bitmap.
      !                       !
   +--!-----------+-----------!--+--------------+--------------+
   !***  Полоса 0 ! Полоса 1  ***!***  Полоса 2 ! Полоса 3  ***!
   +--------------+--------------+--------------+--------------+
   0MB           8MB           16MB           24MB           32MB

Из этого следует что расстояние между двумя битмапами равно 16MB. Размер полосы (8MB) может быть изменен в следующих версиях HPFS т.к. на него нет прямых завязок. HPFS определяет размер полосы при чтении управляющих блоков с диска во время выполнения операции FSHelperAttach.
Сейчас размер битмапа равен 2K. (8MB/512/8 = 2K).
Полоса находящаяся в центре диска используется для хранения каталогов. Эта полоса называется Directory Band. Однако если она будет полностью заполнена HPFS начнет располагать каталоги файлов в других полосах.

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

Имена файлов и каталогов при полной подстановке (от корня) не должны превышать 260 символов, при этом каждая компонента пути не должна быть длиннее 255 символов. В именах файлов не допустимы символы: 0h-31h, 7Fh, "/", "|", "\", "*", "?", '"', "<", ">". Последовательности конечных пробелов игнорируются, если на конце файла стоит точка то она тоже игнорируется (для совместимости Soft-а). Внутри имени файла точка такой же символ как и остальные. Русские буквы работают нормально. При создании файла HPFS запоминает написание его имени, хотя и не различает регистров в дальнейших операциях, кроме тех, что возвращают информацию о файле.

Примеры имен:

1. "FILE.ASM"
2. "Злобный Файл.ASM.OBJ.EXE"
3 "Еще более злобный файл . TXT"

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

7. Если файл состоит более чем из восьми экстентов то его описание может занимать несколько секторов расположенных поближе к файлу, при этом эти сектора содержат не список, а прошитое сбалансированное дерево экстентов. (B+-Tree). Дерево построено так, что его разбалансировка никогда не превышает 1/3 по объему, и оно не отличается от оптимального более чем на один уровень. (О B*/B+-деревьях читайте у Кнута или еще где-нибудь). Корень дерева находится в FNode, причем может содержать до 12 элементов. Каждый дополнительный сектор представляющий собой ветку дерева содержит до 60 элементов а лист - 40 элементов. Таким образом если файл состоит из экстентов по одному сектору (этого никогда не будет !) и имеет размер 2GB для его описания потребуется дерево следующей структуры: 12*60*60*60*40 т.е. 53MB листьев и 1.7MB веток. Для случайном доступа к любой части файла при этом потребуется (в худшем случае) 5 операций чтения управляющих структур.
Реальные файлы состоят из одного-трех экстентов.

8. Максимальный размер файла в HPFS сейчас 4GB (или 2GB ???), однако он обусловлен только размером поля под размер файла и файловый указатель (4 байта, регистр) в самоЙ OS/2 и ее API. Это не предел самой HPFS. Следует помнить что в HPFS отсутствует понятие кластера, файл может занимать 1, 2, 3, 4 или любое другое количество секторов.

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

10. Каталоги в HPFS как и в FAT образуют древовидную структуру. При этом внутри каталога HPFS строит сбалансированное дерево (B*-Tree) на основе имен файлов для быстрого поиска файла по имени внутри каталога. Так если каталог содержит 4096 файлов FAT будет читать в среднем 64 сектора для поиска файла внутри каталога, HPFS считает 2-4 сектора и найдет файл. Размер блока в терминах которых выделяются каталоги равен 2KB в текущей версии HPFS. Размер записи описывающей файл зависит от размера имени файла. Если имя занимает 13 байтов (8.3<0h>) то 2-килобайтовый блок вмещает 41 описатель файлов. Блоки прошиты списком (как и описатели экстентов) для облегчения последовательного обхода. HPFS не имеет FAT-овских проблем "утекания" дискового пространства при удалении большого количества файлов в каталоге.
При переименовании файла может возникнуть перебалансировка дерева. Эта операция может потребовать выделения дополнительных блоков на заполненном диске. В этом случае блоки берутся из специального пула указатель на который лежит в SpareBlock.

11. Расширенные атрибуты и их разновидность ACL (Access Control Lists) HPFS хранит в FNode. Если они не влезают в FNode HPFS хранит из почти как файл построив для этого B+-Tree.


Вверх
Версия для печати Версия для печати
магазины фарфоровой посуды в Москве
Обратная связь.
При любой перепечатке материалов сайта ссылка обязательна.