Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OS.DOC
Скачиваний:
25
Добавлен:
28.10.2018
Размер:
653.82 Кб
Скачать
  1. Файловая система unix

Современные версии UNIX могут поддерживать несколько различных файловых систем, включая стандартную файловую систему AT&T, файловую систему UNIX Berkeley, файловую систему Xenix и быструю файловую систему HFS.

Рассмотрим стандартную файловую систему UNIX.

Рис.6. Файловая система

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

Файловая система UNIX строится по иерархическому принципу, в виде дерева (рис.6), аналогично системе MS DOS, за исключением того, что сняты все ограничения на длину имени файла и расширения (постфикса). Однако надо обратить внимание, что в UNIX имеется 3 вида файлов, доступ к которым идентичен:

  • обычные дисковые файлы;

  • каталоги;

  • специальные файлы.

Обычные файлы размещаются на диске и содержат информацию, которую в них заносит пользователь. Файлами являются также готовые к исполнению программы, объектные модули и т. д. Система не накладывает никаких ограничений на внутреннюю структуру информации, хранимой в файле. Структурой информации управляет пользователь, а не система. Могут существовать самые различные форматы, известные только программам, которые эти файлы создают или этими файлами пользуются. В сущности, это очень гибкая система. С точки зрения UNIX обычный файл является бесструктурным массивом байтов с прямым доступом.

Однако текстовые файлы в UNIX все-таки принято формировать в виде строк произвольной длины, отделенных друг от друга символом перевода строки.

Каталоги в UNIX- это просто папки, где хранятся файлы, сгруппированные по какому-нибудь произвольному признаку, например текстовые документы, выполнимые программы, библиотеки и библиотечные модули, исходные тексты программ и т. д. Каталоги содержат информацию о файлах, в том числе их имена, длины, размеры, методы доступа, режимы и типы. Поскольку каталоги содержат важную информацию о файлах, они защищены механизмами ОС. В отличие от обычного файла для записи и чтения информации из файла-каталога требуются системные привилегии. Во всех других отношениях (с точки зрения ОС) это такой же обычный файл.

В системе применяется универсальное соглашение об именах: полное имя состоит из цепочки имен каталогов, через которые проходит маршрут от корня дерева (корневого каталога с именем root) до самого файла: /usr1/tcp/c/client.c

Если символьная строка начинается со знака (/), то поиск начинается с корневого каталога всей файловой системы. Имя маршрута, которое не начинается со знака (/), заставляет ОС начать поиск с текущего каталога.

Система UNIX всегда связывает каждого пользователя с определенным каталогом. При включении в систему по команде login, пользователь автоматически оказывается в каталоге с именем home. Этот каталог назначается администратором системы при регистрации пользователя. Если ваше usename, к примеру, student, то после команды login student и введения пароля в ответ на запрос password вы войдете в систему и автоматически перейдете в каталог home/student. Разумеется, после этого вы можете по команде cd (Change directory) сменить ваш текущий каталог на какой угодно. По существующей конвенции имя каталога в виде двух точек (..) всегда указывает на каталог, который находится уровнем выше. Например, если текущий каталог /home/student, то выполнение команды cd .. приведет к переходу в каталог /home.

Другая конвенция использует точку (.) как обозначение текущего каталога.

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

struct {

int inode; /* индексный дескриптор */

char *name; /* имя файла */

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

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

Понятие дескриптора (описателя файлов) позволяет отделить имя файла, с которым оперирует пользователь, от специфических данных, с которыми работает ОС. Такой подход чрезвычайно гибок и позволяет манипулировать внешним представлением иерархии файлов, не перемещая самих файлов.

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

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

Файлы и каталоги представляют собой, таким образом, логическую фуктуру файловой системы UNIX, которую можно представить в виде перевернутого дерева, имеющего один корень и множество ветвей. Каждая ветвь такого дерева является каталогом (directory), а каждый листок на конкретной ветви - файлом (file) каталога. Ветви ствола называются "родительскими" каталогами по отношению к каталогам и файлам, которые они держат внутри себя, и, наоборот, каталоги и файлы, которые расположены на основных ветвях, называются "дочерними" каталогами (файлами) по отношению к каталогам, в которых они содержатся. Следует отметить, что логическая структура файловой системы UNIX всегда, вне зависимости от количества физических дисковых устройств и количества разделов на каждом из них, имеет только один корень (root), который всегда обозначается как (/) и называется корневым каталогом файловой системы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]