Л А Б О Р А Т О Р Н А Я Р А Б О Т А № 3
Системные средства распределения дискового пространства в ОС Windows
Теоретическая часть
Принципиальной особенностью файловых систем Windows и DOS является их иерархическая, древовидная структура. Файлы, содержащие однородную и взаимосвязанную информацию, объединяются в группы, которые называются каталогами. В файловой структуре каталоги могут быть связаны друг с другом так, что внутри одного каталога могут создаваться другие каталоги, иначе называемые подкаталогами. Каждый подкаталог по своей структуре фактически является обычным файлом, содержащим список входящих в него файлов и подкаталогов.
На любом устройстве дисковой памяти ПК при выполнении операции форматирования средствами ОС (например, командой format в MS DOS) создается основной так называемый корневой каталог диска. Он находится сразу за последней копией FAT и занимает непрерывную область фиксированного размера, который задается при форматировании и определяет максимальное количество файлов и каталогов, зарегистрированных в корневом каталоге. После корневого каталога на диске находится область файлов и подкаталогов корневого каталога. На рис. 1 представлены основные области диска. Такую структуру имеют логические диски и флеш-диски.
Корневой каталог и любой подкаталог состоит из нескольких элементов (дескрипторов), описывающих файлы и подкаталоги данного каталога. Элемент каталога имеет длину 32 байта и формат[6], представленный в табл. 7.
![]() |
Рис. 1
Таблица 7
Номер поля | Смеще-ние | Размер, байт | Содержимое |
00h | Имя файла или каталога (для MS DOS) | ||
08h | Расширение имени файла | ||
0Bh | Атрибуты файла | ||
0Ch | Зарезервировано | ||
16h | Время создания или последней модификации файла | ||
18h | Дата создания или последней модификации файла | ||
1Ah | Номер первого кластера, распределенного файлу | ||
1Ch | Размер файла в байтах |
Рассмотрим подробнее информацию, содержащуюся в полях элементов каталога.
Первое поле отведено для имени файла или каталога, представленного в символьной форме. Если число символов в имени меньше 8, то правые байты заполняются пробелами (код 20h). В первом байте поля могут находиться специальные коды, показывающие особые состояния файла. Код 00h означает, что данный элемент еще не использовался и является свободным. Когда элемент каталога выделяется для вновь создаваемого файла, в этот байт записывается код первого символа имени файла. Код E5h показывает, что соответствующий файл удален из каталога. Помимо модификации поля имени файла изменяется также содержимое соответствующих элементов FAT(они отмечаются кодом (0)000h), но при этом информация в кластерах не изменяется. Это обстоятельство используется в программах восстановления удаленных файлов. Очевидно, что успешное восстановление возможно, если только после удаления файла на диск ничего не записывалось. По коду E5h ОС определяет, что данный элемент каталога можно использовать для нового файла.
Второе поле размещается сразу за полем имени файла и содержит трехбайтовое расширение имени. При необходимости это поле, как и предыдущее, дополняется справа пробелами.
Третье поле содержит информацию об атрибутах (свойствах) файла. Каждый бит этого поля определяет один атрибут и устанавливается в 1, когда файлу назначается тот или иной атрибут. Биты этого поля имеют следующие значения.
Бит 0 отмечает файл, как только читаемый. Такое состояние защищает файл от модификации и удаления.
Биты 1 и 2 при установке в 1 превращают файл соответственно в скрытый и системный. Оба эти атрибута функционально идентичны и при установке любого из них файл не будет появляться в оглавлении каталога. Системные файлы обычно имеют оба этих атрибута.
Бит 3 означает, что данный элемент каталога хранит метку диска. Такой элемент правильно распознается только в корневом каталоге. Сама метка занимает поля имени файла и расширения, которые рассматриваются как одно поле длиной 11 байт. Для такого элемента каталога поля размера файла и номера начального кластера не используются, но поля даты и времени присутствуют.
Бит 4 означает, что элемент каталога описывает файл, являющийся подкаталогом данного каталога. Для таких элементов используются все поля элемента каталога, за исключением поля размера файла, которое содержит нули. Действительный размер подкаталога находится в результате прослеживания его цепочки кластеров в FAT. Сами подкаталоги также состоят из 32-байтных элементов, описывающих файлы и каталоги нижнего уровня. При этом в любом подкаталоге два первых элемента содержат в поле имени специальные коды и имеют специальное назначение. Первый элемент содержит в поле имени строку "._______"(код "." - 2Eh) и служит указателем на содержащий его каталог. В поле номера начального кластера этот элемент хранит номер первого кластера, в котором находится сам подкаталог. Второй специальный элемент содержит в поле имени строку вида "..______". Он служит указателем каталога более высокого уровня по отношению к данному и в поле номера начального кластера хранит номер первого кластера родительского каталога. Если родительским является корневой каталог, то в указанном поле находится нулевое значение. Наличие в подкаталогах двух специальных элементов позволяет ОС организовывать связи между различными уровнями каталогов.
Бит 5 содержит атрибут "архивный", который введен для более простого образования резервных копий файлов с жесткого диска. Он находится в состоянии 0 для всех файлов, которые не изменялись после того, как производилась последняя операция их резервирования. Когда файл модифицируется, бит 5 устанавливается в 1, а когда резервируется - сбрасывается в 0.
Биты 6,7 байта атрибутов не используются.
В заключение следует отметить, что один и тот же файл может иметь несколько атрибутов.
Пятое поле элемента каталога является полем времени и содержит двухбайтовое беззнаковое целое число, которое в закодированном виде показывает время создания или последней модификации файла. Формат поля времени приведен на рис. 2.
№ бит 15 11 10 5 4 0
Часы(0..23) | Минуты(0..59) | Секунды/2(0..29) |
Рис. 2.
Шестое поле элемента каталога используется для хранения даты создания или обновления файла. Формат поля даты приведен на рис. 3.
№ бит 15 9 8 5 4 0
Год(0..119) | Месяц(1..12) | День(1..31) |
Рис. 3.
Для того чтобы получить значение года обновления файла, необходимо прибавить к величине, хранимой в старших семи битах, значение 1980. Отметим, что в полях времени и даты первым размещается младший байт.
Седьмое поле элемента каталога предназначено для хранения номера начального кластера, выделенного файлу. Номер представляется целым беззнаковым числом, первый байт которого имеет смещение 1Ah. Самый первый кластер пространства данных на диске всегда имеет номер 2.
Восьмое поле является последним в элементе каталога и предназначено для хранения размера файла в байтах как четырехбайтного целого беззнакового числа, причем первый байт со смещением 1Ch является младшим, а последний со смещением 1Fh - старшим. Такое поле допускает размеры файлов до 4 Гб.
Практическая часть
Практическая часть работы № 3, как и работ № 1,2 выполняется в режиме виртуализации операционной системы MS DOS.
2.1. Создать на логическом диске A: в корневом каталоге средствами NC или командами DOS структуру подкаталогов S1 – S6, по варианту, задаваемому преподавателем.
Скопировать из текущего или другого каталога винчестера 2-3 файла длиной 80 - 100 Кб (или создать эти файлы) во все подкаталоги диска A:. Командой LABEL задать диску метку.
2.2. Вычислить границы в секторах основных системных областей дискеты. Построить структуру всего диска (см. рис. 1), указав на ней значение границы каждой области в секторах.
2.3. С помощью команд отладчика debugl,d прочитать в память необходимое число секторов корневого каталога диска A:. Найти строки дампа, содержащие следующие дескрипторы: а) файлов корневого каталога; б) подкаталогов корневого каталога; в) метки диска. Занести в отчет структуру каждого элемента, заполнив таблицу 3.
2.4. По номерам начальных кластеров подкаталогов S1 - S6 вычислить соответствующие номера начальных секторов этих подкаталогов. Прочитать секторы в память и проанализировать их содержимое. Найти дескрипторы подкаталогов. Зафиксировать в отчете их структуру и содержимое полей в виде таблицы, структура которой аналогична табл. 8.
2.5. Найти дескрипторы файлов, зарегистрированных в каждом подкаталоге. Занести в таблицу 8 структуру и расшифрованное содержимое полей этих дескрипторов.
Таблица 8
Смещение | Размер, байт | Содержимое в 16-ричном коде | Расшифровка содержимого |
Метка | |||
Файлы корневого каталога | |||
Подкаталоги S1 - S6 | |||
Файлы подкаталогов | |||
Примечание. При необходимости следует прочитать в память не один, а большее число секторов подкаталогов.
Содержание отчета
Требования к содержанию отчета соответствуют требованиям к отчету в лабораторной работе № 1.
[1] Дополнительная информация о геометрии ЖМД приведена в приложении 1.
[2] Структура FAT рассматривается в лабораторной работе № 4.
[3] Командой <Shift – F4> в текущем каталоге
[4] Кроме FAT могут использоваться и другие файловые системы – FAT32, NTFS и др., имеющая иную структуру.
[5]За исключением FAT 32, которая рассматривается во 2-ой части лабораторного практикума
[6] Этот формат имеет название стандарта «8.3»