Ю. Вахалия - UNIX изнутри (2003) (1114670), страница 91
Текст из файла (страница 91)
После области загрузки ва диске располагается суперблок, содержащий атрибуты и метаданные файловой системы. Далее размещается список индексных дескрипторов, являющийся одномерным массивом индексных дескрипторов. Такой дескриптор имеется у каждого файла. Более подробно об индексных дескрипторах читайте в разделе 9.22. Каждый дескриптор идентифицируется при помощи номера, эквивалентного 9.2. Файловая система Вуе1егл 'ч' 1з51в) 387 индексу в списке дескрипторов. Размер дескриптора составляет 64 байт. В одном дисковом блоке могут быть размещены несколько дескрипторов.
Начальные смешения для суперблока и списка индексных дескрипторов одинаковы во всех разделах системы. Следовательно, номер дескриптора может быть легко преобразован в номер блока и смещение от начала этого блока. Список индексных дескрипторов имеет фиксированный размер (устанавссиваемьсй при создании файссовой сиспсвмьс на разделе), которьсй ограссичивает максимально допустимое число файлов в этом разделе.
После таблицы дескрипторов на диске следует область данных. В ней расположены блоки данных для хранения файлов и каталогов, а также блоки косвенной адресации, содержащие указатели на блоки данных файлов, которые будут описаны в разделе 9.2.2. 9.2.1. Каталоги Каталог в системе з51з представляет собой специальный файл, содержащий список файлов и подкаталогов.
В нем находятся записи фиксированного размера (по 16 байт). В первых двух байтах размещается номер индексного дескриптора, следующие 14 отведены для имени файла. Размер одной записи ограничивает общее количество файлов на разделе диска до 65 535 (так как 0 ве момсет являться номером индексного дескриптора) и имя файла 14 символами. Если имя файла меньше 14 символов, то оно должно быть завершено символом М11ЕЕ Так как каталог тоже является файлом, он имеет и собственный индексный дескриптор с полем, идентифицирующим его как каталог. Первыми двумя элементами каталога являются «. » (собственно этот каталог) и «..» (родительский каталог).
Если номер индексного дескриптора равен нулю, это означает, что файл, на который оп указывает, больше не существует. Корневой каталог раздела, а также элемент «..» всегда имеет номер дескриптора, равный 2. При помощи этого значения файловая система может идентифицировать корневой каталог. Пример каталога в з5Ь показан на рис. 9.2.
Рис. 9.2. Файловая система еоге. Структура каталога 9.2.2. Индексные дескрипторы Каждый файл обладает собственным индексным дескриптором (1поде), ассоциированным с ним. Индексньсй дескриптор содержит служебную информацию, или метаданные файла. Он хранится на диске вместе со списком индексных дескрипторов.
Если файл открыт или каталог является текущим, ядро 388 Глава 9. Реализации файловых систем сохраняет данные о них из дисковой копии дескриптора в структуре данных, размещенной в памяти, также называемой индексным дескриптором. Эта структура имеет некоторые дополнительные поля, не повторенные на диске. Несмотря на определенную неоднозначность, мы используем термин дескриптор на диске (оп-6!з)г тоде) для указания на структуру данных, размещенных на диске (6)побе), а термин дескриптор в памяти ()и-соте )побе)— для обозначения структуры, размещаемой в оперативной памяти ()побе). Поля структуры 61побе представлены в табл.
9.1. Таблица 9.1. Поля структуры Йпобе Поле Размер в байтах Описание Й глебе 2 Й п))пЬ 2 39 Й а1нпе 4 Й гпт!гле 4 Й с!нпе 4 Время последнего доступа Время последней модификации Поле 6! шобе подразделяется на несколько битовых полей (рис. 9.3). Первые четыре бита определяют тип файла, который может иметь значения: 1ЕВЕВ (обычный файл), 1Е01К (каталог), 1ЕВьК (блочное устройство), 1ЕСНВ (символьное устройство) и т. д. Последние девять битов определяют права на чтение, запись и выполнение для владельца, членов группы владельца и остальных пользователей соответственно. вшб вя)б влеку Впвделец Группа Другие Рис. 9.3.
Структура поля Й тобе Поле 61 а66г требует дополнительных разьяснений. Файлы в системе ()Х1Х расположены на диске не непрерывно. При увеличении размера файла ядро запрашивает для него новые блоки, которые могут находиться в любом удобном месте диска. Такой подход даст возможность легко увеличивать или уменьшать размеры файла без фрагментации диска, наследуемой от последовательных схем размещения.
Однако это не защищает полностью от пробле- Й шб 61 Я)б Й Ыве Й абф Й вел Тип файла, привилегии и т. д. Количество жестких ссылок на файл Идентификатор пользователя-владельца Идентификатор группы пользователя-владельца Размер файла в байтах Массив адресов блоков Генерируемый номер (инкрементируегся каждый раз при запросе индексного дескриптора для нового файла) Время последнего изменения индексного дескриптора (кроме изменений полей Й абие и Й гп!нпе) 9.2.
Файловая система Яув1егп Ч (а51з) 389 мы фрагментации, так как последний блок каждого файла может содержать неиспользованное пространство. В среднем на каждый файл теряется около половины блока дискового пространства. Описанная методика размещения требует поддержки файловой системой карты расположения на диске каждого блока файла.
Такой список организован в виде массива физических адресов блоков. Логический номер блока вместе с файлом являются индексом к этому массиву. Большинство файлов, однако, являются не очень большими 1211, поэтому поддержка объемного массива приведет лишь к ненужной трате дискового пространства. Более того, хранение массива адресов блоков диска в отдельном блоке потребует дополнительной операции чтения при осуществлении доступа к файлу, что отрицательно повлияет на производительность системы. Решение, представленное в ОС П)х1Х, предлагает хранить небольшой список блоков прямо в индексном дескрипторе и использовать дополнительные блоки для файлов больших размеров.
Этот метод весьма эффективен для маленьких файлов. но недостаточно гибок для больших файлов. Схема размещения представлена па рис. 9.4. Иоле г(1 аг(й, занимаюгцее 39 байт, содержит 13-элементный массив, каждый элемент которого хранит в себе 3-байтовый номер физического блока. Элементы от 0 до 9 содержат номер 0-9 блоков данных файла. Таким образом, для файла, умещающегося в 10 и менее блоков, вся адресная информация хранится в индексном дескрипторе. Элемент 10 представляет собой номер блока косвенной адресации с содержимым в виде массива номеров блоков.
Элемент 11 указывает ца блок двойной косвенной связи, содержащий номера других «косвенных» блоков. И последний, 12-й элемент, указывает на «трижды косвенньш» блок с номерами «дважды косвенных» блоков. В этой схеме при размере блока в 1024 байт первые 10 блоков можно адресовать непосредственно, еще 256 блоков через один блок косвенной связи, еще 65 536 (256х256) блоков через двойной косвенный блок и еще 16 777 216 (256х256х256) блоков — через блок тройной косвенной адресации.
Файлы П(х(1Х могут содержать пуспгогпьг. Пользователь может создать файл, перейтн к большой величине смещения (установить указатель смещения в объекте открытого файла при помощи (зееК см. раздел 8.2.4) и произвести туда запись. Пространство перед этим смещением не содержит каких- либо данных, то есть является «дыркой» в файле. Если процесс попытается прочесть данные из такой области, то увидит байты со значением 1«о~В Пустоты иногда бывают такой величины, что перекрывают сразу же несколько блоков.
Предоставлять дисковое пространство таким блокам неразумно. Вместо этого ядро устанавливает соответствующие элементы массива 41 аоот, либо блока косвенной адресации в ноль. Если пользователь попытается прочесть такой блок, ядро вернет его, заполненный нулями. Дисковое пространство будет занято только в том случае, если будет совершена попытка записи в такой блок. 390 Глава 9. Реализации Файловых систем Массив блоков 1поее Диск 10 12 Рис. 9.4.
Файловая система з51з. массив адресов блоков в индексном дескрипторе Отказ от размешения пустот в дисковом пространстве имеет некоторые важные последствия. Процесс может неожиданно оказаться перед фактом отсутствия места на диске при попытке записи в пустоты. Если произвести копирование файла с пустотами, новый зкзем1ияр будет иметь страницы на диске, заполненные нулями.
Это происходит из-за того, что операция копирования требует чтения содержимого файла и записи его в файл назначения. При чтении пустоты ядро создает страницы, заполненные нулями, которые и копируются без дальнейшей интерпретации. Такое свойство может стать причиной проблем при использовании утилит резервного копирования и упаковщиков типа гаг или срю, работающих на уровие файлов, а нв непосредственно с дисками. Системный администратор может при резервном копировании системы столкнуться с тем, что на другом диске, равном по объему, не хватит места для ее копии. 9.2.3.
Суперблок Суперблок содержит метаданные применительно к файловой системе. В каждой файловой системе имеется один суперблок, располагаюшийся в начале диска. Ядро читает данные из суперблока при монтировании файловой системы и хранит их в памяти до тех пор, пока система не будет размонтирована. Суперблок содержит следуюшую информацию: + размер файловой системы в блоках; + размер списка индексных дескрипторов в блоках; + количество свободных блоков и индексных дескрипторов; 9.3. Организация ядра системы збГз 391 + список свободных блоков; + список свободных индексных дескрипторов. Так как файловая система может иметь большое количество свободных блоков и индексных дескрипторов, неразумно поддерживать их полный список в суперблоке.
В случае индексных дескрипторов суперблок включает в себя только частичный список. Если он становится пустым, ядро сканирует диск на предмет нахождения новых свободных индексных дескрипторов (для которых б1 глоде == 0) для добавления их в список. Однако такой подход невозможен для списка свободных блоков, так как не существует другого способа определения незанятости блока кроме проверки его содержимого. Таким образом, файловая система должна постоянно поддерживать полный список всех свободных блоков на диске. Как показано ва рис. 9.5, такой список занимает несколько дисковых блоков. Суперблок содержит первую часть списка, удаление и добавление новых блоков происходит с конца, Первый элемент списка указывает на блок, содержащий следующий элемент списка и т. д.
Суперблок Блок а Блок Ь Блок с Рис. 9.Б. Файловая система зб1з. список свободных блоков В какой-то момент времени процедура размещения блоков может обнаружить, что список в суперблоке состоит только из одного элемента. 11еременная, хранящаяся в этом элементе, является номером блока, содержащего следующий элемент списка свободных блоков (блок А на рис.