OS/2 FAQ


OS/2 Storage devices FAQ - Устpойства хpанения инфоpмации. Статья 016

Q HPFS Description...
A
(DZ FAQ) Black Hacker, 2:5030/16.32

Многие спорят об достоинствах HPFS и недостатках FAT, однако не все пони- мают ее устройство. Учитывая многочисленные просьбы рассказать что либо об устройстве HPFS я на основе 5 источников и небольшого своего опыта разработ- ки и эксплуатации различных FS решил написать это письмо. Если найдете ошиб- ки пишите мылом. адеюсь что после прочтения этого текста даже самые злобные сторонники FAT пересмотрят свое отношение к этой устаревшей FS.

Кое-что об HPFS.

  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-Tole- rance 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. Имена расширенных атрибутов насколько мне из- вестно (до HPFS386 ил LS 4.0 ???) не выстраивались в B-Tree.

Горявский Юлий Анатольевич.

К предыдущей статье | К оглавлению раздела | К следующей статье

Вернуться к списку разделов FAQ.

Если у вас есть вопросы или пожелания, пишите, мы будем рады.

Данный FAQ cоставили Ivan Borovicov и Viatcheslav Odintsov (2:5020/181) на основе OS/2 FAQ Дмитрия Завалишина (dz) и материалов переписки в группе эхоконференций su.os2.*. Оформление статей: Николай Королев. Программирование JSP для RU/2: Евгений Кулешов. Благодарности: Дмитрию Максимовичу (MaximDim) за громадную помощь на первых этапах и Дмитрию Бану (banshee) за его помощь при проверке текста.



Новые статьи на нашем сайте:


Комментариев к странице: 0 | Добавить комментарий
Домой | Проект ядро Core/2 | Проект OS/4 Download | Новости | Гостевая книга | Подробно обо всем | Нужные программы | Проекты | OS/2 FAQ | Всячина | За и Против | Металлолом | #OS2Russian | RDM/2 | Весёлые картинки | Наша галерея | Доска объявлений | Карта сайта | ПОИСК | ФОРУМ