Файловые системы (1114721), страница 9
Текст из файла (страница 9)
Вызов API передается соответствующему системному сервису,который выбирает необходимые драйверы и вызывает их (в момент обращениядрайвер может не находится в оперативной памяти). Все драйверы разныхуровней общаются друг с другом через диспетчер ввода-вывода стандартнымобразом, поэтому загрузка/выгрузка или замена драйвера на другой того жеуровня не влияет на работу остальных драйверов. Каждый драйвервзаимодействует только с соседними по вертикали, такая организация вводавывода называется послойной и представляет собой многоуровневую модельвзаимодействия. Помимо друг друга драйверы взаимодействуют с другимикомпонентами исполняемой части NT как это показано на рисунке.
Этикомпоненты - Сервис журнала транзакций, обеспечивающий обработкутранзакций (подробнее в части “восстанавливаемость”), и Диспетчер кэш,организующий кэширование файлов в оперативной памяти с помощьюдиспетчера виртуальной памяти. Для ускорения работы ввода-выводаиспользуется алгоритм отложенной записи (lazy writer) и асинхронная запись надиск.40С точки зрения внутренней организации NTFS - это реляционная базаданных, позволяющая протоколировать транзакции, осуществлять поиск поразличным атрибутам файлов, производить восстановление данных и т.д.Подробно вопросы внутренней организации и восстанавливаемости будутрассматриваться ниже.
И наконец с третьей точки зрения NTFS - это частьобщей объектной модели Windows NT, предоставляющая возможность работы ссоответствующими файловыми объектами, с контролем доступа и режимамисовместной работы. Приложение создает файлы и осуществляет доступ кфайлам и каталогам так же, как и ко всем остальным объектам Windows NT:при помощи описателей объектов. Перед получением драйвером NTFS запросана ввод-вывод, диспетчер объектов и система контроля прав доступа проверяютправа вызывающего процесса для доступа к данному файловому объекту.Система контроля сравнивает маркер доступа вызывающего процесса сзаписями в списке контроля доступа файлового объекта.2.2.2. Общие принципы организации на дискеОсновным понятием в NTFS является том (volume).
Каждомулогическому разделу на диске соответствует свой том. Соответственно путь клюбому объекту ФС в NT начинается с имени тома. Каждый том содержитспециальные системные файлы, пользовательские файлы, каталоги испециальные области дискового пространства, используемые NTFS. Всесистемные данные на диске такие как битовые карты, каталоги, системныйзагрузчик и т.д. NTFS хранит в виде самостоятельных файлов. Базовой инеделимой единицей дискового пространства в NTFS является кластер. Какговорилось выше, его размер задается при форматировании и равен от 512 байтдо 64 Кбайт (но обязательно степень 2: 1Кб, 2Кб, 4Кб и т.д.). Это числоназывается кластерным множителем.
Внутри себя NTFS работает только скластерами. Все кластеры диска пронумерованы от начала до конца тома илюбой физический адрес на диске задается в виде логического номера кластера(LCN). Соответственно, физический адрес получается умножением LCN накластерный множитель.NTFS отслеживает содержание тома в реляционной базе данных ,назывемой MFT (main file table). Как и в любой реляционной базе данныхтаблица MFT состоит из строк (рядов файловых записей) и столбцов.
Каждаястрока это запись об одном из элементов ФС: файле или каталоге, а столбцы этоатрибуты этого элемента.NTFS рассматривает файл, не как последовательность байт или записей,а как набор атрибутов, один из которых это данные, содержащиеся в файле.Соответственно, при создании нового файла в MTF добавляется новая запись, апри добавлении новых атрибутов или открытии нового потока данных всоответствующую файловую запись добавляются новые колонки. Как и многиереляционные базы данных NTFS может внутренне организовывать поиск исортировку по любым атрибутам, но на данный момент реализованаиндексация и сортировка только по именам. MTF содержит по одной файловойзаписи для каждого файла тома, включая саму себя, т.к. сама MFT реализованакак отдельный файл на диске.
Но если файл имеет очень много атрибутов или41сильно фрагментирован, то он может занимать более одной файловой записи,тогда первая запись называется базовой.Файл на томе NTFS идентифицируется 64-битным числом-файловойссылкой. 48 бит отведено под порядковый номер файла в MTF, остальная частьиспользуется для внутреннего контроля целостности в NTFS. Рассмотримподробно структуру таблицы MTF.MFTрезервная копия MFT (частичная)Файл с журналом транзакцийФайл с описателем томаТаблица определения атрибутовКорневой каталогФайл битовой картыЗагрузочный файлФайл плохих секторов…Пользовательские файлы и каталогиСтрока MFT - это файловая запись соответствующая файлу с MFT. Затемидет файловая запись резервной копии MFT, используемой привосстановлении, файловая запись для файла журнала транзакций, файла сданными о томе.
Файл с таблицей атрибутов содержит информацию обатрибутах, которые поддерживаются на данном томе. Затем идет запись длякорневого каталога (“\”). Файл битовой карты это файл с закодированнойинформацией о распределении свободных кластеров на диске. Загрузочныйфайл - это загрузчик системы, а в файл плохих секторов добавляются всеобнаруженные системой сбойные кластеры тома. Данные файлы используютсятолько системой и поэтому называются файлами методанных, все остальноеявляются пользовательскими. Пример участка MFT с пользовательскимиданными.СтандартнаяинформацияИмяфайлаДескрипторзащитыФайл 0ДанныеДругиеатрибутыБезымянный потокФайл 1Безымянный потокБезымянный Имен.
потокпотокКорень Размещение битоваяиндекса индексамаскаФайл 2КаталогMS-DOS имяФайл nБезымянный поток(Стандартная информация это набор атрибутов, наследованный от MS-DOS.)Рассмотрим структуру файловых записей и записей каталогов какэлементов таблицы MFT. Размер файловой записи может меняться от 1 Кбайта42до 4 Кбайт и определяется в момент форматирования. Как говорилось выше,каждая файловая запись это набор атрибутов. Все атрибуты упорядочены потипу (точнее по коду типа), некоторые могут встречаться несколько раз(например, если файл имеет несколько атрибутов данных или несколько имен).Атрибуты “Стандартные данные”, “Имя файла”, “Дескриптор защиты” и“Данные” являются обязательными.
Значение атрибутов это поток(последовательность) байтов. Для маленьких файлов все его атрибуты и ихзначения, включая данные, могут храниться в MFT. Атрибуты, значениякоторых храняться в MFT называются резидентными. В начале каждогоатрибута содержится его заголовок, который содержит информацию, являетсяли данный атрибут резидентным или нет. Если атрибут резидентный, то взаголовке так же хранится размер заголовка и размер поля значений данногоатрибута. Например:СтандартнаяинформацияИмяфайлаДескрипторзащитыРезидентныйсмещение 8hдлина 14hДанныеДругиеатрибуты“Datafile.dat”Если для маленького файла все данные храняться в MFT, то его считываниепроисходит за одно обращение к диску. Аналогично для небольшого каталогавсе атрибуты могут быть резидентными.СтандартнаяинформацияИмяфайлаДескрипторзащитыКорень индексаИндексы файловF1,F2,F3Естественно, что не все данные файла или каталога можно уместить в 1 или 4Кбайта.
Если какой-либо атрибут, например данные не помещается в MFT, тоNTFS выделяет для него на диске область равную MAX(кластерныймножитель, 2 Кбайта), называемую отрезком (extent). Если значение данногоатрибута еще увеличилось, то добавляется новый отрезок и т.д. Такие атрибутыназываются неризедентными. Для связи с отрезками в заголовкенеризидентного атрибута задается LCN-VCN (virtual cluster number)отображение. Например:СтандартнаяинформацияИмяфайлаДескрипторзащитыСтартовыйVCN04VCN012СтартовыйLCNДанныеЧислокластеров1355513558344VCN4ДанныеLCN135551355613557Другиеатрибуты657Данные13558LCN13558135591356013561Если у файловой записи появляется так много атрибутов, что они непомещаются в MFT, то данная запись помечается специальным системным43атрибутом, показывающим, что она является базовой и добавляется ссылка надополнительную запись в MFT (которая так же добавляется в MTF).Рассмотрим теперь структуру записи для больших каталогов.
Каталог вNTFS это просто индекс имен файлов, т.е. набор имен с файловыми ссылками,организованный в виде сбалансированного дерева для ускорения поиска.Отрезки, выделяемые для хранения элементов индекса называютсяиндексными буферами. Атрибут корня индекса содержит первый уровеньиндекса и указывает на индексные буферы, содержащие второй уровень и т.д.Для этого с каждым именем файла в индексе связывается помимо файловойссылки еще и указатель на отрезок, содержащий часть индекса с именами,которые “меньше” в лексиграфическом порядке. Атрибут Размещение индексасодержит VCN-LCN отображения для буферных отрезков, а битовая картаиспользуется для сохранения информации о свободном месте в буферахиндекса.