Файловые системы
Файловая система имеет иерархическую структуру каталогов и файлов, включая корневой каталог. Файловая система располагается на устройстве, которое является, обычно, магнитным диском того или иного типа. Если диск достаточно велик, он может быть разбит на несколько "логических" дисков; тогда на каждом логическом диске может быть размещена отдельная файловая система. Каждая файловая система, прежде чем стать доступной, должна быть смонтирована.
Количество файлов в файловой системе ограничено (65536 для UNIX, версия 7).
Каждая файловая система имеет четыре основные части:
- загрузочный блок; это самый первый блок диска (блок 0), зарезервированный для системной загрузочной программы;
- супер-блок - это первый блок собственно файловой системы (блок 1); он содержит основные данные о файловой системе и ее размещении на диске, в том числе о списках свободных i-узлов и блоков;
- i-узлы - это последовательность блоков вслед за суперблоком; i-узел содержит ссылки на блоки; имеется ровно один i-узел для каждого каталога или файла в файловой системе;
- блоки - оставшееся пространство диска занимают блоки, которые содержат либо действительные данные каталогов и файлов (блоки данных), либо ссылки на блоки (косвенные блоки).
Суперблок содержит следующие данные:
- размер дискового пространства, доступного файловой системе (в блоках);
- число блоков, зарегистрированных для i-узлов;
- имя файловой системы;
- имя тома;
- время последнего изменения;
- время последнего копирования (back up);
- ссылка на список свободных блоков;
- ссылка на список свободных i-узлов.
Структура файловой системы представлена на рис.13.1.
Рис.13.1.
Каждый файл (и каталог) в файловой системе представлен i-узлом, содержащим указатели на блоки, составляющие файл.
В i-узле содержится также информация о правах доступа к файлу, число ссылок на файл из каталогов и другие данные. Структура i-узла и блоков файла для UNIX, версия 7 показана на следующем рисунке. Каждый i-узел содержит 13 указателей. Первые 10 указателей непосредственно ссылаются на блоки данных файла. Поскольку блок содержит 512 байтов, то этого достаточно для обработки файлов до 512х10=5120 байтов.
Если длина файла больше, чем 5120 байта, используется 11-й указатель i-узла, который ссылается на косвенный блок из 128 ссылок на блоки данных. Использование косвенного блока позволяет увеличить длину файла до величины 512х(10+128)=70656 байтов. Если и этого недостаточно, то используется 12-й указатель i-узла, ссылающийся на дважды косвенный блок, содержащий 128 ссылок на косвенные блоки (рис.13.2). Тогда максимальный размер файла увеличивается до величины 512х(10+128+128**2)=8459264 байтов. Наконец, использование последнего, 13-го указателя на трижды косвенный блок из 128 ссылок на дважды косвенные блоки, дает предельную длину в файловой системе: 512х(10+128+128**2+128***3)=1082201088 байтов (см. рис. 13.2).
Другие версии системы UNIX могут отличаться количеством ссылок в i-узле, косвенных блоках и размером блока данных.
Когда система загружается, имеется только одна из файловых систем, называемая корневой. В ней находятся все важнейшие каталоги (/dev, /etc, /bin и т.п.). Все остальные файловые системы должны быть созданы и смонтированы.
Рис. 13.2.