Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 48
Текст из файла (страница 48)
Если в имени файла присутствует несколько точек, что не противоречитправилам именования файлов в HPFS, то для расширения сокращенного именииспользуются 3 символа после самой последней из этих точек.Файловый узел — это структура, в которой содержится информация о расположении файларасширенных атрибутах.Файловая система HPFS181Так как HPFS при размещении файла на диске стремится избежать его фрагментации, то структура информации, содержащаяся в файловом узле, достаточно проста. Если файл непрерывен, то его размещение на диске описывается двумя 32разрядными числами.
Первое число представляет собой указатель на первый блокфайла, а второе — длину экстента, то есть число следующих друг за другом блоков,1принадлежащих файлу . Если файл фрагментирован, то размещение его экстентовописывается в файловом узле дополнительными парами 32-разрядных чисел,фрагментация происходит, когда на диске нет непрерывного свободного участка,достаточно большого, чтобы разместить файл целиком. В этом случае файл приходится разбивать на несколько экстентов и располагать их на диске раздельно. Файловая система HPFS старается разместить экстенты фрагментированного файлакак можно ближе друг к другу, чтобы сократить время позиционирования головокчтения/записи жесткого диска.
Для этого HPFS использует статистику, а такжестарается условно резервировать хотя бы 4 Кбайт места в конце файлов, которыерастут. Еще один способ снижения фрагментации файлов — это размещение в разных полосах диска файлов, растущих навстречу друг другу, а также файлов, открытых разными потоками выполнения или процессами.В файловом узле можно разместить информацию максимум о 8 экстентах файла.Если файл имеет больше экстентов, то в его файловый узел записывается указатель на блок размещения (allocation block), который может содержать до 40 указателей на экстенты, или, по аналогии с блоком дерева каталогов, на другие блоки размещения. Таким образом, двухуровневая структура блоков размещенияможет хранить информацию о 480 секторах, что позволяет работать с файламиразмером до 7,68 Гбайт.
На практике размер файла не может превышать 2 Гбайт,но это обусловлено текущей реализацией интерфейса прикладного программирования [26].Упоминавшаяся выше полоса каталогов находится в центре диска и используетсядля хранения каталогов. Как и все остальные полосы, она имеет размер 8 Мбайт.Однако если она будет полностью заполнена, HPFS начинает располагать каталоги файлов в других полосах.
Расположение этой информационной структуры в середине диска значительно сокращает среднее время позиционирования головокчтения/записи, тем более что обращения к корневому каталогу достаточно часты.Действительно, для перемещения головок чтения/записи из произвольного местаДиска в его центр требуется в два раза меньше времени, чем для перемещения к краюДиска, где находится корневой каталог в случае файловой системы FAT.
Уже только одно это обеспечивает существенно более высокую производительность файловой системы HPFS по сравнению с FAT. Аналогичное замечание справедливо иДля системы NTFS, которая тоже располагает свою главную таблицу файлов в начале дискового пространства, а не в его середине (см. раздел «Файловая системаN TFS»), Тестирование показывает, что HPFS является самой быстрой файловойсистемой.Однако существенно больший вклад в производительность HPFS (по сравнениюРазмещением полосы каталогов в середине логического диска) дает использова-сИз этого следует, что максимальный объем диска может составить (2 3 2 - 1) х 512 — 2 Тбайт.182Глава 6. Файловые с и с т е м ^ние метода сбалансированных двоичных деревьев для хранения и поиска информации о местонахождении файлов.
Как известно, в файловой системе FAT каталогимеет линейную неупорядоченную специальным образом структуру, поэтому пр Ипоиске файла требуется последовательно просматривать его с самого началаВ HPFS структура каталога представляет собой сбалансированное дерево с записями, расположенными в алфавитном порядке (рис.
6.5). Каждая запись, входящая в состав двоичного дерева (Binary Tree, B-Tree), содержит атрибуты файлауказатель на соответствующий файловый узел, информацию о времени и дате создания файла, о времени и дате последнего обновления и обращения, об объемеданных, содержащих расширенные атрибуты, счетчик обращений к файлу, информацию о длине имени файла и само имя, другую информацию.Root BlockLeaf BlockLeaf BlockLeaf BlockLeaf BlockРис. 6.5.
Сбалансированное двоичное деревоФайловая система HPFS при поиске файла в каталоге просматривает только необходимые ветви двоичного дерева, отбрасывая те записи каталога, про которыезаведомо известно, что они не относятся к искомому файлу. Например, если имяфайла начинается с символа, расположенного в первой части используемого алфавита, то незачем искать его среди записей каталога, описывающих файлы, имена которых начинаются с символов, расположенных во второй части этого алфавита. Далее, если искомый элемент каталога расположен во второй половине первойчасти (то есть во второй четверти), то незачем перебирать имена файлов, расположенных в первой четверти каталога. И так далее.
Очевидно, что такой метод вомного раз эффективнее, чем последовательное чтение всех записей в каталоге, чтоимеет место в системе FAT. Для того чтобы найти искомый файл в каталоге (точнее, указатель на его информационную структуру F-node), организованном на принципах сбалансированных двоичных деревьев, большинство записей вообще читатьне нужно.
В результате для поиска информации о файле необходимо выполнитьсущественно меньшее количество операций чтения с диска.Действительно, если, например, каталог содержит 4096 файлов, то файловая система FAT потребует чтение в среднем 64 секторов для поиска нужного файла внутритакого каталога, в то время как HPFS осуществит чтение всего только 2-4 секторов (в среднем) и найдет искомый файл. Несложные расчеты позволяют увидетьявные преимущества HPFS над FAT.
Так, например, при использовании 40 входов на блок блоки дерева каталогов с двумя уровнями могут содержать 1640 вхоФайловая система HPFS183дов, а дерева каталогов с тремя уровнями — уже 65 640 входов. Другими словами,некоторый файл может быть найден в типичном каталоге из 65 640 файлов максимум за три обращения. Это намного лучше файловой системы FAT, где в самомплохом случае для нахождения файла нужно прочитать более чем 4000 секторов.Размер каждого из блоков, в терминах которых выделяются каталоги в текущейреализации HPFS, равен 2 Кбайт. Размер записи, описывающей файл, зависит отразмера имени файла.
Если имя занимает 13 байт (для формата 8.3) то 2-килобайтовый блок вмещает до 40 дескрипторов файлов. Блоки связаны друг с другом посредством списковой структуры (как и дескрипторы экстентов) для облегченияпоследовательного обхода.При переименовании файлов может возникнуть так называемая перебалансировка дерева. Фактически, попытка переименования может потерпеть неудачу из-занедостатка дискового пространства, даже если файл непосредственно в размерахне увеличился. Во избежание этого «бедствия» HPFS поддерживает маленькийпул свободных блоков, которые могут использоваться при «аварии».
Эта операция может потребовать выделения дополнительных блоков на заполненном диске. Указатель на этот пул свободных блоков сохраняется в резервном блоке.Важное значение для повышения скорости работы с файлами имеет снижение ихфрагментации. В HPFS считается, что если файл содержит больше одного экстента, он считается фрагментированным. Снижение фрагментации файлов сокращает время позиционирования и время ожидания за счет уменьшения количестваперемещений головок, необходимых для доступа к данным файла. Алгоритмы работы файловой системы HPFS функционируют таким образом, чтобы по возможности размещать файлы в последовательных смежных секторах диска, что в последующем обеспечит максимально быстрый доступ к данным.
В системе FAT,наоборот, запись следующей порции данных в первый же свободный кластер неизбежно приводит к фрагментации файлов. То есть HPFS записывает данные не впервый попавшийся сектор, а, если это предоставляется возможным, в смежныесекторы диска. Это позволяет несколько снизить число перемещений головок чтения/записи от дорожки к дорожке. Когда данные дописываются в существующийфайл, HPFS сразу же резервирует как минимум 4 Кбайт непрерывного пространства на диске. Если же часть этого пространства не потребовалась, то после закрытия файла она высвобождается для дальнейшего использования.
Файловая система HPFS равномерно размещает непрерывные файлы по всему диску для того,чтобы впоследствии без фрагментации обеспечить их возможное увеличение. ЕслиЖе файл не может быть увеличен без нарушения его непрерывности, HPFS опятьтаки резервирует 4 Кбайт смежных блоков как можно ближе к основной частифайла с целью сократить время позиционирования головок чтения/записи и время поиска соответствующего сектора.Очевидно, что степень фрагментации файлов на диске зависит как от числа расположенных на нем файлов, их размеров и размеров самого диска, так и от характера11интенсивности самих дисковых операций.
Незначительная фрагментация файЛов практически не сказывается на быстродействии операций с файлами. Файлы,с°стоящие из 2-3 экстентов, практически не снижают производительности HPFS,184Глава 6. Файловые систематак как эта файловая система следит за тем, чтобы области данных, принадлежащие одному и тому же файлу, располагались как можно ближе друг к другу. Файлиз трех экстентов имеет только два нарушения непрерывности, и, следовательнодля его чтения потребуется всего лишь два небольших перемещения головки диска. Программы (утилиты) дефрагментации, имеющиеся для этой файловой системы по умолчанию, считают наличие двух-трех экстентов у файла нормой'.
Практика показывает, что в среднем на диске имеется не более 2 % файлов, имеющихтри и более экстентов [26]. Даже общее количество фрагментированных файлов,как правило, не превышает 3 %. Такая ничтожная фрагментация оказывает пренебрежимо малое влияние на общую производительность системы.Теперь кратко рассмотрим вопрос надежности хранения данных в HPFS. Любаяфайловая система должна обладать средствами исправления ошибок, возникающих при записи информации на диск. Система HPFS для этого использует механизм аварийного замещения (HotFix),Если файловая система HPFS сталкивается с проблемой в процессе записи данных на диск, она выводит на экран соответствующее сообщение об ошибке. ЗатемHPFS сохраняет информацию, которая должна была быть записана в дефектныйсектор, в одном из запасных секторов, заранее зарезервированных на этот случай.Список свободных запасных блоков хранится в резервном блоке HPFS. При обнаружении ошибки во время записи данных в нормальный блок HPFS выбирает одиниз свободных запасных блоков и сохраняет эти данные в нем.
Затем файловая система обновляет карту аварийного замещения в резервном блоке. Эта карта представляет собой просто пары двойных слов, каждое из которых является 32-разрядным номером сектора. Первый номер указывает на дефектный сектор, а второй —на тот сектор среди имеющихся запасных секторов, который и был выбран длязамены плохого. После замены дефектного сектора запасным карта аварийногозамещения записывается на диск, и на экране появляется всплывающее окно, информирующее пользователя о произошедшей ошибке записи на диск. Каждый раз,когда система выполняет запись или чтение сектора диска, она просматривает картуаварийного замещения и подменяет все номера дефектных секторов номерами запасных секторов с соответствующими данными.
Следует заметить, что это преобразование номеров существенно не влияет на производительность системы, таккак оно выполняется только при физическом обращении к диску, а не при чтенииданных из дискового кэша. Очистка карты аварийного замещения автоматическивыполняется программой CHKDSK при проверке диска HPFS. Для каждого замещенного блока (сектора) программа CHKDSK выделяет новый сектор в наиболее подходящем для файла (которому принадлежат данные) месте жесткого диска.Затем программа перемещает данные из запасного блока в этот сектор и обновляет информацию о положении файла, что может потребовать новой балансировкидерева блоков размещения. После этого CHKDSK вносит поврежденный сектор1Например, программа HPFSOPT из набора утилит GammaTech по умолчанию не дефрагментируе*файлы, состоящие из трех и менее экстентов, а файлы, которые имеют большее количестве экстетов, приводятся к 2 пли 3 экстентам, ежели это возможно (файлы объемом в несколько десяткмегабайтов всегда будут фрагментнровапы, ибо максимально возможный размер экстента, какпомните, составляет 8 Мбайт).файловая с и с т е м а HPFS185список дефектных блоков, который хранится в дополнительном блоке HPFS,возвращает освобожденный сектор в список свободных запасных секторов реервного блока.