Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТОС_2013 / ТОС_5_ФС.doc
Скачиваний:
19
Добавлен:
03.03.2016
Размер:
14.15 Mб
Скачать

Файлы и файловая система

Файлы в UNIX играют ключевую роль, что не всегда справедливо для других операционных систем. Трудно отрицать значение файлов для поль­зователей, поскольку все их данные хранятся в виде файлов. Однако по­мимо этого, файлы в UNIX определяют привилегии пользователей, по­скольку права пользователя в большинстве случаев контролируются с по­мощью прав доступа к файлам. Файлы обеспечивают доступ к периферий­ным устройствам компьютера, включая диски, накопители на магнитной ленте, CD-ROM, принтеры, терминалы, сетевые адаптеры и даже память. Для приложений UNIX доступ к дисковому файлу "неотличим" от доступа, скажем, к принтеру. Наконец, все программы, которые выполняются в системе, включая прикладные задачи пользователей, системные процессы и даже ядро UNIX, являются исполняемыми файлами.

Как и во многих современных операционных системах, в UNIX файлы организованы в виде древовидной структуры (дерева), называемой файловой системой (file system).

Каждый файл имеет имя, определяющее его ' расположение в дереве файловой системы.

Корнем этого дерева является корневой каталог (root directory), имеющий имя "/".

Имена всех остальных файлов содержат путь — список каталогов (ветвей), которые необходимо пройти, чтобы достичь файла.

В UNIX все доступное пользователям фай­ловое пространство объединено в единое дерево каталогов, корнем кото­рого является каталог "/". Таким образом, полное имя любого файла начи­нается с "/" и не содержит идентификатора устройства (дискового накопителя, CD-ROM или удаленного компьютера в сети), на котором он фактически хранится.

Однако это не означает, что в системе присутствует только одна файловая система.

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

имя файла является атрибутом файловой системы, а не набора некоторых данных на диске.

Каждый файл имеет связанные с ним метаданные (хранящиеся в индексные дескрипторах — inode), содержащие все характеристики файла и позво­ляющие операционной системе выполнять операции, заказанные при­кладной задачей: открыть файл, прочитать или записать данные, создать или удалить файл.

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

Типы файлов

В UNIX существуют 6 типов файлов, различающихся по функциональному назначению и действиям операционной системы при выполнении тех или иных операций над файлами:

  • Обычный файл (regular file)

  • Каталог (directory)

  • Специальный файл устройства (special device file)

  • FIFO или именованный канал (named pipe)

  • Связь (link)

  • Сокет

Обычный файл представляет собой наиболее общий тип файлов, содержа­щий данные в некотором формате.

Для операционной системы такие фай­лы представляют собой просто последовательность байтов. Вся интерпре­тация содержимого файла производится прикладной программой, обраба­тывающей файл. К этим файлам относятся текстовые файлы, бинарные данные, исполняемые программы и т. п.

Каталог. С помощью каталогов формируется логическое дерево файловой системы.

Каталог — это файл, содержащий имена находящихся в нем файлов, а также указатели на дополнительную информацию — метадан­ные.

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

Любая задача, имеющая право на чтение каталога, может про­честь его содержимое, но только ядро имеет право на запись в каталог.

На рис. 1.1 в качестве примера приведена структура каталога. По существу каталог представляет собой таблицу, каждая запись которой соответствует некоторому файлу. Первое поле каждой записи содержит указатель на ме­таданные (номер inode), а второе определяет имя файла.

Рис. 1.1. Структура каталога

Специальный файл устройства обеспечивает доступ к физическому устройству. В UNIX различают символьные (character) и блочные (block) файлы устройств. Доступ к устройствам осуществляется путем открытия, чтения и; записи в специальный файл устройства.

Символьные файлы устройств используются для небуферизированного обмена данными с устройством

в противоположность этому блочные файл позволяют производить обмен данными в виде пакетов фиксированной длины — блоков.

Доступ к некоторым устройствам может осуществляться как через символьные, так и через блочные специальные файлы.

FIFO или именованный канал это файл, используемый для связи между процессами. FIFO впервые появились в System V UNIX, но большинство современных систем поддерживают этот механизм.

