Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы и ответы по ОС.doc
Скачиваний:
37
Добавлен:
27.08.2019
Размер:
3.35 Mб
Скачать

42 Вопрос. Реализация простой фс (предлагаю на примере minix file system).

Ф айловая система MINIX 3 представляет собой самостоятельную логическую сущность с индексными узлами, каталогами и блоками данных. Она может храниться на любом блочном устройстве, например на дискете или жестком диске (или разделе жесткого диска). В любом случае, файловая система имеет одну и ту же структуру. Рисунок 5.29 иллюстрирует эту структуру на примере дискеты или небольшого жесткого диска с блоком размером 1 Кбайт и индексными узлами в количестве 64. В этом простом случае битовая карта зон занимает 1 Кбайт. Она позволяет отслеживать не более 8192 8-килобайтных зон (блоков), а, следовательно, размер файловой системы составляет не более 8 Мбайт. Даже для гибкого диска 64 индексных узла делают число файлов весьма ограниченным, поэтому под индексные узлы обычно отводят не 4 блока, как на рисунке, а больше.

На практике 8 блоков было бы лучше, однако в этом случае наша диаграмма утратила бы наглядность. Разумеется, для современного жесткого диска и индексные узлы, и битовые карты зон занимают значительно больше, чем один блок.

Относительный размер различных компонентов (рис. 5.29) варьируется от одной файловой системы к другой и зависит от ее размера, максимального числа файлов и других параметров. Тем не менее наличие всех компонентов и их порядок всегда неизменны.

Любая файловая система начинается с загрузочного блока. Этот блок содержит исполняемый код. Размер загрузочного блока всегда составляет 1024 байта (два сектора диска), хотя в других случаях в MINIX 3 могут использоваться блоки большего размера (что и имеет место по умолчанию). При включении компьютера его аппаратное обеспечение считывает содержимое загрузочного блока в память и исполняет его. Код в загрузочном блоке инициирует процесс загрузки самой операционной системы. После того как система загружена, загрузочный блок больше не используется. Для загрузки системы подходит не каждый дисковый накопитель, но ради единообразия структуры на каждом блочном устройстве резервируется загрузочный блок. Худшее, к чему может привести такая стратегия, — это потеря одного блока. Чтобы аппаратное обеспечение не пыталось загрузиться с устройства, не предназначенного для загрузки, в известное заранее место загрузочного блока записывается сигнатура {«магическое» число) в том и только том случае, если блок содержит исполняемый код. Аппаратура (а в действительности, код BIOS) откажется загружаться с устройства, если загрузочный блок не имеет такой сигнатуры. Таким образом, случайный «мусор» в качестве программы не запустится. Суперблок содержит информацию, описывающую структуру файловой системы. Его размер, как и размер загрузочного б лока, составляет 1024 байта независимо от размера блоков, используемых в остальной части файловой системы. Структура суперблока оказана на рис. 5.30.

Основное назначение суперблока — сообщить файловой системе, насколько велики отдельные ее части. Зная размер блока и число индексных узлов, несложно подсчитать размер битовой карты индексных узлов и количество блоков индексных узлов. Например, если блок имеет размер 1 Кбайт, каждый блок битовой карты будет содержать 1 Кбайт (8 Кбит), то есть может быть использован для отслеживания состояния 8192 индексных узлов. (Строго говоря, первый блок битовой карты описывает только 8191 индексный узел, так как 0-го индексного узла нет, но бит в битовой карте для него все равно выделяется.) Если всего имеется 10 000 индексных узлов, то потребуется два блока для хранения битовой карты. Так как каждый индексный узел занимает 64 байта, блок размером 1 Кбайт может содержать до 16 индексных узлов. При наличии 64 используемых индексных узлов для их хранения потребуется 4 дисковых блока. Битовая карта зон содержит только зоны, занимаемые данными (то есть в нее не попадают блоки, хранящие битовые карты и индексные узлы), причем первая зона данных соответствует биту 1 в битовой карте. Как и в случае с картой индексных узлов, нулевой бит не используется, а значит, первый блок битовой карты описывает 8191 зон, а последующие — 8192 каждый. Если вы посмотрите на битовые карты только что отформатированного диска, вы увидите, что в обеих битовых картах (зон и индексных узлов) установлено два бита. Первый из них соответствует несуществующей 0-й зоне или индексному узлу. Второй соответствует индексному узлу и зоне корневого каталога устройства, которая создается при создании файловой системы. Информация, хранящаяся в суперблоке, избыточна, так как иногда она требуется в одной форме, а иногда в другой. Так как на размещение суперблока отводится 1 Кбайт места, имеет смысл хранить информацию во всех необходимых представлениях, а не преобразовывать ее в ходе работы. Например, номер первой зоны данных на диске можно вычислить, исходя из размера блока, размера зоны, числа индексных узлов и числа зон, но удобнее просто хранить это значение в суперблоке. Оставшаяся часть суперблока все равно не используется, потому выделение в нем одного лишнего слова ничего не стоит.