Андрей Робачевский - Операционная система UNIX
- Название:Операционная система UNIX
- Автор:
- Жанр:
- Издательство:BHV - Санкт-Петербург
- Год:1997
- Город:Санкт-Петербург
- ISBN:5-7791-0057-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Андрей Робачевский - Операционная система UNIX краткое содержание
Книга посвящена семейству операционных систем UNIX и содержит информацию о принципах организации, идеологии и архитектуре, объединяющих различные версии этой операционной системы.
В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).
Для широкого круга пользователей
Операционная система UNIX - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:

Рис. 4.6. Каталог файловой системы FFS
Архитектура виртуальной файловой системы
Как было показано, различные типы файловых систем существенно отличаются по внутренней архитектуре. В то же время современные версии UNIX обеспечивают одновременную работу с несколькими типами файловых систем. Среди них можно выделить локальные файловые системы различной архитектуры, удаленные и даже отличные от файловой системы UNIX, например DOS. Такое сосуществование обеспечивается путем разделения каждой файловой системы на зависимый и независимый от реализации уровни, последний из которых является общим и представляет для остальных подсистем ядра некоторую абстрактную файловую систему. Независимый уровень также называется виртуальной файловой системой (рис. 4.7). При этом дополнительные файловые системы различных типов могут быть встроены в ядро UNIX подобно тому, как это происходит с драйверами устройств.

Рис. 4.7. Архитектура виртуальной файловой системы
Виртуальные индексные дескрипторы
Дисковый файл обычно имеет связанную с структуру данных, называемую метаданными или inode, где хранятся основные характеристики данного файла и с помощью которой обеспечивается доступ к его данным. Одним из исключений из этого правила является файловая система DOS, в которой структуры файла и его метаданных существенно отличаются от принятых в UNIX. Тем не менее виртуальная файловая система основана на представлении метаданных файла в виде, сходном с традиционной семантикой UNIX. Интерфейсом работы с файлами является vnode (от virtual inode — виртуальный индексный дескриптор).
Первоначально этот интерфейс был разработан в 1984 году фирмой Sun Microsystems для обеспечения требуемой унификации работы с файловыми системами различных типов, в частности, с NFS и ufs (FFS). Сегодня виртуальная файловая система является стандартом в SVR4, хотя ряд других версий UNIX также реализуют подобную архитектуру (например, независимая файловая система SCO UNIX).
Метаданные всех активных файлов (файлов, на которые ссылаются один или более процессов) представлены в памяти в виде in-core inode, в качестве которых в виртуальной файловой системе выступают vnode. Структура данных vnode одинакова для всех файлов, независимо от типа реальной файловой системы, где фактически располагается файл. Данные vnode содержат информацию, необходимую для работы виртуальной файловой системы, а также неизменные характеристики файла, например, такие как тип файла.
Основные поля vnode приведены в табл. 4.1.
Таблица 4.1. Поля vnode
Поле | Описание |
---|---|
u_short vflag |
Флаги vnode |
u_short v_count |
Число ссылок на vnode |
struct filock *v_filocks |
Блокировки файла |
struct vfs *v_vfsmountedhere |
Указатель на подключенную файловую систему, если vnode является точкой монтирования |
struct vfs *v_vfsp |
Указатель на файловую систему, в которой находится файл |
enum vtype v_type |
Тип vnode: обычный файл, каталог, специальный файл устройства, символическая связь, сокет |
caddr_t v_data |
Указатель на данные, относящиеся к реальной файловой системе |
struct op |
Операции vnode |
Каждый vnode содержит число ссылок v_count
, которое увеличивается при открытии процессом файла и уменьшается при его закрытии. Когда число ссылок становится равным нулю, вызывается операция vn_inactive()
, которая сообщает реальной файловой системе, что на vnode никто больше не ссылается. После этого файловая система может освободить vnode (и, например, соответствующий ему inode) или поместить его в кэш для дальнейшего использования.
Поле v_vfsp
указывает на файловую систему (структуру vfs
, о которой мы поговорим в следующем разделе), в которой расположен файл, адресованный данным vnode. Если vnode является точкой монтирования, то поле v_vfsmountednere
указывает на подключенную файловую систему, "перекрывающую" данный vnode.
Поле v_data
указывает на данные, относящиеся к конкретной реализации реальной файловой системы. Например, для дисковой файловой системы ufs, v_data
указывает на запись в таблице in-core inode.
Набор операций над vnode указан полем v_op
. В терминах объектно-ориентированного программирования этот набор представляет собой виртуальные методы класса vnode. Он является своего рода шлюзом к реальной файловой системе, позволяя предоставить общий интерфейс виртуальной файловой системы и в то же время обеспечить специфические реализации функций работы с файлами, необходимые для различных типов файловых систем. Некоторые операции, большинство из которых уже знакомы читателю по системным вызовам, приведены в табл. 4.2.
Таблица 4.2. Операции с vnode виртуальной файловой системы
int (*vn_open)() |
Открыть vnode. Если операция предусматривает создание клона (размножение), то в результате будет размещен новый vnode. Обычно операции такого типа характерны для специальных файлов устройств. |
int (*vn_close)() |
Закрыть vnode. |
int (*vn_read)() |
Чтение данных файла, адресованного vnode. |
int (*vn_write)() |
Запись в файл, адресованный vnode. |
int (*vn_ioctl)() |
Задание управляющей команды. |
int (*vn_getaddr)() |
Получить атрибуты vnode: тип vnode, права доступа, владелец-пользователь, владелец-группа, идентификатор файловой системы, номер inode, число связей, размер файла, оптимальный размер блока для операций ввода/вывода, время последнего доступа, время последней модификации, время последней модификации vnode, число занимаемых блоков. |
int (*vn_setaddr)() |
Установить атрибуты vnode. Могут быть изменены UID, GID, размер файла и времена доступа и модификации. |
int (*vn_access)() |
Проверить права доступа к файлу, адресованному vnode. При этом производится отображение между атрибутами доступа файлов UNIX и атрибутами реальной файловой системы (например, DOS). |
int (*vn_lookup)() |
Произвести трансляцию имени файла в соответствующий ему vnode. |
int (*vn_create)() |
Создать новый файл и соответствующий ему vnode. |
int (*vn_remove)() |
Удалить имя файла в указанном vnode каталоге. |
int (*vn_link)() |
Создать жесткую связь между именем файла и vnode. |
int (*vn_mkdir)() |
Создать новый каталог в указанном vnode каталоге. |
int (*vn_rmdir)() |
Удалить каталог. |
int (*vn_readdir)() |
Считать записи каталога, адресованного vnode. |
int (*vn_symlink)() |
Создать символическую связь между новым именем и именем файла, расположенном в указанном vnode каталоге. |
int (*vn_readlink)() |
Чтение файла — символической связи. |
int (*vn_fsync)() |
Синхронизировать содержимое файла — записать все кэшированные данные. |
int (*vn_inactive)() |
Разрешить удаление vnode, т.к. число ссылок на vnode из виртуальной файловой системы стало равным нулю. |
Взаимосвязь между независимыми дескрипторами (vnode) и зависимыми от реализации метаданными файла показана на рис. 4.8.
Читать дальшеИнтервал:
Закладка: