- •Введение
- •Понятие операционной системы. Типы операционных систем
- •Функции операционной системы
- •Структура операционной системы. Ос ms dos
- •Файлы и каталоги на дисках
- •Драйверы устройств
- •Базовая система ввода-вывода (bios)
- •Загрузчик операционной системы
- •Ядро ms dos
- •Командный процессор dos
- •Внешние команды dos
- •Файловая структура диска
- •Стартовый сектор
- •Каталоги
- •Область данных
- •Операционные системы Windows
- •Выбор платформы Windows
- •Термины
- •Архитектура Windows Режимы выполнения программного кода
- •Многозадачность
- •Управление памятью в Windows
- •Выполнение приложений
- •Интерфейс прикладного программирования Win32
- •Реестр Windows
- •Операционная система unix
- •Ядро и процессы unix
- •Диспетчер unix
- •Процессы unix
- •Дескриптор и контекст процесса
- •Иерархия процессов
- •Идентификаторы процесса
- •Группы процессов
- •Взаимодействие процессов
- •Процессы-«демоны»
- •Межпроцессные коммуникации unix
- •Сигналы
- •Сигналы unix по мере возрастания их значений:
- •Семафоры
- •Программные каналы (Pipes)
- •Очереди сообщений
- •Разделяемая память
- •Многопользовательская защита в unix
- •Идентификаторы пользователя и группы
- •Код защиты файла
- •Привилегированный пользователь
- •Эффективные и реальные идентификаторы
- •Свопинг и пейджинг в unix
- •Буфер кеш-памяти
- •Управление вводом/выводом
- •Специальные файлы
- •Взаимодействие драйверов с программной и аппаратной средой
- •Файловая система unix
- •Основные системные каталоги
- •Корневой каталог /
- •Каталог /var
- •Каталог /etc
- •Каталог /usr
- •Каталог /home (/export/home)
- •Каталог/opt (/opti, /opt2, ... /optn)
- •Команды управления swap
- •Команда mkfile
- •Специальные файлы
- •Класс устройства
- •Тип и номер
- •Связь физической и логической структур
- •Создание и монтирование файловой системы
- •Дисковые устройства в unix
- •Внутренняя структура файловой системы Распределение дискового пространства
- •Индексные дескрипторы
- •Системные вызовы unix для работы с файлами
- •Стандартные библиотечные функции ввода/вывода
- •Поточные функции ввода/вывода
- •Литература
- •Оглавление
-
Файловая система 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), который всегда обозначается как (/) и называется корневым каталогом файловой системы.
