Материал просмотрен 2,457 раз(а)

Файловая система 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 – дискеты других форматов.

Каталоги.

Информация о каждом файле распологается в элементах каталога, в который данный файл входит. Элемент каталога содержит размер файла (в байтах), имя файла, ссылку на первый кластер цепочки (номер кластера) и некоторые атрибуты элемента. Считывание файла целиком складывается из следующих операций:

  • Найти элемент в каталоге;
  • Считать первый кластер, на который ссылается этот элемент;
  • Выясняем, является ли кластер последним. Если не последний, то содержит номер следующего элемента в цепочке, который считывается к ранее считанным кластерам;
  • Когда будет вычитан последний файл в цепочке, все лишние данные кластера отсекаются по длине файла, указанной в элементе каталога;