Операционная система UNIX
Операционная система UNIX читать книгу онлайн
Книга посвящена семейству операционных систем UNIX и содержит информацию о принципах организации, идеологии и архитектуре, объединяющих различные версии этой операционной системы.
В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).
Для широкого круга пользователей.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Основные поля 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()
Поле
v_vfsp
vfs
v_vfsmountednere
Поле
v_data
v_data
Набор операций над vnode указан полем
v_op
Таблица 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.