Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект 58 страниц 2002.doc
Скачиваний:
91
Добавлен:
15.06.2014
Размер:
4.07 Mб
Скачать

Основы файловой системы ос unix

С точки зрения пользователей, в UNIX есть два типа объектов: файлы и процессы.

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

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

Файлы организованы в древовидную файловую систему. Каждый файл имеет имя, определяющее его положение в дереве файловой системы. Корнем дерева является корневой каталог с именем “/”, имена всех остальных файлов содержат путь, представляющий собой список каталогов, которые нужно пройти до конкретного имени: /home/student/proga.cpp. Полное имя файла начинается с наклонной черты и не содержит указателя устройства (в отличие от MS-DOS или Windows).

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

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

Типы файлов

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

  1. Обычный файл;

  2. Каталог;

  3. Специальный файл устройства;

  4. Файл FIFO или именованный канал;

  5. Связь (link);

  6. Сокет (socket).

Рассмотрим эти типы файлов подробнее:

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

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

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

Индексные дескрипторы

Имена файлов

1753

.

2036

. .

751

P1.txt

854

P2.c

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

  2. Файл FIFO или именованный канал – это специальный файл для связи между процессами. Поддержка файла FIFO появилась, начиная с System-5.

По умолчанию файл FIFO имеет два дескриптора.

  1. Связь (link).

/home/katalog1 /home/katalog2

534

.

734

. .

1374

P1.dat

М

1374

5374

етаданные

(inode)файла

534

.

734

. .

1374

Name2

5374

Sym_name

Данные файла

/../katalog1/P1.dat


Данные файла

/

home

Katalog1

Katalog2

P1.dat

Name2

Sym_name

Жесткая связь

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

Метаданные не содержат ни имени файла, ни указателя на это имя. Такой подход позволяет одному файлу иметь несколько имён в файловой системе. Имена жёстко связаны с метаданными, и, соответственно, с данными файла, а сам файл существует независимо от того, как его называют в файловой системе. Такая связь имени файла с его данными называется жёсткой связью. С помощью команды ln можно создавать жесткие связи.

> ln p1.dat /home/katalog2/name2

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

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

Символическая связь создаётся командой ln с параметром s.

> ln –s p1.dat /home/katalog2/sym_name

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

#include<unistd.h>

int link(const char *original_path, const char *new_path);

int symlink(const char *realname, const char *symname);

. . .

link(“/home/katalog1/P1.dat”, ”/home/katalog2/name2”);

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

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