Файловая система
Файловая система - это часть общей системы управления памятью (см. Структура ядра ОС), назначение которой сводится в основном к управлению файлами, хранящимися во внешней памяти, а также к контролируемому разделению информации между пользователями.
Функции файловой системы
предоставление возможности создавать, модифицировать, уничтожать файлы;
контролируемое разделение файлов несколькими пользователями;
предоставление пользователю возможности задания различной структуры файлов и возможности управления передачей информации между файлами;
в системе должны быть предусмотрены средства обеспечения сохранности и восстановления информации в файлах;
система должна обеспечивать независимость файлов от внешних устройств, т.е. пользователям должна быть предоставлена возможность обращения к файлам с использованием символических имен;
система должна предоставлять защиту информации в файлах от несанкционированнного доступа (возможность шифрования и дешифрования данных);
файловая система должна иметь “дружественный” интерфейс по отношению к пользователю.
Состав файловой системы
Файловая система, входящая в состав ядра ОС, как правило, содержит следующие средства:
Методы доступа, которые определяют конкретную организацию доступа к данным, хранящимся в файлах.
Средства управления файлами, обеспечивающие хранение файлов, обращение к ним, коллективное использование и защиту.
Средства управления внешней памятью, обеспечивающие распределение пространства внешней памяти для размещения файлов.
Средства обеспечения целостности файлов, которые гарантируют сохранность информации файла.
Файловая система UNIX
Рассмотрим файловую систему на примере UNIX. Основной функцией файловой системы является распределение дискового пространства на именованные участки - файлы. Некоторые системы поддерживают разнотипные файлы с соответствующими методами доступа (прямой, индексный, индексно-последовательный и т.п.). в UNIX этого нет. Ее файловая система чрезвычайно проста, и файлы представляют собой просто последовательности байтов. Иногда к ним обращаются как к текстовым или двоичным данным, но различаются они лишь содержимым, а не структурой и методом доступа. В современных условиях это вовсе не недостаток, так как в этом случае система становится универсальной - не делается никаких предположений о внутренней структуре данных файла, и доступ к любому внешнему устройству, а также к другому процессу осуществляется как к обычному файлу.
$ Для нас, нормально работающих с MSDOSилиWindowsиерархичнось файловой системыUNIX, которая строится в виде сети, не представляет ничего удивительного, за исключением, может быть того, что сняты все ограничения на длину имени файла. $
В UNIX имеется три вида файлов, доступ к которым идентичен:
обычные дисковые файлы;
каталоги;
специальные файлы
Обычные файлы размещаются на диске и содержат информацию, которую в них заносит пользователь. Файлами также являются готовые к исполнению программы, объектные модули и т.д. Система не накладывает никаких ограничений на внутреннюю структуру информации, хранимой в файле. Структурой информации управляет пользователь, а не система. С точки зрения UNIX обычный файл является бесструктурным массивом байтов с прямым доступом. Однако, текстовые файлы в UNIX принято форматировать в виде строк произвольной длины, отделенных друг от друга символами перевода строки.
Каталоги в общеупотребительном смысле - это просто папки, где хранятся файлы, сгруппированные по какому-либо произвольному признаку, например текстовые документы, выполнимые программы, библиотеки и библиотечные модули, исходные тексты программ и т.д. В свою очередь, группы каталогов могут образовывать в логическом смысле том с главным корневым каталогом, на который может быть смонтирована та или иная файловая система. Каталоги содержат информацию о файлах. В том числе их имена, размеры, методы доступа, режимы и типы.
Поскольку каталоги содержат важную информацию о файлах, они защищены механизмами ОС. В отличие от обычного файла для записи и чтения информации из файла-каталога требуются системные привилегии. Во всех других отношениях, с точки зрения ОС, это такой же обычный файл.
Внутренняя структура каталога весьма простая: для каждого файла или другого каталога нижнего уровня создается запись. Организованная в структуру следующего содержания:
Struct {
Int inodе; /*индексный дескриптор*/
Char name;/*имя файла*/
}
Здесь inodе содержит номер индексного дескриптора, в котором сосредоточена информация о типе файла (каталог, обычный файл или специальный файл), о коде его защите, длине, дате и времени создания, а также о расположении данных файла на диске. Существует по одному дескриптору на каждый файл, и именно с ними работает файловая система.
Структура каталогов
2 байта 14 байт
Номер индексного дескриптора Имя файла Структура записи каталога UNIX
(16 байт)
8 3 1 4
Имя файла Расширение Атрибуты Резервные Структура записи каталога
MS DOS (32 байта)
Резервные Время Дата Номер первого Размер
блока
Каталоги могут непосредственно содержать значения характеристик файлов, как это сделано в файловой системе MS DOS , или ссылаться на таблицы, содержащие эти характеристики, как это реализовано в ОС UNIX. Каталоги могут организовывать иерархическую структуру за счет того, что каталоги более низкого уровня могут входить в каталоги более высокого уровня. Иерархия каталогов может быть деревом или сетью. Каталоги образуют дерево, если файлу разрешено входить только в один каталог, и сеть - если файл может входить сразу в несколько каталогов. В MS DOS каталоги образуют древовидную структуру, а в UNIX - сеть.
Логическая организация файловой системы
Одноуровневая Дерево (иерархия MS DOS)
Сеть (иерархия UNIX)
Дескриптор файла
Введение понятия дескриптор файла позволяет отделить имя файла, с которым оперирует пользователь от специфических данных с которым работает ОС. Такой подход чрезвычайно гибок и позволяет манипулировать внешним представлением иерархии файлов, не перемещая самих файлов.
В частности, весьма просто один и тот же файл поместить в разные каталоги. Создав в них соответствующие именные ссылки на этот файл. Но никуда его физически не перемещая. Файл может иметь одно и то же имя в разных каталогах или имена-синонимы, но ссылаться они будут на один и тот же индексный дескриптор, который является ключом для доступа к данным файла.
Каждая новая ссылка из каталогов к индексному дескриптору отмечается в специальном его поле. Это позволяет файловой системе следить за занятостью файла: как только счетчик станет равным нулю, индексный дескриптор освобождается, а дисковое пространство может быть использовано для записи других файлов.
Индексные дескрипторы
1 13 22
root
p2 1 . 13
prog1 bin 1 .. 1