Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО_экзамен.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
500.22 Кб
Скачать

9. Таблица расположения файлов fat

При использовании дисковых накопителей возникает проблема: как операционной системе определить, в каких кластерах размещается файл, в какой последовательности эти кластеры располагаются, а также какие кластеры на диске свободны? Для решения этой проблемы на диске организуется специальная табличная структура, называемая таблицей размещения файлов или FАТ (File Allocation Table).

Основной принцип организации FАТ заключается в создании таблицы, каждый элемент которой соответствует одному кластеру. В зависимости от формата диска FАТ состоит из 12-битовых или 16-битовых элементов. Более современной системой является FAT32.

В качестве примера рассмотрим возможные значения элементов FAT12:

• 000h — соответствующий такому элементу кластер свободен и ранее не использовался для хранения файлов;

• 0FF8h до 0FFFh — кластер, соответствующий этому элементу, является последним в файле, т. е. служит идентификатором конца цепочки кластеров ЕОС (Еnd of Chain);

• 0FF7h—свидетельствует о том, что соответствующий кластер дефектен;

• ХХХh — любые 16-ичные цифры, задающие номер следующего кластера в цепочке кластеров.

10. Структура корневого директория root

ROOT – корневой каталог – вершина иерархии дисковой системы. В отличие от всех остальных каталогов, он имеет фиксированный размер, то есть в нем нельзя располагать сколько угодно файлов или каталогов. Ко всем прочим каталогам это не относится, они могут содержать неограниченное число подэлементов.

Элемент оглавления представляет собой 32-байтную запись следующего формата:

Байты 0—7. Имя файла.

Байты 8—10. Расширение имени

Байт 11. Атрибут файла.

Байты 12—21. Обычно содержат нули. Зарезервированы

Байты 22—23. Время последнего доступа к файлу.

Байты 24—25. Дата последнего доступа к файлу.

Байты 26—27. Номер начального кластера.

Байты 28—31. Размер файла.

11. Структура директория

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

12. Алгоритм поиска расположения файлов на диске

13. Определение начального кластера расположения файла на диске

14. Расчет номеров цепочки кластеров расположения фала на диске

Для того, чтобы определить начальный номер кластера, необходимо считать из корневой директории ROOT или из любой другой 32-байтную запись с информацией о файле. В 26-27 байтах хранится необходимая информация, которая укажет нам номер первого занимаемого файлом кластера. Извлекаем эти 2 байта в переменную типа WORD

Рис. 3. Узнаём номер начального кластера

В памяти число представлено как 02 00, получается, что значение будет 0002. Это и есть номер кластера.

Далее переходим к таблице FAT, и по ней уже определяем всю цепочку кластеров.

Рис. 4. Дамп FAT демонстрирующий цепочку кластеров расположения файла.

Последовательность действий такова:

В нашем случае (12-бит) умножаем номер кластера на 1,5 (2*1,5=3). В случае дробного числа берём только целую часть.

Прочитаем слово по результирующему адресу, то есть смещению от начала FAT (0340, значение 4003). Если номер кластера четный, то берём младшие 12 бит, в случае если номер кластера нечётный берём старшие 12 бит. В нашем случае получаем (003)

Полученный результат даёт нам номер следующего кластера. Проделываем пункты 1-2 до тех пор, пока не получим значение FFF, говорящее о конце файла

В данном случае цепочка кластеров имеет вид: 003-004-005-006-FFF