Электронный учебник по дисциплине "Системное программное обеспечение"
|
7.5. Файловые системы |
Современные ОС имеют соответствующие системы управления (СУ) файлами. Некоторые ОС имеют возможность работать с несколькими файловыми системами (это так называемые монтируемые файловые системы – ее можно установить как дополнительную).
Любая СУ файлами не существует сама по себе, она разрабатывается для работы в конкретной ОС.
FAT (File Allocation Table) была разработана Биллом Гейтсом и Марком МакДональдом в 1977 году и первоначально использовалась в операционной системе 86-DOS.
В дальнейшем 86-DOS была приобретена Microsoft и стала основой для ОС MS-DOS 1.0, выпущенной в августе 1981 года.
FAT была предназначена для работы с гибкими дисками размером менее 1 Мбайта, и вначале не предусматривала поддержки жестких дисков.
В настоящее время FAT поддерживает файлы и разделы размеров до 2 Гбайт.
Системная область |
Главная запись начальной загрузки (Master Boot Record) |
0 поверхность, 0 цилиндр, 1 сектор |
Запись начальной загрузки (Boot Record) |
Первый раздел (C:) |
|
1 копия FAT |
||
2 копия FAT |
||
Корневой каталог (Root Directory) |
||
Область данных |
Каталоги и файлы |
Рис.1. Физическая структура диска для одного раздела
Жесткий диск разбивается на независимые логические части, называемые разделами. Один из разделов используется для загрузки ОС (т.н. активный раздел). Информация о делении диска заносится в таблицу разделов (Partition Table), которая содержится в главной записи начальной загрузки (Master Boot Record). Программа начальной загрузки по Partition Table определяет положение активного раздела, читает один сектор активного раздела и загружает систему.
Самый первый сектор жесткого диска (поверхность 0, цилиндр 0, сектор 1) содержит главную запись загрузки (Master Boot Record), которая помещается в память по адресу 0000:7C00h и исполняется BIOS во время начальной загрузки системы.
Последняя часть этого сектора содержит таблицу разделов (Partition Table), состоящую из 4 элементов длиной по 16 байт. При загрузке BIOS выполняет код Master Boot Record. Этот код анализирует Partition Table для определения активного (т.е. содержащего операционную систему) раздела. Загрузочный сектор активного раздела читается в память и выполняется.
Файлы на дисковых носителях физически организованы в блоки - кластеры. Кластер - это группа подряд расположенных секторов. Число секторов в кластере зависит от формата диска. Каждый кластер имеет свой уникальный номер. Файл представляет собой цепочку кластеров, хаотическим образом размещенных в дисковом пространстве. Для поиска файла на диске, выделения и освобождения кластера, отслеживания свободного пространства на диске используют таблицу размещения файлов (File Allocation Table - FAT).
Таблица размещения файлов
Такая таблица создается один раз для всего диска при его форматировании и содержит информацию о состоянии каждой его элементарной единицы (кластера) – свободен, испорчен, последний в цепочке, – причем для каждого кластера предусматривается только один элемент FAT.
Можно сказать, что каждый кластер имеет своего представителя в FAT.
Оглавление диска или каталога в этой реализации содержит
· имя файла,
· его атрибуты,
· ссылку на первый элемент таблицы размещения.
А поскольку каждый элемент FAT содержит, помимо атрибутов, еще и номер следующего элемента, то таким образом достигается однозначное распределение всего объема диска между файлами.
Размер кластера всегда кратен размеру сектора (512 byte), то есть 512 byte, 1 Кb, 2 Кb, 4 Кb, 8 Кb, 16 Кb или 32 Кb, и рассчитывается исходя из общего объема форматируемого пространства.
Если размер записи в FAT ограничивается, например, 12 bit (FAT12 используется сейчас в дискетах), то и указать такая запись сможет только на кластер с номером не более 216=4096, а в реальной ситуации – еще на 10 единиц меньше, поскольку именно столько значений зарезервировано в FAT12 (и FAT16) для маркировки специфических состояний.
Таблица состоит из 12- или 16-битовых элементов (в зависимости от емкости диска). Каждому кластеру соответствует один элемент FAT. Значение элемента:
(0)000 кластер свободен;
(F)FF8-(F)FFF последний кластер в файле (EOC-end of chain);
(F)FF7 дефектный кластер;
(X)XXX номер следующего кластера в цепочке кластеров файла.
При создании файла или дозаписи всегда выделяется целый кластер. Номер первого кластера заносится в элемент директория (26-27 байты). Остальные отыскиваются по цепочке.
Первые два элемента FAT используют как индикаторы формата диска. Начальный байт содержит дескриптор носителя: FF..F9 - дискеты, F8 - жесткий диск. Остальные байты заполняются значением FFh. Первым кластером области данных является кластер 2.
12-битный FAT позволяет пронумеровать 4096 кластеров. Для больших дисков это приводит к увеличению размера кластера (128 МБ диск - 32К, 128..256 МБ - 64К). Статистическими исследованиями установлено, что средний размер файла не превышает 1К. Следовательно, коэффициент полезного использования диска равен 1/32 (около 4 %). Для 16-битного кластера число кластеров равно 64К, размер кластера для диска - 256 МБ составляет 4К, т.е. коэффициент равен 25 %. 12-битные FAT применяются для гибких дисков и разделов жестких дисков до 10 МБ.
Высокопроизводительная файловая система HPFS (High Performance File System) была представлена фирмой IBM в 1989 году вместе с операционной системой OS/2 1.20.
Файловая система HPFS также поддерживалась ОС Windows NT до версии 3.51 включительно. По производительности эта ФС существенно опережает FAT.
HPFS позволяет использовать жесткие диски объемом до 2 Терабайт (первоначально до 4 Гбайт). Кроме того, она поддерживает разделы диска размером до 512 Гб и позволяет использовать имена файлов длиной до 255 символов (на каждый символ при этом отводится 2 байта). В HPFS по сравнению с FAT уменьшено время доступа к файлам в больших каталогах.
HPFS распределяет пространство на диске не кластерами как в FAT, а физическими секторами по 512 байт, что не позволяет ее использовать на жестких дисках, имеющих другой размер сектора. Эти секторы принято называть блоками. Чтобы уменьшить фрагментацию диска, при распределении пространства под файл HPFS стремится, по возможности, размещать файлы в последовательных смежных секторах.
Файловая система VFAT (Virtual FAT), реализованная в Windows NT 3.5, Windows 95 (DOS 7.0), - это файловая система FAT, включающая поддержку длинных имен файлов (Long File Name, LFN) в кодировке UNICODE (каждый символ имени кодируется 2 байтами). VFAT использует ту же самую схему распределения дискового пространства, что и файловая система FAT, поэтому размер кластера определяется величиной раздела.
В VFAT ослаблены ограничения, устанавливаемые соглашениями по именам файлов FAT:
· имя может быть длиной до 255 символов.
· в имя можно включать несколько пробелов и точек, однако, текст после последней точки рассматривается как расширение.
·
регистр символов в именах не различается, но сохраняется.
FAT32 - усовершенствованная версия файловой системы VFAT, поддерживающая жесткие диски объемом до 2 терабайт. Впервые файловая система FAT32 была включена в состав ОС Windows 95 OSR 2. В FAT32 были расширены атрибуты файлов, позволяющие теперь хранить время и дату создания, модификации и последнего доступа к файлу или каталогу.
С появлением дисковых накопителей большой емкости все более отчетливо стали проявляться негативные стороны FAT, прежде всего связанные с ограничением на предельное число кластеров. 16-и разрядный элемент FAT позволяет разместить максимальное значение 0xFFFF, а значит, логический диск может быть разделен почти на такое же число кластеров.
Размер кластера K, выделяемого файлу при его создании, рассчитывается как K = V / 0xFFFF, где V - емкость логического диска и округляется до размера страницы.
Например, логический диск емкостью 1.2 гигабайта имеет кластер размером 32К. И это минимум того, что выделяется каждому файлу! Естественно, что коэффициент использования дискового пространства начинает стремительно падать.
Что же такое FAT32? Это развитие файловой системы FAT. Принципы работы с FAT32 остались примерно такими же, как и с классической файловой системой FAT. FAT32 позволяет выделять на диске большие разделы (более 2 Gb). Кроме этого уменьшается размер кластера на разделе:
Емкость диска, Gb |
Размер кластера, Kb |
Менее 8 |
4 |
8 - 16 |
8 |
16 - 32 |
16 |
32 и более |
32 |
Таким образом, при использовании FAT32 рациональнее расходуется дисковое пространство. FAT32 разрабатывалась как полностью совместимая файловая система для DOS/Windows. Все программы, не работающие с диском напрямую, не заметят никакой разницы при работе с FAT32. Исключение составляют низкоуровневые утилиты класса дисковых утилит.
Файловая система NTFS (Windows NT)
NTFS обеспечивает комбинацию эффективности, надёжности и совместимости, отсутствующую в FAT или HPFS. Она разработана для быстрого выполнения стандартных файловых операций типа чтения, записи и поиска, а также улучшенных операций типа восстановления файловой системы на очень больших жёстких дисках.
NTFS также включает средства безопасности, требуемые для файловых серверов и высококачественных персональных компьютеров в корпоративной среде. NTFS поддерживает управление доступом к данным и привилегии владельца, что является важным для целостности корпоративных данных. В то время как каталогам, разделяемым при помощи Windows NT Server, назначаются специфические разрешения, файлам и каталогам NTFS могут назначаться разрешения вне зависимости, разделены они или нет. NTFS - единственная система в Windows NT, которая позволяет назначить разрешения для отдельных файлов.
NTFS является простой, но очень мощной разработкой. Для этой перспективной файловой системы вся информация на томе NTFS является файлом или частью файла. Каждый распределённый на томе NTFS сектор принадлежит некоторому файлу. Даже метаданные (metadata) файловой системы (информация, которая описывает непосредственно файловую систему) являются частью файла. Эта основанная на атрибутах файловая система поддерживает объектно-ориентированные приложения, обрабатывая все файлы как объекты, которые имеют определяемые пользователем и системой атрибуты.
Главная файловая таблица. Каждый файл на томе NTFS представлен записью в специальном файле, называемом главной файловой таблицей (MFT - master file table). NTFS резервирует первые 16 записей таблицы для специальной информации. Первая запись этой таблицы описывает непосредственно главную файловую таблицу; за ней следует зеркальная запись (mirror record) MFT. Если первая запись MFT разрушена, то NTFS читает вторую запись для отыскания зеркального файла MFT, первая запись которого идентична первой записи MFT. Местоположения сегментов данных MFT и зеркального файла MFT записаны в секторе начальной загрузки. Дубликат сектора начальной загрузки находится в логическом центре диска. Третья запись MFT - файл регистрации (log file), который используется для восстановления файлов. Семнадцатая и последующие записи главной файловой таблицы используются собственно файлами и каталогами (также рассматриваются как файлы NTFS) на томе.
Организация главной файловой таблицы. Главная файловая таблица отводит определённое количество пространства для каждой записи файла. Атрибуты файла записываются в распределённое пространство MFT. Небольшие файлы и каталоги (обычно до 1500 байт или меньше), типа файла, показанного ниже, могут полностью содержаться внутри записи главной файловой таблицы.
Запись MFT для небольшого файла или каталога
Подобный подход обеспечивает очень быстрый доступ к файлам. Рассмотрим, например, файловую систему FAT, которая использует таблицу размещения файлов, в которой перечисляются имена и адрес каждого файла. Элементы каталога FAT содержат индекс в таблице размещения файлов. В случае если необходимо просмотреть содержимое файла, FAT сначала читает таблицу размещения файлов и убеждается в существовании файла. Далее FAT восстанавливает файл, ища цепочку распределенных блоков, относящихся к этому файлу. В NTFS поиск файла производится только для непосредственного его использования.
Записи каталога помещены внутри главной файловой таблицы так же, как записи файла. Вместо данных каталоги содержат индексную информацию. Небольшие записи каталогов находятся полностью внутри структуры MFT. Большие каталоги организованы в B-tree, имея записи с указателями на внешние кластеры, содержащие элементы каталога, которые не могли быть записаны внутри структуры MFT.
Атрибуты файла NTFS. NTFS просматривает каждый файл (или каталог) как набор атрибутов файла. Такие элементы, как имя файла, информация защиты и даже данные - все это атрибуты файла. Каждый атрибут идентифицирован кодом типа атрибута и, необязательно, именем атрибута.
Если атрибуты файла могут находиться внутри записи файла MFT, они называются резидентными (resident) атрибутами. Например, информация типа имени файла и отметки времени всегда включается в запись файла MFT. Если файл слишком большой, чтобы содержать все атрибуты в записи файла MFT, часть атрибутов является нерезидентной (nonresident). Нерезидентные атрибуты занимают один или несколько пробегов (run) дискового пространства в другом месте тома (пробег дискового пространства - непрерывная линейная область на диске).
Вообще, все атрибуты могут быть вызваны как поток байтов независимо от того, являются ли они резидентными или нерезидентными.
В табл. представлен список всех атрибутов файла, в настоящее время определенных для NTFS. Этот список расширяем, т. е. другие атрибуты файла в будущем могут быть определены в случае необходимости.
Таблица Атрибуты файла NTFS
Тип атрибута |
Описание |
Standard Information (стандартная информация) |
Включает бюджет связи и так далее |
Attribute List (список атрибутов) |
Перечисляет все другие атрибуты (только в больших файлах) |
Filename (имя файла) |
Атрибут, повторяющийся для длинных и для коротких имен файлов. Длинное имя файла может содержать до 255 символов Unicode. Короткое имя - доступно для MS DOS, восемь плюс три символа, без учета регистра. Дополнительные имена, или жесткие связи (hard links), используются POSIX и могут быть также включены в качестве дополнительных атрибутов имени файла. |
Security Descriptor (дескриптор безопасности) |
Фиксирует информацию о том, кто может обращаться к файлу, кто является его владельцем и так далее. |
Data (данные) |
Содержит данные файла. |
Index Root (корень индексов) |
Используется при работе с каталогами. |
Index Allocation (индексное размещение) |
Используется при работе с каталогами. |
Volume InfoiTTiation (информация тома) |
Используется только в системном файле тома и включает, в частности, версию и имя тома. |
Bitmap (битовый массив) |
Предоставляет информацию об использовании записей в МFТ или каталоге. |
Extended Attribute Information (информация расширенного атрибута) |
Используется файловыми серверами, которые связаны с системами OS/2. Этот тип атрибута не используется Windows NT. |
Extended Attributes (расширенные атрибуты) |
Используется файловыми серверами, которые связаны с системами OS/2. Этот тип атрибута не используется Windows NT. |
Длинные и короткие имена файлов
Подобно HPFS, NTFS поддерживает имена файла до 255 символов. Имена файла NTFS используют набор символов Unicode с 16 битами; однако вопрос доступа из MS DOS решен. NTFS автоматически генерирует поддерживаемое MS DOS имя (восемь плюс три символа) для каждого файла. Таким образом, файлы NTFS могут использоваться через сеть операционными системами MS DOS и OS/2. Это особенно важно для файловых серверов организации, которая использует персональные компьютеры с двумя или всеми тремя этими операционными системами.
Создавая короткие имена файла, NTFS также позволяет приложениям MS DOS и Windows З.х работать с файлами, имеющими длинные имена NTFS. Кроме того, при сохранении файла приложениями MS DOS или Windows З.х на томе NTFS сохраняются и имя файла "восемь плюс три" и длинное имя NTFS.
Генерация короткого имени файла
Поскольку NTFS использует набор символов Unicode для имен файлов, существует возможность задействования нескольких "запрещенных" символов, которые MS DOS не может читать в имени файла. Для генерации короткого имени файла в стиле MS DOS, NTFS удаляет все эти символы и любые пробелы из длинного имени файла. Так как имя файла в MS DOS может иметь только одну точку, NTFS также удаляет все дополнительные точки из имени файла. Далее, в случае необходимости NTFS усекает имя файла до шести символов и добавляет тильду (~) и номер. Например, к каждому недублированному имени файла добавляется ~1. Повторяющиеся имена файлов заканчиваются символами ~2, ~3 и т. д. Расширение имени файла усекается до трех или меньшего количества символов. Наконец, при отображении имени файла в командной строке NTFS транслирует все символы в имени файла и расширении к верхнему регистру (File Manager отображает эти имена файла в нижнем регистре). Начиная с Windows NT 3.5 используется несколько другой метод для создания коротких имен файлов для случая, когда имеется пять или более файлов, которые привели бы к двойным коротким именам файла. Для пятого и последующих файлов Windows NT использует только первые два символа от длинного имени файла и далее специальной математической операцией (функция от длинного имени) генерирует следующие уникальные четыре символа короткого имени файла; после этого к результату добавляется ~5 (или другой номер в случае необходимости избежания двойного имени файла). Такой метод обеспечивает в основном повышенную эффективность для случая, когда Windows NT должна создавать короткие имена файлов для большого количества файлов с похожими длинными именами. Windows NT использует этот метод создания коротких имен для томов FAT и NTFS.
Согласованность с POSIX. Согласованность с POSIX позволяет переносить приложения UNIX в среду Windows NT. Windows NT полностью согласована со стандартом 1003.1 института IEEE, который определяет присвоение имен и идентификацию файлов. Следующие возможности POSIX включены в NTFS:
- Чувствительные к регистру имена. Для POSIX файлы README.TXT, Readme.txt и readme.txt являются различными.
- Жесткие связи (hard links). Файлу может быть присвоено несколько имен. Это позволяет двум файлам с различными именами, которые могут быть размещены в различных каталогах, содержать одни и те же данные.
- Дополнительные отметки времени. Показывают, когда файл был последний раз использован или изменен.
Несмотря на то что NTFS поддерживает регистрозависимые имена, нельзя использовать стандартные операции NTFS для управления файлами, имена которых отличаются только регистром (к стандартным операциям относятся выполняемые из командной строки, типа copy, del, move и их эквиваленты в File Manager). Например, оба файла annm.doc и AnnM.Doc будут удалены при использовании следующей команды: del AnnM.Doc
Таким образом, для управления файлами, имена которых отличаются только регистром, следует использовать приложения POSIX.
Системные файлы NTFS. NTFS включает несколько системных файлов, которые скрыты от просмотра на томе. Системные файлы используются только файловой системой для хранения метаданных и поддержания работы файловой системы. Системные файлы записываются на том утилитой Format. Список системных файлов NTFS представлен в табл.
Системный файл |
Имя файла |
Описание |
Master File Table (главная файловая таблица) |
$Mft |
Список содержимого тома NTPS. |
Master File Таblе2 (копия главной файловой таблицы) |
$MftMirr |
Зеркальное отображение наиболее важных частей MFT; используется для гарантирования доступа к MFT в случае сбоя одиночного сектора. |
Log File (регистрационный файл) |
$LogFile |
Список шагов транзакции, используемых Log File System для восстановления состояния (recoverability). |
Volume (том) |
$Volume |
Имя, версия и другая информация относительно тома. |
Attribute Definition (определение атрибутов) |
$AttrDef |
Таблица имен атрибутов, номеров и дескрипторов. |
Root Filename Index (индекс корня файловых имен) |
$. |
Корневой каталог. |
Claster Bitmap (битовый массив кластеров) |
$Bitmap |
Описание содержимого тома, показывающее, какие размещаемые модули использованы. |
Boot File (загрузочный файл) |
$Boot |
Содержит информацию начальной загрузки для тома, если том является загрузочным |
Bad Cluster File (файл плохих кластеров) |
$BadClus |
Содержит указание положения плохих кластеров тома. |