Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 6004.doc
Скачиваний:
21
Добавлен:
30.04.2022
Размер:
1.29 Mб
Скачать

4.3.1.Файловая система fat

Итак, файл - это именованная совокупность данных на внешнем устройстве и управление множеством файлов осуществляется с помощью файловой системы. С одной стороны, файловая система понимается как совокупность файлов и управляющей информации на диске для доступа к файлу. С другой - файловой системой называют совокупность программных средств ОС для доступа к файлу. По существу, эти определения отражают разные аспекты проблемы управления данными в операционной системе. Различают:

- регулярные файлы, которые состоят из блоков (кластеров);

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

Логическая организация файла может быть представлена в виде непрерывной ленты байтов, имеющей начало и конец. В файле определен указатель записи-чтения, показывающий на текущую позицию, к которой осуществляется доступ. При достижении указателем последнего байта может быть зафиксирована ситуация - конец файла (End Of File - EOF). В современных операционных системах принята работа с файлами в цикле "открытие-доступ-закрытие". Для программ, написанных на языках высокого уровня, при запуске автоматически открываются файлы:

стандартного ввода (stdin);

стандартного вывода (stdout);

стандартного вывода ошибок (stderr);

стандартного дополнительного устройства (stdaux);

стандартного устройства печати (stdprn).

По завершении работы программы все открытые файлы принудительно закрываются.

Файлы на дисковых носителях физически организованы в блоки - кластеры. Кластер - это группа подряд расположенных секторов. Число секторов в кластере зависит от формата диска. Каждый кластер имеет свой уникальный номер. Файл представляет собой цепочку кластеров, хаотическим образом размещенных в дисковом пространстве. Для поиска файла на диске, выделения и освобождения кластера, отслеживания свободного пространства на диске используют таблицу размещения файлов (File Allocation Table - FAT).

FAT обычно начинается с логического сектора 1 в разделе DOS (читать по INT 25Н c DX = 1). В общем случае сначала надо прочитать корневой сектор (DX = 0).

Таблица состоит из 12- или 16-битовых элементов (в зависимости от емкости диска). Каждому кластеру соответствует один элемент FAT. Значение элемента:

(0)000 кластер свободен;

(F)FF8-(F)FFF последний кластер в файле

(EOC-end of cНain);

(F)FF7 дефектный кластер;

(X)XXX номер следующего кластера в цепочке кластеров файла.

При создании файла или дозаписи всегда выделяется целый кластер. Номер первого кластера заносится в элемент директория (26-27 байты). Остальные отыскиваются по цепочке:

Первые два элемента FAT используют как индикаторы формата диска. Начальный байт содержит дескриптор носителя : FF..F9 - дискеты, F8 - жесткий диск. Остальные байты заполняются значением FFН. Первым кластером области данных является кластер 2.

12-битный FAT позволяет пронумеровать 4096 кластеров. Для больших дисков это приводит к увеличению размера кластера (128 МБ диск - 32К, 128..256 МБ - 64К). Статистическими исследованиями установлено, что средний размер файла не превышает 1К. Следовательно, коэффициент полезного использования диска равен 1/32 (около 4 %). Для 16-битного кластера число кластеров равно 64К, размер кластера для диска - 256 МБ составляет 4К, т.е. коэффициент равен 25 %. 12-битные FAT применяются для гибких дисков и разделов жестких дисков до 10 МБ.

Чтобы пересчитать номер кластера в абсолютный сектор, можно использовать функцию MSDOS (INT 21Н, AН = 32Н) или прочитать Boot Sector и применить формулы:

wRootSects = (wRootEntries * 32) / wSectSize;

wFirstData = wResSects + (wFatSects * bFatCnt) + wRootSects;

lAbsSector = wFirstData + ((lAnyClusterNo - 2) * bClustects);

Файловая система, основанная на FAT, имеет иерархическую древовидную структуру. В узлах дерева расположены директории. Самый первый называют корневым (root). Директорий - это файл на диске, состоящий из элементов директория длиной 32 байта.

Рис. 21. Структура элемента директория

Имя файла может содержать до восьми букв, цифр и ряда специальных символов. Символы имени хранятся в кодах верхнего регистра (заглавными буквами). В директориях (кроме root) есть два специальных имени: ".." и ".", которые генерируются при создании директория. ".." - имя директория-предка, "." - имя данного директория, т.е. поле "номер первого кластера" содержит номер кластера данного файла-директория.

При уничтожении файла в байт 0 записывают символ "?"(E5Н). Для подстраховки кластеры такого файла не используются, пока это возможно.

Расширение имени служит для уточнения свойств данных, хранящихся в файле. По расширению системные и прикладные программы находят "родные" файлы, т.е. с известной им структурой записи и служебной информацией. Расширение имени может содержать до трех символов.

Рис. 22. Атрибуты файла

Установленные в единицу биты атрибутов имеют следующий смысл:

0 (read only) - только чтение (запись в файл запрещена);

1 (Нidden) - скрытый файл;

2 (system) - системный файл;

3 - метка тома. Байты 0-10 содержат саму метку, остальные поля игнорируются. Метка тома может содержаться только в Root;

4 - директорий;

5 - архивный бит. Устанавливается в 1 при создании файла и записи в него. Сброс в 0 осуществляют программы-архиваторы. При необходимости восстановления проверяется значение бита и, если он равен нулю, то восстановление не требуется, т.к. файл не изменялся. Старшие биты байта атрибутов в системе MS DOS не используются.

Время создания файла:

Дата создания файла:

Значение поля "Год", равное нулю, соответствует 1980 году.

Номер первого кластера файла: порядковый номер элемента в таблице размещения файлов (FAT).

Размер файла. Максимальный размер файла ограничен значением 4 Гбайта - 1 байт.

Для повышения степени рационального заполнения дискового пространства рекомендуется, во-первых, не использовать короткие файлы. Надо стремиться по возможности формировать файлы с длиной, кратной размеру кластера. Во-вторых, не использовать слишком ветвистую и глубокую иерархию директориев. На директорий, как и на любой другой файл, резервируется как минимум один кластер (например, 4К). Учитывая размер элемента директория, получим максимальное число файлов в директории:

4К / 32 = 512 .

Такое количество файлов в директории встречается крайне редко. Впрочем, данная рекомендация серьезно ослабляется требованием структурирования и группировки данных.