Реферат: Файлова система FAT
ff8h - fffhfff8h - ffffh – останній кластер у списку,
002h - fefh0002h - ffefh – номер такого кластера в списку.
Безпосередній доступ до FAT може знадобитися для:
організації сканування каталогів для пошуку потрібних файлів;
для читання каталогів як файлів;
для організації захисту інформації від несанкціонованого копіювання.
Загальна схема використання FAT така:
•Читаємо FAT у пам'ять.Як уже зазначалося FAT розташовується відразу після BOOT-сектора (логічний сектор із номером 1). Для точного визначення початкового сектора FAT потрібно прочитати у пам'ять BOOT-сектор і проаналізувати вміст блока параметрів BIOS. У поле ressecs записана кількість зарезервованих секторів, що розташовуються перед FAT. Поле fatsize містить розмір FAT у секторах. Крім того, варто враховувати, що на диску може знаходитися декілька копій FAT. Операційна система використовує тільки першу копію, інші потрібні для утіліт відновлення вмісту диска. Кількість копій FAT знаходиться в полі fatcnt BOOT-сектора.
•Потім необхідно визначити номер першого кластера файла, для якого необхідно визначити його розташування на диску.
•Використовуємо номер першого кластера як індекс у FAT для отримання номера такого кластера.
Повторюємо цю процедуру доти, поки отримане з FAT значення не буде відповідати кінцю файла.
Процедура витягу номера кластера з FAT залежить від формату таблиці розміщення файлів.
16-бітову FAT можна уявити як масив 16-бітових чисел. Для визначення номера такого кластера треба просто отримати 16-бітове значення з FAT, використавши в якості індексу номер попереднього кластера.
Для 12-бітової FAT процедура значно складніша.
Необхідно виконати такі дії:
•Помножити номер початкового кластера на 3.
•Розділити результат на 2 (тому що кожний елемент таблиці має довжину 1.5 байта).
•Прочитати 16-бітове слово з FAT, використовуючи в якості зсуву значення, отримане після ділення на 2.
•Якщо номер початкового кластера парний, на вибране з FAT слово треба накласти маску 0fffh, залишивши молодші 12 бітів. Якщо номер початкового кластера не парний, вибране з FAT значення необхідно зсунути вправо на 4 біта, залишивши старші 12 біт.
•Отриманий результат – номер такого кластера в ланцюгу, значення 0fffh відповідає кінцю ланцюга кластерів.
Файлова система {DOS} має деревоподібну структуру. У кореневому каталозі розташовуються 32-байтові елементи, що містять інформацію про файли й інші каталоги. Для читання кореневого каталога необхідно визначити його розташування і розмір.
Кореневий каталог знаходиться відразу за останньою копією FAT. Кількість секторів, що займаються однією копією FAT, знаходиться в блоці параметрів BIOS у BOOT-секторі в полі fatsize, кількість копій FAT - у полі fatcnt блока BPB. Отже, перед кореневим каталогом знаходиться один BOOT-сектор і (fatcnt_*_fatsize) секторів таблиці розміщення файлів FAT.
Розмір кореневого каталога можна визначити виходячи із значення поля rootsize. У цьому полі при форматуванні диска записується максимальна кількість файлів і каталогів, що можуть знаходитися в кореневому каталозі. Для кожного елемента в каталозі виділяється 32 байта, тому кореневий каталог має довжину (32_*_rootsize) байтів.
Після кореневого каталога на логічному диску знаходиться область файлів і підкаталогів кореневого каталога. На малюнку зображені всі області логічного диска. Таку структуру мають логічні диски, розташовані в розділах жорстких дисків, а також дискети.
Області логічного диска Номер початкового сектора на логічному диску
+----------------------+
: : 0
: BOOT-сектор і :
: зарезервовані :