Связь. Как уже говорилось, каталог содержит имена файлов и указатели на их метаданные. В то же время сами метаданные не содержат ни имен файла, ни указателя на это имя. Такая архитектура позволяет одному фай лу иметь несколько имен в файловой системе. Имена жестко связаны метаданными и, соответственно, с данными файла, в то время как сам файл существует независимо от того, как его называют в файловой системе2. Такая связь имени файла с его данными называется жесткой связи (hard link).

Например, с помощью команды 1п) мы можем создать еще одно имя (second) файла, на который указывает имя first (рис. 1.2).

$ pwd

/home/andrei

$ ln first /home/sergey/second

Жесткие связи абсолютно равноправны. В списках файлов каталогов, которые можно получить с помощью команды ls(l), файлы first и second будут отличаться только именем. Все остальные атрибуты файла будут абсолютно одинаковыми. С точки зрения пользователя — это два разных файла. Изменения, внесенные в любой из этих файлов, затронут и другой, поскольку оба они ссылаются на одни и те же данные файла. Вы можете переместить один из файлов в другой каталог — все равно эти имена буду! связаны жесткой связью с данными файла.

удаление одного из файлов (first или second) не приведет к удалению самого файла т. е. его метаданных и данных (если это не специальный файл устройства)

2 Данное утверждение верно лишь отчасти. Действительно, файлу "безразлично", какие имена он имеет в каталогах, но "небезразлично" число этих имен. Если ни одно из имен файловой системы не ссылается на файл — он должен быть удален (т. е. физически уда лены его данные на диске).

рис. 1.2 Структура файловой системы после выполнения команды 1п(1). Жесткая связь имен с данными файла

По определению жесткие связи указывают на один и тот же индексный Дескриптор mode. Поэтому проверить, имеют ли два имени файла жесткую связь, можно, вызвав команду ls(l) с ключом -/:

. $ Is -i /home/andrei/first /home/sergey/second

12567 first

12567 second

Информацию о наличии у файла нескольких имен, связанных с ним жест­кими связями, можно получить, просмотрев подробный листинг файлов с помощью команды Is - I:

$ ls — l /home/sergey/

-rw-r--г-- 2 andrei staff 7245 Jan 17 8:05 second

Во второй колонке листинга указано число жестких связей данного файла.

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

Особым типом файла является символическая связь, позволяющая косвенно адресовать файл. В отличие от жесткой связи, символическая связь адресу­ет файл, который, в свою очередь, ссылается на другой файл. В результате, последний файл адресуется символической связью косвенно (рис. 1.3). Данные файла, являющегося символической связью, содержат только имя целевого файла.

Проиллюстрируем эти рассуждения на примере. Команда 1п(1) с ключом -5 позволяет создать символическую связь:

$ pwd

/home/andrei

$ In -s first /home/sergey/symfirst

$ cd /home/sergey

$ Is -1

Irwxrwxrwx 1 andrei staff 15 Jan 17 8:05 symfirst->../andrei/first

Как видно из вывода команды ls(l), файл symfirst (символическая связь) существенно отличается от файла second (жесткая связь). Во-первых, фак­тическое содержимое файла symfirst отнюдь не то же, что и у файла first или second, об этом говорит размер файла — 15 байт. На самом деле в этом файле хранится не что иное как имя файла, на которую символиче­ская связь ссылается — ../andrei/first — ровно 15 байт. Во-вторых, файл symfirst не содержит никаких ограничений на доступ (2—10 символы в пер­вой колонке).

Символическая связь является особым типом файла (об этом свидетельству­ет символ ‘1’ в первой позиции вывода ls(l)), и операционная система рабо­тает с таким файлом не так, как с обычным. Например, при выводе на эк­ран содержимого файла symfirst появятся данные файла /home/andrei/first.

рис. 1.3. Символическая связь

Сокеты

Сокеты предназначены для взаимодействия между процессами. Интерфейс сокетов часто используется для доступа к сети TCP/IP. В системах, ветви

BSD UNIX на базе сокетов реализована система межпроцессного взаимо­действия, с помощью которой работают многие системные сервисы, на­пример, система печати.

Соседние файлы в папке ТОС_2013