Файлова система FAT

Информация - Разное

Другие материалы по предмету Разное

?альне число 4096, крiм того, значення, бiльшi 0ff6, зарезервованi.

Для DOS версii 3.2 16-бiтовий формат FAT використовуСФться в тому випадку, коли розмiр диска перевищуСФ 20790 секторiв (саме секторiв, а не кластерiв). Фактично це означаСФ, що 16-бiтовий формат використовуСФться тiльки для дискiв, що мають розмiр бiльш 10 мегабайт.

Сектор завантажувального запису (BOOT-сектор) диска, вiдформатованого в DOS версii 4.0 у полi зi зсувом 36h мiстить вiсьмибайтовий рядок, що iдентифiкуСФ формат FAT. Вона маСФ вигляд "FAT12 " або "FAT16 ". Можна використовувати це поле для визначення формату FAT. У структурi BOOT, описаноi у файлi sysp. h, це поле назiваетcя fat_format.

Якщо рздiли на жорсткому диску створювалися утiлiтою DOS FDISK, формат FAT можна визначити, аналiзуючи вмiст поля sys головного завантажувального запису (Master Boot Record). Якщо це поле мiстить значення 1, використовуСФться 12-бiтовий формат, якщо 4 - 16-бiтовий. Проте диск, пiдготовлений програмами диск-менеджерiв, може мати нестандартний для DOS формат таблицi роздiлiв диска (Partition Table), i поле sys може мiстити iншi розмiри, вiдмiннi вiд 1 i 4.

Формат FAT.

Перший байт FAT називаСФться "Описувач середовища" (Media Descriptor) або байт ID iдентифiкацii FAT. Вiн маСФ таке ж значення, як i байт-описувач середовища, що знаходиться в BOOT-секторi логiчного диска.

Наступнi 5 байтiв для 12-бiтового формату або 7 байтiв для 16-бiтового формату завжди мiстять значення 0ffh.

Вся iнша частина FAT складаСФться з 12-бiтових або 16-бiтових комiрок, кожна комiрка вiдповiдаСФ одному кластеру диска. Цi комiрки можуть мiстити такi значення: FAT12 FAT16

Що означаСФ 000h0000h вiльний кластер,

ff0h - ff6hfff0h - fff6h зарезервований кластер,

ff7hfff7h поганий кластер,

ff8h - fffhfff8h - ffffh останнiй кластер у списку,

002h - fefh0002h - ffefh номер такого кластера в списку.

Безпосереднiй доступ до FAT може знадобитися для:

органiзацii сканування каталогiв для пошуку потрiбних файлiв;

для читання каталогiв як файлiв;

для органiзацii захисту iнформацii вiд несанкцiонованого копiювання.

Загальна схема використання FAT така:

ЧитаСФмо FAT у память.Як уже зазначалося FAT розташовуСФться вiдразу пiсля BOOT-сектора (логiчний сектор iз номером 1). Для точного визначення початкового сектора FAT потрiбно прочитати у память BOOT-сектор i проаналiзувати вмiст блока параметрiв BIOS. У поле ressecs записана кiлькiсть зарезервованих секторiв, що розташовуються перед FAT. Поле fatsize мiстить розмiр FAT у секторах. Крiм того, варто враховувати, що на диску може знаходитися декiлька копiй FAT. Операцiйна система використовуСФ тiльки першу копiю, iншi потрiбнi для утiлiт вiдновлення вмiсту диска. Кiлькiсть копiй FAT знаходиться в полi fatcnt BOOT-сектора.

Потiм необхiдно визначити номер першого кластера файла, для якого необхiдно визначити його розташування на диску.

ВикористовуСФмо номер першого кластера як iндекс у FAT для отримання номера такого кластера.

ПовторюСФмо цю процедуру доти, поки отримане з FAT значення не буде вiдповiдати кiнцю файла.

Процедура витягу номера кластера з FAT залежить вiд формату таблицi розмiщення файлiв.

16-бiтову FAT можна уявити як масив 16-бiтових чисел. Для визначення номера такого кластера треба просто отримати 16-бiтове значення з FAT, використавши в якостi iндексу номер попереднього кластера.

Для 12-бiтовоi FAT процедура значно складнiша.

Необхiдно виконати такi дii:

Помножити номер початкового кластера на 3.

Роздiлити результат на 2 (тому що кожний елемент таблицi маСФ довжину 1.5 байта).

Прочитати 16-бiтове слово з FAT, використовуючи в якостi зсуву значення, отримане пiсля дiлення на 2.

Якщо номер початкового кластера парний, на вибране з FAT слово треба накласти маску 0fffh, залишивши молодшi 12 бiтiв. Якщо номер початкового кластера не парний, вибране з FAT значення необхiдно зсунути вправо на 4 бiта, залишивши старшi 12 бiт.

Отриманий результат номер такого кластера в ланцюгу, значення 0fffh вiдповiдаСФ кiнцю ланцюга кластерiв.

Файлова система {DOS} маСФ деревоподiбну структуру. У кореневому каталозi розташовуються 32-байтовi елементи, що мiстять iнформацiю про файли й iншi каталоги. Для читання кореневого каталога необхiдно визначити його розташування i розмiр.

Кореневий каталог знаходиться вiдразу за останньою копiСФю FAT. Кiлькiсть секторiв, що займаються однiСФю копiСФю FAT, знаходиться в блоцi параметрiв BIOS у BOOT-секторi в полi fatsize, кiлькiсть копiй FAT - у полi fatcnt блока BPB. Отже, перед кореневим каталогом знаходиться один BOOT-сектор i (fatcnt_*_fatsize) секторiв таблицi розмiщення файлiв FAT.

Розмiр кореневого каталога можна визначити виходячи iз значення поля rootsize. У цьому полi при форматуваннi диска записуСФться максимальна кiлькiсть файлiв i каталогiв, що можуть знаходитися в кореневому каталозi. Для кожного елемента в каталозi видiляСФться 32 байта, тому кореневий каталог маСФ довжину (32_*_rootsize) байтiв.

Пiсля кореневого каталога на логiчному диску знаходиться область файлiв i пiдкаталогiв кореневого каталога. На малюнку зображенi всi областi логiчного диска. Таку структуру мають логiчнi диски, розташованi в роздiлах жорстких дискiв, а також дискети.

Областi логiчного диска Номер початкового сектора на логiчному диску

+----------------------+

: : 0

: BOOT-сектор i :

: зарезервованi :

: сектори :

: :

+------------------- :

: : ressecs - кiлькiсть резервних

: Перша копiя FAT : секторiв

:

+------------------- :

: : ressecs+fatsize

: Друга копiя FAT :

: :

+------------------- :

: : ressecs+(fatsize*fatcnt)

: Кореневий каталог :

: :

+------