Файловая система FAT не может контролировать каждый сектор в отдельности, поэтому она объединяет смежные сектора области данных в кластеры (clusters). Таким образом, уменьшается общее количество единиц хранения данных, за которыми нужно следить этой файловой системе. Каждый кластер имеет определенный номер, а размер кластера выбирается числом, кратным степени 2, в зависимости от объема диска и размеров файловых таблиц.
Файл может занимать только целое число секторов. Разумеется, это приводит к тому, что часть пространства диска расходуется впустую. Если файл занимает больше одного кластера, то все кластеры, занимаемые файлом, организуются в цепочку кластеров (cluster chain). Количество файлов на диске не может превышать количество кластеров (элементов FAT).
Что такое FAT
Свое название FAT получила от одноименной таблицы размещения файлов. В таблице размещения хранится информация о кластерах логического диска. Каждому кластеру в FAT соответствует отдельная запись – элемент FAT, который показывает, свободен ли данный кластер или занят или помечен как испорченный (сбойный). Если кластер занят под файл, то в соответствующей записи в файловой таблице указывается адрес кластера, содержащего следующую часть файла или код, говорящий о том, что данный кластер последний в цепочке.
Поэтмоу FAT называют файловой системой со связанными списками.
Сейчас я расскажу, откуда взялись ограничения на количество кластеров на диске.
Размер раздела Mb
|
FAT16Размер кластера, Kb (число секторов)
|
Размер FAT, Kb
|
FAT32Размер кластера (по умолчанию), Kb (число секторов)
|
Размер FAT, Kb
|
0 – 15 | 4 (8) | 0,5 – 6 | – | – |
16 – 27 | 2 (4) | 16 – 28 | – | – |
128 – 255 | 4 (8) | 64 – 128 | – | – |
256 – 511 | 8 (16) | 64 – 128 | – | – |
512 – 1023 | 16 (32) | 64 – 128 | 4 (8) | 512 – 1023 |
1024 – 2145 | 32 (64) | 64 – 128 | 4 (8) | 1024 – 2145 |
2146 – 8191 | – | – | 4 (8) | 2146 – 8191 |
8192 – 16383 | – | – | 8 (16) | 4096 – 8191 |
16384 – 32767 | – | – | 16 (32) | 4096 – 8191 |
32768 и более | – | – | 32 (64) | 4096 и более |
Оригинальная версия FAT, разработанная для DOS 1.00, использовала 12-битную таблицу размещения файлов, то есть один элемент FAT имел размер 1,5 байта (12 бит = 1,5 байт) и поддерживала размеры до 16 Mb. Для поддержки жестких дисков размером более 32 Mb разрядность FAT была увеличена до 16 бит (FAT16), а размер кластера до 64 секторов (32 Kb). Так, каждому кластеру может быть присвоен уникальный 16-тиразрядный номер, то FAT16 поддерживает максимально 216, или 65536 кластеров на одном томе.
Организация хранения файлов на примере FAT16.
Итак, размер элемента FAT равен 2 байта. Элемент FAT содержит число, которое для FAT16 может иметь одно из следующих значений:
- 0000h – свободный кластер;
- 0002h-FFEFh – номер следующего элемента в цепочке;
- FFF7h – дефектный;
- FFF8h-FFFFh – последний в цепочке;
0000h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h | 0008h | 0009h | 000Ah | 000Bh | 000Ch | |||||||||||||
F8 | FF | FF | FF | 03 | 00 | 04 | 00 | 05 | 00 | FF | FF | FF | FF | 08 | 00 | 0A | 00 | F7 | FF | 0C | 00 | 00 | 00 | FF | FF |
Файл 1 | Файл 2 | Файл 3 | BAD | Файл 3 | free | Файл 3 |
Каждый элемент FAT – 2 байта, нумерация сверху.
Первый байт:
- F8 – дескриптор носителя;
- Второй-четвертый байты:
- FF – заполнитель;
Начиная со второго элемента FAT – идёт первый файл. Содержимое байт (обратный порядок) – номер следующего элемента FAT. Последний байт в цепочке – FFFFh. Таким образом “Файл 1” занимает 0002h-0005h элементы FAT, “Файл 2” умещается в одном кластере и занимает 0006h кластер; “Файл 3” фрагментирован, занимает 0007h,0008h,000Ah,000Ch кластеры. Кластер 0009h помечен как сбойный, 000Bh помечен как незанятый.
Тут мы сталкиваемся с понятием фрагментации. Обратите внимание на “Файл 3″ и тогда станет понятно, что это за явление.
Обращу внимание на то, что же такое дескриптор носителя. Тот самый первый байт F8h. Это всего навсего тип носителя. F8h – жесткий диск, F0h – дискета 3,5”. F9-FFh – дискеты других форматов.
Каталоги.
Информация о каждом файле распологается в элементах каталога, в который данный файл входит. Элемент каталога содержит размер файла (в байтах), имя файла, ссылку на первый кластер цепочки (номер кластера) и некоторые атрибуты элемента. Считывание файла целиком складывается из следующих операций:
- Найти элемент в каталоге;
- Считать первый кластер, на который ссылается этот элемент;
- Выясняем, является ли кластер последним. Если не последний, то содержит номер следующего элемента в цепочке, который считывается к ранее считанным кластерам;
- Когда будет вычитан последний файл в цепочке, все лишние данные кластера отсекаются по длине файла, указанной в элементе каталога;
Comments: