Главная страница Межпроцессное взаимодействие (состязание) Файловая система имеет ту же основную структуру, что и менеджер памяти или задачи ввода/вывода. В ней есть главный цикл, ожидающий сообщений. Когда сообщение принято, определяется его тип, который затем используется как индекс в таблице указателей на функции, обрабатывающие различные системные вызовы. Затем найденная процедура вызывается, она выполняет свои действия и возвращает код завершения. Далее файловая система отправляет ответное сообщение процессу, сделавшему вызов, и возвращается в начало цикла ожидать следующее сообщение. 5.6.2. Структура файловой системы Файловая система MINIX представляет собой самостоятельную логическую сущность с г-узлами, каталогами и блоками данных. Она может храниться на любом блочном устройстве, например на дискете или жестком диске (или разделе жесткого диска). В любом случае, файловая система имеет одну и ту же структуру. Рисунок 5.24 иллюстрирует эту структуру на примере дискеты объемом 360 Кбайт с размером блока 1 Кбайт и 128 г-узлами. У файловой системы большего объема или с другим числом г-узлов или с иным размером блока будут те же самые шесть частей, только, возможно, их относительные размеры будут другими. Загрузочный Супеблок блок -узлы Один блок диска Данные Битовая карта 1-узлов Битовая карта зон Рис. 5.24. Структура диска в простейшем случае: дискета 360 Кбайт, 128 1-узлов, размер блока 1 Кбайт (то есть два подряд идущих сектора по 512 байт рассматриваются как один блок) Любая файловая система начинается с загрузочного блока. Этот блок содержит исполняемый код. При включении компьютера его аппаратное обеспечение считывает содержимое этого блока в память и исполняет его. Код в загрузочном блоке инициирует процесс загрузки самой операционной системы. После того как система загружена, загрузочный блок больше не используется. Для загрузки системы подходит не каждый дисковый накопитель, но ради единообразия структуры на каждом блочном устройстве резервируется загрузочный блок. Худшее, к чему может привести такая стратегия, - это потеря одного блока. Чтобы помешать аппаратному обеспечению пытаться загрузиться с устройства, не предназначенного для загрузки, в известное заранее место загрузочного блока записывается сигнатура ( магическое число ) в том и только том случае, если блок содержит исполняемый код. Аппаратура (а в действительности, код BIOS) отка- жется загружаться с устройства, если загрузочный блок не имеет такой сигнатуры. Таким образом, случайный мусор не будет запущен как программа. Суперблок содержит информацию, описывающую структуру (Ьайловой системы. Его строение показано на рис. 5.25. Присутствуют и на диске, и в памяти Есть в памяти, но отсутствуют на диске - Максимальный размер файла - Количество зон (V2) Число узлов Число зон {VI) Число блоков битовой карты зон Первая зона данных Logj (блоков/зон) Сигнатура Заполнение Указатель на корневой i-узел монтированной файловой системы Указатель на i-узел, в который смонтирована система 1-узлов/блок l-iOMep устройства Флаг только чтение Флаг направления битов в ФС Версия ФС Прямые зоны/1-узлы Косвенные зоныЛ-узлы Первый свободный бит в битовой карте i-узлов Первый свободный бит в битовой карте зон Рис. 5.25. Строение суперблока MiNIX Его основное назначение - сообщить файловой системе, насколько ьелшл отдельные ее части. Зная размер блока и число г-узлов, несложно подсчитат! размер битовой карты г-узлов и количество блоков г-узлов. Например, если бло1 имеет размер 1 Кбайт, каждый блок битовой карты будет содержать 1 Кбай-(8 Кбит), то есть будет использован для отслеживания состояния 8192 г-узлог (Строго говоря, первый блок битовой карты описывает только 8191 г-узел, rai как 0-го г-узла нет, но бит в битовой карте для него все равно выделяется.) Есл\ всего имеется 10 ООО г-узлов, то потребуется два блока для хранения битовое карты. Так как каждый г-узел занимает 64 байта, блок размером 1 Кбайт может содержать до 16 г-узлов. При наличии 128 используемых г-узлов для их хранения потребуется 8 дисковых блоков. Позже мы подробно объясним различие между дисковыми блоками и зонами, сейчас же достаточно сказать, что место на диске может выделяться частями (зонами) из 1, 2, 4, 8 или, в общем случае, 2 блоков. Битовая карта зон отслеживает свободное пространство в зонах, а не в блоках. Для стандартных гибких дисков, используемых MINIX, размер зоны совпадает с размером блока (1 Кбайт), поэтому для таких устройств в первом приближении можно считать, что зона - это то же самое, что и блок. Пока мы позже в этой главе не приступим к обсуждению деталей выделения места, вы можете считать, что эти понятия эквивалентны. Обратите внимание, что количество блоков в зоне не хранится в суперблоке, так как оно нигде не востребуется. Все, что нужно, - это логарифм по основанию два от этого числа, который используется как значение сдвига при преобразовании блоков в зоны, и наоборот. Например, если зона содержит 8 блоков, log28 = 3. То есть, чтобы найти зону, содержащую блок 128, нужно сдвинуть 128 на три бита вправо (получится зона 16). Битовая карта зон содержит только зоны, занимаемые данными (то есть блоки, хранящие битовые карты и г-узлы, в нее не попадают), причем первая зона данных соответствует биту 1 в битовой карте. Как и в случае с картой г-узлов, нулевой бит не используется, а, значит, первый блок битовой карты описывает 8191 зон, а последующие - 8192 каждый. Если вы посмотрите на битовые карты только что отформатированного диска, вы увидите, что в обеих битовых картах, зон и г-узлов, установлено два бита. Первый из них соответствует несуществующей 0-й зоне или г-узлу. Второй соответствует г-узлу и зоне корневого каталога устройства, которая создается при создании файловой системы. Информация, хранящаяся в суперблоке, избыточна, так как иногда она требуется в одной форме, а иногда в другой. Так как на размещение суперблока отводится 1 Кбайт места, имеет смысл хранить информацию во всех необходимых представлениях и не пересчитывать ее при работе. Например, номер первой зоны данных на диске можно вычислить, исходя из размера блока, размера зоны, числа г-узлов и числа зон, но быстрее просто хранить это значение в суперблоке. Оставшаяся часть суперблока все равно не используется, потому выделение в нем одного лишнего слова ничего не стоит. Когда загружается ОС MINIX, суперблок с корневого устройства считывается в таблицу в памяти. Аналогичным образом, при монтировании других файловых систем их суперблоки также помещаются в память. В этой таблице есть несколько полей, которых нет на диске. Среди них флаг, индицирующий, что разрешено только чтение, флаг, позволяющий установить нестандартный порядок байтов, а также поля, предназначенные для ускорения доступа. Они указывают положение в битовых картах, ниже которого все биты установлены (то есть заняты). Кроме того, здесь есть поле, описывающее устройство, с которого пришел данный суперблок. Прежде чем файловая система MINIX сможет использовать диск, он должен быть приведен в соответствие структуре, показанной на рис. 5.24. Для построе-
|
© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |