Структура канонической файловой системы Unix. Другие типы файловых систем ОС Unix.
Структура канонической файловой системы
Физически файловая система представляет собой последовательность блоков данных на магнитном носителе.
После создания на размеченном магнитном диске пустой файловой системы множество блоков диска может быть условно разбито на 5 областей.
0) В блоке № 0 расположена программа начальной загрузки операционной системы.
1) Блок № 1 содержит, так называемый, суперблок. Суперблок содержит информацию о физической структуре файловой системы. Точное (формальное) описание структуры суперблока приведено в переменной типа struct в файле
/usr/include/sys/filsys.h
Приведем словесное описание полей суперблока:
· длина индексного файла в блоках;
· размер тома файловой системы в блоках;
· счётчик числа свободных блоков;
· список свободных блоков
· счётчик числа описателей файлов;
· список описателей файлов;
· флаг доступности только по чтению;
· общее число свободных блоков;
· общее число свободных описателей файлов;
· метка тома файловой системы;
· флаг чистоты (отсутствие ошибок в структуре) файловой системы.
Индексный дескриптор файла (описатель файла)
Индексный дескриптор файла - это основной элемент, описывающий атрибуты файла вне зависимости от того, в каком каталоге или каталогах он упомянут.
Описатели файлов конкретной файловой системы находятся в последовательных блоках диска, начиная с блока диска № 2.
В канонической файловой системе любой описатель файла имеет длину 64 байта, т.е. в блоке размещается 8 описателей файла.
Описание структуры индексного дескриптора приведено в файле ino.h (или inode.h или dinode.h), расположенном в следующих каталогах (в зависимости от реализации Unix):
/usr/src/sys/ufs/ufs
/usr/include/ufs/ufs
Индексный дескриптор канонической файловой системы содержит следующие поля:
№№ п/п | Наименование поля | Длина поля в байтах |
Режим доступа и тип файла | ||
Счётчик числа ссылок на файл | ||
Идентификатор владельца | ||
Идентификатор группы | ||
Счётчик числа байтов в файле | ||
Указатели на блоки диска | ||
Дата последнего доступа | ||
Дата последней модификации | ||
Дата создания | ||
å=64 |
Назначение отдельных полей:
1). Режим доступа и тип файла:
Приведем некоторые значения кодов, записываемых в данное поле:
Тип файла
040000 каталог
020000 специальный файл устройства
060000 специальный файл устройства
Права доступа
0400 разрешение чтения для владельца
0200 разрешение записи для владельца
0100 разрешение выполнения для владельца
070 то же самое для группы
07 то же самое для прочих пользователей
Счётчик числа ссылок на файл
Длина файла в этом поле указывается 32-битовым числом, что позволяет создавать файлы длиной несколько гигабайтов.
Поля "идентификатор группы", "идентификатор владельца", "счётчик числа байтов в файле", "дата последнего доступа", "дата последней модификации", "дата создания" никаких особенностей не имеют.
Особый интерес вызывает поле №6, содержащее указатели на блоки диска, занятые файлом.
Указатели на блоки диска
В канонической файловой системе (длина блока 512 байтов) для адресации данных файла на диске используется поле из 13 элементов по 24 бита (3 байта).
Первые 10 элементов непосредственно указывают на десять блоков обычного файла.
Если файл имеет длину б'ольшую, чем 10 блоков, то 11-й элемент указывает на косвенный блок, содержащий до 128 адресов дополнительных блоков файла.
Ещё б'ольшие файлы используют 12-й элемент, который указывает на блок, содержащий 128 указателей на блоки, каждый из которых содержит по 128 адресов блоков файла.
В очень больших файлах может быть использован 13-й элемент массива адресов. В этом случае трёхкратная косвенная адресация позволяет создавать файлы длиной
[(10+128+128^2+128^3)*512] байтов.
Таким образом:
· если длина файла меньше 5120 байтов, требуется одно обращение к диску;
· если длина от 5120 до 70656 байтов, то - два обращения;
· и, наконец, для файлов длиной от 8.459.264 байта до 1.082.201.088 байтов - требуется 4 обращения к диску.
Способ адресации данных файла, принятый в Unix, позволяет иметь прямой и быстрый доступ к файлам.
Для повышения эффективности файловой системы в Unix применяются:
· кэширование диска - в буфере основной памяти хранятся некоторые наиболее часто используемые блоки;
· после открытия файла соответствующий индексный дескриптор считывается в память, и, таким образом, системе становятся доступны все номера блоков данного файла.