> man operating_systems
WYOS - Выпуск №17
FAT, сектор и дескриптор
на Четверг, 01 Июль 2004, 14:41
добавил: commrade список авторов печатать элемент контента создать pdf-файл  элемент контента
категория Статьи > Write Your Own OS
комментарии: 0
просмотров: 777

Рассмотрение FAT поподробнее.

Напиши свою ОС! #17
Привет amigos and muchachos!
Вот и прошла неделя с момента выхода последнего номера рассылки. Тихо и незаметно подкрался новый год! С чем вас я и поздравляю. Этот выпуск будет коротким. Это сделано дабы не отрывать вас от приятных предновогодних хлопот. Сегодня я дам вам немного информации к размышлению, чтоб ы вы могли подумать на досуге, не напрягаясь.
Дескрипторы
Дескриптор файла - 32-байтовый элемент описывающий файлы и другие каталоги. Данный элемент находится в начале любого каталога. Он предназначен для того чтобы ОС смогла найти нужный нам файл на диске. Формат дескриптора файла приведен в таблице ниже, он аналогичен как для FAT12 так и для FAT32.

<table border='1' bgcolor='#FFFFB3'>
<caption align='right'><b>Дескриптор </b></caption>
<tr>
<td><b>Смещение </b></td>
<td><b></b></td>
<td><b></b></td>
</tr>
<tr>
<td>0</td>
<td>8</td>
<td>Имя файла или каталога, выровненное на левую границу и дополненное </td>
</tr>
<tr>
<td>8</td>
<td>3</td>
<td>Расширение имени файла, выровненное на левую границу и дополненное </td>
</tr>
<tr>
<td>11</td>
<td>1</td>
<td>Байт атрибутов </td>
</tr>
<tr>
<td>12</td>
<td>10</td>
<td></td>
</tr>
<tr>
<td>22</td>
<td>2</td>
<td>Время создания файла или время его последней </td>
</tr>
<tr>
<td>24</td>
<td>2</td>
<td>Дата создания файла или дата его последней </td>
</tr>
<tr>
<td>26</td>
<td>2</td>
<td>Номер первого кластера, распределенного</td>
</tr>
<tr>
<td>28</td>
<td>4</td>
<td>Размер файла в </td>
</tr>
</table>

В любом каталоге, кроме корневого, два первых дескриптора имеют специальное назначение. Первый дескриптор содержит в поле имени строку:
"."
Этот дескриптор указывает на содержащий его каталог. То есть каталог имеет ссылку сам на себя. Второй специальный дескриптор содержит в поле имени строку:
".."
Этот дескриптор указывает на каталог более высокого уровня. Если в поле номера первого занимаемого кластера для дескриптора с именем ".." находится нулевое значение, это означает, что данный каталог содержится в корневом каталоге. Таким образом, в древовидной структуре каталогов имеются ссылки как в прямом, так и в обратном направлении. Эти ссылки можно использовать для проверки сохранности структуры каталогов файловой системы.
Кластер
Операционная система ОС ЕС для ЭВМ ряда ЕС позволяла задать начальное количество цилиндров диска для размещения набора данных и размер области диска, которая может быть использована для этого набора дополнительно. Если при записи в файл все распределенное для файла место на диске окажется исчерпанным, программа завершится аварийно, даже если на диске еще есть свободные цилиндры. Операционная система MS-DOS использует дисковое пространство другим способом.

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

В FAT12, FAT16, FAT32 для хранения этой информации используется таблица размещения файлов. Весь диск разбивается операционной системой на участки одинакового размера, называемые кластерами (например в нашем случае размер кластера на дискетке равен 512 байт). Кластер может содержать несколько секторов. Для каждого кластера в таблице FAT есть своя индивидуальная ячейка, в которой хранится информация об использовании данного кластера. Другими словами, таблица размещения файлов - это массив, содержащий информацию о кластерах. Размер этого массива определяется общим количеством кластеров на логическом диске.

