Структура файловой системы

Файловая система ОС UNIX имеет иерархическую структуру, образующую дерево каталогов и файлов. Корневой каталог обозначается символом "/", путь по дереву каталогов состоит из имен каталогов, разделенных символом "/", например:

/home/work/document

В каждый момент времени с любым пользователем связан текущий каталог, то есть местоположение пользователя в иерархической файловой системе.

Каждый файл ОС UNIX может быть однозначно специфицирован некоторой структурой данных, называемой описателем файла или дескриптором. Эта структура описана в файле <fcntl.h>, она занимает 64 байта и содержит следующую информацию:

struct dinode

{ unsigned short di_mode; /* режим доступа и тип файла */

short di_nlink; /* счетчик числа ссылок на файл */

short di_uid; /* идентификатор его владельца */

short di_gid; /* идентификатор группы */

off_t di_size; /* счетчик числа байт в файле */

char di_addr[40]; /* указатели на блоки диска,

в которых хранится сам файл */

time_t di_atime; /* дата последнего доступа */

time_t di_mtime; /* дата последней модификации */

time_t di_ctime; /* дата создания */

}

Поле di_mode состоит из 16-ти разрядов:

Рис.1. Режим доступа и тип файла

Поле di_addr используется для хранения указателей местоположения блоков диска, содержащих информацию, помещенную в данный файл. В этом поле может храниться 13 указателей, из которых первые 10 относятся к первым десяти блокам файла. Если файл занимает больше места, то в 11-й указатель заносится информация о местоположении первичного блока косвенности, состоящего из ста двадцати восьми 32-битных указателей на блоки файла; 12-й указатель указывает на вторичный блок косвенности, содержащий 128 указателей местоположения первичных блоков косвенности, а 13-й указатель, соответственно, указывает на местоположение третичного блока косвенности, включающего 128 указателей вторичного блока косвенности. Таким образом, используя эту схему адресации, можно обращаться к файлу, состоящему не более чем из (128x128x128+128x128+128+10) блоков. Все эти рассуждения справедливы для блоков размером 512 (128x4) байт.

Обращение к файлу происходит по имени. Локальное имя файла – это набор произвольных символов. Если в среди них встречается точка, то за ней следует так называемое расширение, которое обычно служит для определения типа файла. Например, файлы, хранящие текст, чаще всего имеют расширение "txt" или "doc" (title.doc, book.txt и т.д.), файлы с текстом программ на языке С – расширение "c" (progr.c, code.c и т.п.), исполняемые файлы – расширение "out" или вовсе без расширений. Расширений может быть несколько (например, имя "progr.c.b" может означать старую версию (bak-файл) программы на языке С).

Локальное имя файла хранится в соответствующем каталоге. Путь к файлу от корневого каталога называется полным именем файла. Если обращение к файлу начинается с символа "/", то его поиск начинается с корневого каталога, в любом другом случае поиск файла начинается с текущего каталога. У любого файла может быть несколько имен. Фактически, имя файла является ссылкой на файл, специфицированный номером описателя. Таким образом, располагая имена одного и того же файла в разных каталогах можно в каждом каталоге иметь возможность обращаться к файлу напрямую, а не с помощью указания полного пути.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: