Структури даних на диску

Під час форматування дискети або розділу жорсткого диска в системі FAT все дисковий простір розбивається на наступні області, показані на рис. 3-2.

 

Рис. 1‑11

 

 

· BOOT-сектор містить основні кількісні параметри дискового тому і файлової системи, а також може містити програму початкового завантаження ОС.

· Таблиця FAT (File Allocation Table) - містить інформацію про розміщення файлів і вільного місця на диску. Зважаючи критичної важливості цієї таблиці вона завжди зберігається в двох примірниках, які мають бути ідентичні [4]. Кожна операція, що змінює вміст FAT, повинна однаковим чином змінювати обидва примірники.

· ROOT - кореневий каталог системи, що містить дані про файли та про підкаталогах верхнього рівня, кожен з яких у свою чергу може містити файли і підкаталоги.

· Область даних - масив кластерів, що містить всі файли і всі каталоги (крім кореневого).

Розглянемо докладно, як зберігається вся інформація про файл, наявна в системі FAT.

При створенні файлу в одному з каталогів файлової системи створюється запис, що зберігає основний обсяг інформації про цей файл. Кожен каталог, крім кореневого, також є файлом особливого виду, і запис про нього міститься в батьківському каталозі. Каталожна запис завжди займає 32 байти, її структура показана в табл. 3.1.

 

Структура записи каталога файловой системы FAT

 

Поле записи Размер поля (в байтах)
Имя файла
Расширение имени (тип файла)
Атрибуты (флаги)
Размер файла (в байтах)
Дата последнего изменения
Время последнего изменения
Резерв (не используется)
Номер первого кластера файла

 

 

Як видно з таблиці, ім'я файлу може займати не більше 8 символів плюс ще 3 символи розширення. На початку 80-х років здавалося, що цього цілком достатньо. Пізніше це обмеження охрестили «прокляттям 8 + 3», і позбавити від нього файлову систему FAT вдалося тільки в Windows 95.

Байт атрибутів містить набір бітів, що характеризують властивості файлу. Поряд з практично марними атрибутами «прихований», «системний» і «архівний», там містяться і важливі: «тільки для читання», «каталог» і «мітка тому». Атрибут «тільки для читання» забороняє системі видаляти файл або відкривати його для запису. Атрибут «каталог» означає, що даний запис описує не звичайний файл, а каталог. Атрибут «мітка тому» може міститися тільки в кореневому каталозі, такий запис не описує жодної файл, а замість цього містить у полях імені і розширення 11-символьну мітку (ім'я), присвоєну даному дисковому того.

В цілому, запис каталогу містить майже все, що системі відомо про файл, а якщо розмір файла не перевищує одного кластера, то повністю все. Якщо ж файл містить більше одного кластера, то номери інших можна знайти в таблиці FAT.

Таблиця FAT складається з записів, кількість яких дорівнює кількості кластерів в області даних, а розмір одного запису може бути рівний 12, 16 або 32 бітам. Відповідно говорять про різновиди файлової системи FAT-12, FAT-16 або FAT-32. Розмір запису повинен бути таким, щоб у ній можна було записати максимальний номер кластера. Наприклад, для стандартної тридюймової дискети ємністю 1.44 Мб достатньо використовувати FAT-12, оскільки це дозволяє мати 212 = 4096 кластерів (насправді, трохи менше), і навіть при кластерах розміром в 1 сектор (512 байт) цього більш ніж достатньо: 4096 '512 = 2 Мб.

Записи FAT «з історичних причин» нумеруються, починаючи з 2 і кінчаючи максимальним номером кластера, кожен запис FAT описує відповідний кластер з тим же номером. Запис може приймати наступні значення:

· Якщо кластер належить деякому файлу (або каталогу) і є останнім (або єдиним) в цьому файлі, то запис FAT містить спеціальне значення - все одиниці (FFF16 для FAT-12 або FFFF16 для FAT-16);

· Якщо кластер належить деякому файлу (або каталогу), але не є останнім у файлі, то запис FAT містить номер наступного кластера того ж файлу;

· Якщо кластер вільний, то запис містить всі нулі;

· Якщо кластер дефектний (тобто при перевірці диска з'ясувалося, що даний кластер містить хоча б один дефектний сектор), то запис містить спеціальне значення FF716 для FAT-12 або FFF716 для FAT-16.

Тепер ми знаємо, яким чином в системі FAT зберігається інформація про розміщення сегментованого файлу. Номер першого кластера файлу зберігається в записі каталогу, а інші кластери можна послідовно визначити за записами таблиці FAT.

У кожному каталозі, крім кореневого, перші два записи містять спеціальні імена: ім'я «.» Означає сам даний каталог, ім'я «..» - батьківський каталог.

3.6.3. Створення та видалення файлу

Щоб завершити вивчення структур даних системи FAT, розглянемо, як змінюються ці структури при операціях створення і видалення файлу.

Коли ОС виконує функцію створення файлу з заданим ім'ям в заданому каталозі, то вона, перш за все, знаходить даний каталог в дереві каталогів файлової системи. (Як вона його знаходить - опустимо для стислості. Спробуйте розібратися самі.) Прочитавши каталог, система перевіряє, чи немає в ньому вже записи з заданим ім'ям (тобто чи немає вже такого файлу). Якщо є, то чи не встановлений у цього файлу атрибут «тільки для читання»? Якщо встановлено, то новий файл створений бути не може, попередньо треба зняти атрибут. Якщо не встановлено, то старий файл видаляється. Потім система знаходить у каталозі вільну запис. Якщо в каталозі немає вільного місця, то він може бути збільшений ще на один кластер, цей факт відображається в таблиці FAT. Нарешті, знайшовши вільне місце, система заповнює поля запису про новий файл: його ім'я та розширення, дату і час останньої зміни, атрибути. Розмір і номер першого кластера встановлюються нульовими, тому файл поки що не містить даних.

Надалі, при виконанні першої операції запису у файл, система знайде будь-який вільний кластер по таблиці FAT, відзначить його в FAT як останній кластер файлу, заповнить номер першого кластера в каталожної записи, вносить запис і занесе кількість записаних байт в поле розміру файлу в каталозі .

При видаленні файлу насамперед за каталожною запису перевіряється, чи можна його видалити (чи не встановлений атрибут «тільки для читання»), а потім робляться дві речі:

· Перший байт імені файлу, що видаляється замінюється на спеціальний символ з кодом E516 (він відображається як російська буква «х»; ймовірно, розробники системи FAT вважали, що цей код не може зустрітися в імені файлу);

· Всі записи таблиці FAT, відповідні кластерам видаляється файлу, заповнюються нулями, тобто

кластери оголошуються вільними.

Як видно з описаної процедури, в момент видалення файлу його дані не стираються з диска, проте інформація про розміщення файлу псується. Якщо розмір файлу перевищував один кластер, то

немає гарантії, що його вдасться відновити в разі ненавмисного видалення, навіть якщо користувач схаменеться відразу ж.