- •Л а б о р а т о р н а я р а б о т а № 1 Физическая структура дисковой памяти
- •1. Теоретическая часть
- •2. Практическая часть
- •3. Содержание отчета
- •Основные сведения о системном отладчике debug
- •Л а б о р а т о р н а я р а б о т а № 2 Системные средства распределения дискового пространства в ос Windows и ms dos
- •1. Теоретическая часть
- •2. Практическая часть
- •3.Содержание отчета
- •Л а б о р а т о р н а я р а б о т а № 3 Создание приложений Windows с использованием средств прикладного программирования Win32 api
- •2. Функции для выполнения операций с файлами, папками и дисками
- •2.2. Задание для выполнения к части 1 лабораторной работы
- •Часть 2
- •Processor_intel_486;
- •Часть 3
- •5. Содержание отчета по лабораторной работе
- •Лабораторная работа № 4 Архитектура и особенности файловой системы fat32
- •1.1. Общая характеристика файловой системы fat32
- •1.2. Системные структуры данных fat32
- •1.3. Программная реализация чтения системных структур раздела диска с файловой системой fat 32
- •2. Практическая часть
- •3.Содержание отчета
- •Литература
5. Содержание отчета по лабораторной работе
Требования к содержанию отчета соответствуют требованиям к отчету в лабораторной работе № 1.
Лабораторная работа № 4 Архитектура и особенности файловой системы fat32
Теоретическая часть
1.1. Общая характеристика файловой системы fat32
Система FAT32 - новая файловая система на основе формата FAT, она поддерживается всеми основными версиями Windows: Windows 95 OSR2, Windows 98, Windows 2000, Windows XP, Windows 7.
Основное отличие этой файловой системы от предшествующих вариантов FAT12 и FAT16 состоит в том, что FAT32 использует 32-разрядные номера кластеров, но при этом резервирует старшие 4 бита, так что эффективный размер идентификатора кластера составляет 28 бит. Максимальный размер кластеров FAT32 равен 32 Кбайт, что теоретически позволяет работать с 8-терабайтными разделами. Большее число кластеров, поддерживаемое FAT32, позволяет ей управлять дисками более эффективно, чем FAT 16. FAT32 может использовать 512-байтовые кластеры для томов размером до 128 Мбайт.
Существующие инструментальные средства и драйверы будут работать и на FAT32-дисках. Однако драйверы блочных устройств MS-DOS (например, Aspidisk.sys) и дисковые утилиты нуждаются в модификации для поддержки FAT32. Все дисковые утилиты, поставляемые Microsoft (Format, Fdisk, Defrag, а также ScanDisk для реального и защищенного режимов), переработаны и полностью поддерживают FAT32.
Структура раздела диска в FAT32 несколько отличается от разделов с FAT12 иFAT16 (рис. 1)6.
1.2. Системные структуры данных fat32
Как и в прежних системах в файловой системе FAT32 дисковое пространство логического раздела делится на две области – системную и область данных. Системная область создается и инициализируется при форматировании, а впоследствии обновляется при манипулировании файловой структурой. Системная область файловой системы FAT32 состоит из следующих компонентов:
загрузочная запись (boot record, BR);
резервная область, включающая дополнительную системную структуру FSInfo;
две копии таблиц размещения файлов FAT 1 и FAT 2.
Корневой каталог в системной области FAT32 отсутствует и может быть расположен в любом месте области данных раздела и иметь произвольный размер.
Общее число зарезервированных секторов теперь перед первой FAT равно 32.
Область данных логического диска содержит файлы и каталоги, подчиненные корневому каталогу, и разделена на участки одинакового размера – кластеры. Кластер может состоять из одного или нескольких последовательно расположенных на диске секторов. Число секторов в кластере должно быть кратно 2n и может принимать значения от 1 до 64. Размер кластера зависит от объема логического диска.

