Архитектура файловой системы
Новая архитектура файловой системы состоит из множества отдельных составляющих. На самом деле называть ее "файловой системой" не вполне правильно. Она имеет уровневую структуру, при этом на высшем уровне располагается устанавливаемый диспетчер файловой системы Installable filesystem manager (IFS), а на низком уровне – набор драйверов портов или драйверов минипортов, которые взаимодействуют с отдельными аппаратными средствами. В пределах той функциональности, что обеспечивают указанные компоненты, система может поддерживать несколько активных файловых систем. Некоторые из них (например FAT) Windows 9х поддерживает непосредственно. Поддержка файловых систем, разработанных не в Microsoft, осуществляется при помощи устанавливаемых модулей, которые поставляются самими фирмами-разработчиками. На рисунке 3.18 показаны все основные компоненты архитектуры файловой системы.
Выбор уровневой управляемой IFS структуры должен был снять проблемы, связанные с использованием прерывания MS-DOS INT 21H как единственного интерфейса для всех действий файловой системы.
На рисунке 3.18 показано весьма незначительное число уровней файловой системы, хотя именно эти компоненты должны присутствовать в стандартной системе.
Всего файловая система поддерживает 32 уровня: от подсистемы ввода-вывода (I/O subsystem – IOS) и далее до аппаратных средств. При инициализации компоненты регистрируют себя в IOS и объявляют уровни, на которых они хотели бы работать. Для того чтобы работать на более чем одном уровне, модуль должен передать IOS различные точки входа – по одной для каждого уровня. Над IOS располагаются файловые системы и устанавливаемый диспетчер файловой системы (IFS manager).
94) Основные функции наиболее употребительных уровней и компоненты, которые могут в них находиться:
95)
Рис. 3.18. Уровни архитектуры файловой системы Windows 9х
Диспетчер IFS находится на самом верхнем уровне и представляет собой единственный VЧD, обеспечивающий интерфейс между запросами приложения и конкретной файловой системой, к которой обращается это приложение. Диспетчер IFS принимает как динамические обращения к функциям API от приложений Win32, так и обращения к прерыванию INT 21H, генерируемые Win16 или MS-DOS-приложениями. Диспетчер IFS преобразует эти обращения в обращения к следующему уровню – уровню файловой системы.
Работающая на этом уровне VFAT представляет собой работающую в защищенном режиме реализацию FAT файловой системы. VFAT может служить примером драйвера файловой системы (filesystem driver – FSD). Каждый FSD поддерживает определенную организацию файловой системы и обслуживает запросы. Диспетчер IFS – это единственный модуль, который может обращаться к FSD, приложения не могут обращаться к FSD напрямую.
Сам по себе VFAT – 32-разрядный модуль, написанный в виде реентерабельного кода, что позволяет многим задачам параллельно выполнять один и тот же код файловой системы.
CDFS представляет собой реализованную в виде реентерабельного кода для защищенного режима, соответствующую стандарту ISO 9660 файловую систему компакт-дисков. Это еще один пример FSD. В большинстве случаев CDFS заменит резидентную программу MSCDEX, используемую для поддержки компакт-дисков, и таким образом все взаимодействие с приводами компакт-дисков будет проходить в защищенном режиме.
Подсистема ввода-вывода (IOS) – это высший уровень подсистемы блочных устройств. Модуль IOS постоянно находится в памяти и обеспечивает другим компонентам файловой системы разнообразный сервис, включая перенаправление запросов и уведомлений о тайм-аутах.
Драйвер отслеживания томов (Volume Tracking Driver – VTD) занимает следующий после IOS уровень и отвечает за управление сменными устройствами. Обычно такими устройствами являются дисководы для дискет, однако сервисом VTD может пользоваться любое устройство, соответствующее "правилам сменности" Windows 9х. Основная задача VTD заключается в слежении за тем, чтобы в дисководе находился нужный диск или устройство. Если вытащить дискету из дисковода в то время, пока файл еще открыт, именно VTD просигнализирует об ошибке.
Драйвер определенного типа (Type Specific Driver – TSD) управляет всеми устройствами какого-то одного типа, например, жесткими дисками или накопителями на магнитной ленте. TSD проверяет запросы к устройству, которым он управляет и осуществляет преобразование входных параметров из логических в физические. Необходимо обратить внимание на то, что TSD в большей степени относится к устройствам определенного логического типа, например, к сжатым дискам, нежели конкретным аппаратным средствам.
Драйверы, поддерживаемые поставщиками (Vendor Supplied driver – VSD) представляют уровень, на котором работают драйверы, перехватывающие запросы к конкретным блочным устройствам. На этом уровне, например, можно частично изменить поведение существующего драйвера блочного устройства, а не подключать совершенно новый драйвер. Хорошим примером потенциального VSD служит модуль шифрования данных.
Драйвер порта (Port Draiver – PD) управляет конкретным адаптером. На персональном компьютере, оснащенном шиной ISA, будет работать драйвер порта IDE. Он занимается взаимодействием с устройством на самом низком уровне, включая инициализацию адаптера и обслуживание аппаратных прерываний.
SCSI-преобразователь (SCSIizer) преобразует запросы на ввод-вывод в блоки команд формата SCSI. Обычно на этом уровне будет присутствовать по одному SCSIizer-модулю на каждое SCSI-устройство, например, привод компакт-диска.
96) SCSI-диспетчер – это модуль, который позволяет применять в Windows 9х драйверы минипортов Windows NT. Это означает, что можно в буквальном смысле использовать одни и те же двоичные файлы драйверов как переводчика между драйвером минипорта Windows NT и верхними уровнями файловой системы.
Драйвер минипорта (Miniport Driver) – это модуль, специфичный для SCSI-устройств. Взаимодействуя со SCSI-диспетчером, он делает все то же самое, что и драйверы портов, но только для SCSI-адаптера. Драйверы минипортов Windows 9х строятся в соответствии с теми же правилами, что и драйверы минипортов Windows NT.
Преобразователь (Mopper) защищенного режима – модуль, который позволяет использовать существующие MS-DOS-драйверы в Windows, что очень важно для обеспечения совместимости. Преобразователь защищенного режима маскирует драйверы реального режима для обеспечения большей отдачи от модулей новой файловой системы таким образом, чтобы им не приходилось учитывать разницу в интерфейсе.
Хранение длинных имен
97) Требования совместимости, которым должна удовлетворять Windows 9х, означают, что невозможно просто изменить существующий формат хранения данных на диске, который применяется в FAT файловой системе.
Формат элемента каталога FAT файловой системы для короткого имени файла представлен на рисунке 3.19.
Рис. 3.19. Формат элемента каталога FAT
98) Новая VFAT файловая система поддерживает как длинные, так и короткие имена и, если не считать того, что она не использует поле "дата последнего изменения файла", 32-байтный элемент каталога идентичен тому формату, который поддерживают предыдущие версии MS-DOS.
99) Метод работы с длинными именами файлов строится на использовании байта атрибута элемента каталога для короткого имени файла. Установка младших четырех бит этого байта (значение OFH) задает элементу каталога атрибуты "только для чтения", "скрытый", "системный" и "метка тома" (read only, hidden, system file и volume). Добавление атрибута "метка тома" дает "невозможное" сочетание. Как это ни удивительно, проведенное Microsoft тестирование показало, что ни одна из существующих дисковых утилит не обратила внимания на такую комбинацию бит. В отличие от других, не имеющих смысла комбинаций, заметив которые дисковые утилиты пытаются "исправить" ошибку, эта (OFH) защищает элемент каталога от изменения.
В пределах одного кластера, в котором хранится информация о содержимом каталога, элемент с длинным именем файла располагается в соответствии с форматом, который показан на рисунке. Длинное имя файла не может существовать без связанного с ним элемента с коротким именем. Если имеет место такая ситуация, значит нарушена целостность данных на диске.
Каждый 32-байтный элемент, описывающий длинное имя файла, содержит порядковый номер (seguence number), защитный байт атрибута (protective attribute bute), значение типа (type value) и контрольную сумму (checksum). Порядковый номер помогает Windows 9х узнать о непоследовательном или некорректном изменении структуры каталога.