Логический номер сектора
Вы знаете, что для адресации сектора при помощи функций BIOS необходимо указывать номер дорожки, номер головки и номер сектора на дорожке. ОС MS-DOS, например, организует "сквозную" нумерацию секторов, при которой каждому сектору логического диска присваивается свой номер. Порядок нумерации выбран таким, что при последовательно увеличении номера сектора вначале увеличивается номер головки , затем номер дорожки. Это сделано для сокращения перемещений блока головок при обращении к последовательны логическим номерам секторов.

И так как я уже сказал, при увеличении относительного номера сектора вначале увеличивается номер сектора на дорожке, затем номер головки , и, наконец, номер дорожки. Для вычисления относительного номера сектора можно использовать следующую формулу:

<i style="color: green">RelSect = (Cyl * Sect * Head) + (Head * Sect) + (Sect -1)</i>
, причем в этой формуле:
Cyl - номер дорожки;
Sect - номер сектора на дорожке;
Head - номер головки.

Область данных
"Так где же находться данные, которые нам нужны?" - спросит меня читатель прочитав эту статью. Давайте попробуем вычислить где находиться эта область (при вычислении я пользуюсь данными, которые подчерпнул из учебника [1] см. список литературы).

Итак структура ФС дискетки, следующая:

<ol>
<li>Загрузочный сектор - BootSec</li>
<li>Файловая таблица - FAT1</li>
<li>Файловая таблица - FAT2</li>
<li>Область корневого каталога - RootSec</li>
<li>Область данных файлов и каталогов - DatSec</li>
</ol>

В нашем случае: загрузочный сектор занимает один сектор, т.е. 512 байт, файловая таблица занимет 9 секторов дискетки, т.е. 9*512=4608 байт (размер одного сектора равен 512 байт), две копии файловой таблицы займут 2*4608=9216 байт. Размер области корневого каталога ограничен, он указывает на то сколько 32-байтовых элементов может быть в него записано (т.е. сколько файлов или директори может находиться в корневом каталоге, он равен 19 секторам дискетки, т.е. 19*512=9728 байт.

Итак подведем итог: 512+2*4608+9278=19006 байт, т.е. с 19007 начинается область данных дискетки. Приведенный расчет сделан для дискетки формата 3,5", но точно такой же расчет можно сделать и для "" диска, там будет другой размер BootSec, FAT1, FAT2, RootSec.
Заключение
Вот собственно и все на сегодня my amigos.

Пользуясь случаем хочу ваc дорогие мои поздравить, с наступающим новым годом! Хочу пожелать вам в наступающем году всего самого наилучшего, чего и себе я желаю, удачи вам, здоровья, успехов.

Будьте счастливы! Всегда ваш commrade!

Список литературы, источников информации и другой интересной информации

<ol>
<li>MS-DOS для программиста © Александр Фролов, Григорий Фролов Том 19, часть 2, М.: Диалог-МИФИ, 1995</li>
<li>Программировани видеоадаптеров CGA, EGA и VGA © Александр Фролов, Григорий Фролов Том 3, М.: Диалог-МИФИ, 1992</li>
<li><a href="http://www.fasm.sourceforge.net">fasm.sourceforge.net</a> - простой ассемблер, работает од ДОС, Windows, Linux.
(кстати на этом сайте есть пример он называется phboot как раз про нашу тему).</li>
<li><a href="http://www.codenet.ru">codenet.ru</a> - много различной информации по программировани: от ассеблера до технологий .NET.</li>
<li><a href="http://www.vcl.ru">vcl.ru</a> - информация не только по Borland Builder, но и по ассемблеру, Watcom, GCC, .NET. Очень много различных
форумов по проблеме программировани.</li>
</ol>


Комментарии доступны только авторизованным пользователям, авторизуйтесь или зарегистрируйтесь на сайте здесь

© OSRC.info, 2004-2010.
Авторские права на любые материалы, авторы которых явно указаны, принадлежат их авторам. По вопросам публикации таких материалов обращайтесь к авторам.
Авторские права на любые другие материалы принадлежат OSRC.info.
Сайт является помещением библиотеки. Копирование, сохранение на жестком диске или иной способ сохранения произведений осуществляются пользователями на свой риск.
При использовании материалов сайта ссылка на OSRC.info обязательна.