Рис. 1
В первом секторе логического диска с системой FAT32 располагается загрузочный сектор (Boot Record – BR) и блок параметров BIOS (BPB). Блок параметров BIOS в FАТ32 занимает больше места, чем стандартный, и называется Big FAT BIOS Parameter Block (BF_BPB). Из-за этого загрузочный сектор теперь занимает не один, а три физических сектора, причем имеется еще дополнительный и размещается через три физических сектора в седьмом, восьмом и девятом физическом секторе.
BF_BPB - это расширенная версия ВРВ, которая использовалась в 12- и 16-разрядной FAT. Он содержит те же структуры, что и стандартный BPB, но включает несколько дополнительных полей, которые используются только в FAT32. Начальный участок данного блока (табл. 1) для всех типов FAT идентичен за исключением полей со смещением 0x11 и 0x16, в которых для FAT 32 указываются нулевые значения.
Таблица 1
|
Смещение |
Размер, байт |
Описание |
|
0x00 |
3 |
Безусловный переход (jmp) на загрузочный код |
|
0x03 |
8 |
Идентификатор фирмы-изготовителя |
|
0x0B |
2 |
Число байт в секторе (512) |
|
0x0D |
1 |
Число секторов в кластере |
|
0x0E |
2 |
Число резервных секторов в резервной области раздела, начиная с первого сектора раздела |
|
0x10 |
1 |
Число таблиц (копий) FAT |
|
0x11 |
2 |
Для FAT12/FAT16 - количество 32-байтных дескрипторов файлов в корневом каталоге; для FAT32 это поле имеет значение 0 |
|
0x13 |
2 |
Общее число секторов в разделе; если данное поле содержит 0, то число секторов задается полем по смещению 0x20 |
|
0x15 |
1 |
Тип носителя. Для жесткого диска имеет значение 0xF8; для гибкого диска (2 стороны, 18 секторов на дорожке) – 0xF0 |
|
0x16 |
2 |
Для FAT12/FAT16 это поле содержит количество секторов, занимаемых одной копией FAT; для FAT32 это поле имеет значение 0 |
|
0x18 |
2 |
Число секторов на дорожке (для прерывания 0x13) |
|
0x1A |
2 |
Число рабочих поверхностей (для прерывания 0x13) |
|
0x1C |
4 |
Число скрытых секторов перед разделом |
|
0x20 |
4 |
Общее число секторов в разделе. Поле используется, если в разделе свыше 65535 секторов, в противном случае поле содержит 0. |
Существенные различия в структуре загрузочных секторов для разных типов FAT начинаются со смещения 0x24. Для FAT32 структура этой части BPB (BF_BPB) имеет вид, представленный в табл. 2.
Таблица 2
|
Смещение |
Размер, байт |
Описание |
|
0x24 |
4 |
Количество секторов, занимаемых одной копией FAT |
|
0x28 |
2 |
Номер активной FAT |
|
0x2A |
2 |
Номер версии FAT32: старший байт - номер версии, младший – номер ревизии. В настоящее время используется значение 0:0 |
|
0x2С |
4 |
Номер кластера для первого кластера корневого каталога |
|
0x30 |
2 |
Номер сектора структуры FSInfo в резервной области логического диска |
|
0x32 |
2 |
Номер сектора (в резервной области логического диска), используемого для хранения резервной копии загрузочного сектора |
|
0x34 |
12 |
Зарезервировано (содержит 0) |
Кроме перечисленных полей, загрузочный сектор логического диска должен содержать в байте со смещением 0x1FE код 0x55, а в следующем байте (смещение 0x1FF) – код 0xAA. Указанные два байта являются признаком загрузочного диска.
Загрузочный сектор выполняет две важные функции: описывает структуру данных на поверхности дискового носителя, а также позволяет осуществить загрузку операционной системы.
На логическом диске с организацией FAT32 дополнительно присутствует структура данных FSInfo, которая размещается в первом секторе резервной области. Эта структура содержит информацию о количестве свободных кластеров на диске и о номере первого свободного кластера в таблице FAT. Формат структуры FSInfo представлен в табл 3.
Таблица 3
|
Смещение |
Размер, байт |
Описание |
|
0x000 |
4 |
Значение 0x41615252 – сигнатура, которая служит признаком того, данный сектор содержит структуру FSInfo |
|
0x004 |
480 |
Зарезервировано (содержит 0) |
|
0x1E4 |
4 |
Значение 0x61417272 (сигнатура) |
|
0x1E8 |
4 |
Содержит текущее число свободных кластеров на диске. Если в поле записано значение 0xFFFFFFFF, то число свободных кластеров неизвестно, и его необходимо вычислять |
|
0x1EC |
4 |
Содержит номер кластера, с которого дисковый драйвер должен начинать поиск свободных кластеров. Если в поле записано значение 0xFFFFFFFF, то поиск свободных кластеров нужно начинать с кластера номер 2 |
|
0x1F0 |
12 |
Зарезервировано (содержит 0) |
|
0x1FC |
4 |
Сигнатура 0xAA550000 – признак конца структуры FSInfo |
Еще одно важное новшество в FАТ32 состоит в следующем. В прежних версиях файловой системы FAT повреждение загрузочного сектора приводило к полной потере всего содержимого диска. В FAT32 при подготовке раздела с помощью системных программ (например, программой FDISK) создается резервная копия загрузочного сектора, которая помещается в логический сектор 6 данного раздела. Если новая MBR при обращении к загрузочному сектору обнаруживает ошибку чтения или неправильную сигнатуру, она ищет сектор 6 и считывает остальную часть загрузочного кода уже из него.
Предназначение FAT32 не изменилось. Она по-прежнему используется как таблица, связывающая отдельные кластеры файла. Элементы таблицы FAT теперь в 2 раза длиннее (4 байта).Старшие 4 бита каждого 32-битного значения зарезервированы и не участвуют в формировании номера кластера, поэтому максимальное число кластеров в 32-разрядной FAT равно 268 435 445.
Если кластер свободен, то соответствующий элемент FAT содержит код 0. Элементы каталожного дескриптора, указывающие на первый кластер файла, теперь состоят из четырех байтов, а содержимое этих байтов является номером (адресом) следующего кластера и элемента таблицы FAT, который содержит номер следующего кластера файла, а также является номером элемента таблицы FAT и т. д. до последнего кластера файла. Элемент FAT, соответствующий последнему кластеру в цепочке, содержит сигнатуру конца файла 0xFFFFFFF8. Если элемент FAT содержит код 0x0FFFFFF7, то кластер помечается как поврежденный и не должен выделяться системой.
Начальный кластер, указанный в 32-х байтном дескрипторе каталога, сообщает операционной системе, где на диске искать первую часть файла и где в таблице FAT32 искать следующий номер кластера. В показанном ниже дескрипторе каталога адрес начального кластера выделен полужирным шрифтом.
|
49 4F 20 20 20 20 20 20 - 44 4F 53 07 00 00 00 00 |
IO SYS..... |
|
00 00 00 00 00 00 80 32 - ЗЕ 1В 02 00 46 9F 00 00 |
...... |
Для указания номера кластера используются два дополнительных байта. Они размещаются в зарезервированном поле дескриптора (в примере, показанном выше, это поле содержит код 00 00). Объединяя их с обычными (существующими в FAT16) двумя байтами (02 00), операционная система получает нужное значение (00 00 00 02) и ищет по нему соответствующий элемент таблицы FAT. Ниже показан пример записи с номерами кластеров файла в 32-разрядной таблице FAT:
F8 FF FF 0F FF FF FF 0F - 03 00 00 00 04 00 00 00
05 00 00 00 06 00 00 00 - 07 00 00 00 08 00 00 00
09 00 00 00 0А 00 00 00 - 0В 00 00 00 0С 00 00 00
0D 00 00 00 0Е 00 00 00 - 0F 00 00 00 10 00 00 00
11 00 00 00 12 00 00 00 - 13 00 00 00 14 00 00 00
15 00 00 00 16 00 00 00 - 17 00 00 00 18 00 00 00
19 00 00 00 1А 00 00 00 - 1В 00 00 00 FF FF FF F8
Как и раньше в FAT 16, F8 - это байт, содержащий дескриптор носителя. Следующие семь байтов, FF FF 0F FF FF FF 0F, зарезервированы. Номера кластеров записываются как четырехбайтовые числа, в которых младшие байты указаны первыми. Их следует читать так:
|
Код в таблице |
03 00 00 00 |
04 00 00 00 |
05 00 00 00 |
06 00 00 00 |
|
Читаемое значение |
00000003 |
00000004 |
00000005 |
00000006 |
Конец цепочки кластеров для файла помечается маркером FFFFFFF8.
Корневой каталог в FAT32 может содержать до 65 535 элементов. В загрузочном секторе появился новый элемент, который указывает на первый кластер корневого каталога. Поэтому корневой каталог больше не привязан к строго определенному участка на диске (раньше он должен был находиться непосредственно за второй таблицей FAT) и может расширяться точно так же, как и любой подкаталог.
В файловых системах FAT32 и VFAT (виртуальная FAT, расширение FAT16) включена поддержка длинных имен файлов (long file name, LFN). Для хранения длинного имени используются дескрипторы каталога, смежные с основным дескриптором. Имя файла записывается не ASCII-символами, а в системе кодирования Unicode. В одном дескрипторе каталога можно сохранить фрагмент длиной до 13 символов Unicode. Неиспользованный участок последнего дескриптора заполняется кодами 0xFFFF. Структура дескриптора каталога для длинного имени файла представлена в табл. 4.
Длинное имя записывается в каталог первым, причем дескрипторы длинного имени размещаются в обратном порядке, начиная с последнего. С целью поддержки совместимости для каждого длинного имени файла вслед за длинным (полным) именем размещается короткое имя файла, содержащий укороченный по специальному алгоритму вариант этого имени. Он называется псевдонимом имени.
Таблица 4
|
Смещение |
Размер (байт) |
Описание |
|
0x00 |
1 |
Номер фрагмента |
|
0x01 |
10 |
Символы 1-5 имени файла в Unicode |
|
0x0B |
1 |
Атрибуты файла |
|
0x0C |
1 |
Байт флагов |
|
0x0D |
1 |
Контрольная сумма короткого имени |
|
0x0E |
12 |
Символы 6-11 имени файла в Unicode |
|
0x1A |
2 |
Номер первого кластера (заполняется нулями) |
|
0x1C |
4 |
Символы 12-13 имени файла в Unicode |
Псевдоним удовлетворяет формату "8.3”, составляется из первых шести символов имени файла, дополняемых знаками ~n (где n - порядковый номер), и первых трех символов за последней точкой. В псевдониме используются только допустимые символы, а все буквы должны быть заглавными, чтобы соответствовать правилам формата "8.3".
В качестве примера ниже приводится структура дескрипторов каталога для файла с именем "The quick brown fox". Система создала представление этого имени в формате "8.3", THEQUI~1.FOX (в элементе каталога нет "точки", поскольку предполагается, что точка следует после восьмого символа), и использовала два дополнительных 32-х байтных дескриптора для хранения длинного Unicode-имени. Каждая строка на рисунке состоит из 16 байт.
Второй (и последний) элемент для длинного имени:
|
0х42 |
w |
n |
. |
f |
o |
0x01 |
0x00 |
Контр. сумма |
x |
|
0x0000 |
0xFFFF |
0xFFFF |
0xFFFF |
0xFFFF |
0x0000 |
0xFFFF |
0xFFFF |
Первый элемент для длинного имени:
|
0x01 |
T |
h |
e |
|
q |
0x0F |
0x00 |
Контр. сумма |
u |
|
i |
c |
k |
|
b |
0x0000 |
r |
o |
Элемент для короткого имени:
|
T |
H |
E |
Q |
U |
I |
~ |
1 |
F |
O |
X |
0x20 |
NT |
Время создания |
|
Дата создания |
Время последнего доступа |
0x0000 |
Время последней модификации |
Дата последней модификации |
Первый кластер |
Размер файла |
