Читаем Операционная система UNIX полностью

/cdrom/unnamed_cdrom on /dev/dsk/c0t6d0 ronly on Mon Mar 25 15:29:43 1997

> vfs

FSTYP BSZ  MAJ/MIN   FSID VNCOVERED    PDATA BCOUNT FLAGS

ufs   8192  32,24  800018         0 f5b79b78      0 notr

ufs   8192  32,0   800000  f5c29ad0 f5c28c88      0 notr

tmpfs 4096   0,0        0  f5958d18 f5d16ee0      0 notr

fd    1024 158,0  2780000  f5c4f5d8        0      0

proc  1024 156,0  2700000  f5c4f718        0 283920

hsfs  2048  91,1  b9d02de5 f5f20698 f5b60d98      0 rd

Мы распечатали список подключенных файловых систем (команда mount(1M)) и элементы vfs таблицы монтирования. Рассмотрим подробнее vnode точки монтирования файловой системы раздела /dev/dsk/c0t0d0s0.

> vnode f5c29ad0

VCNT VFSMNTED     VFSP STREAMP VTYPE RDEV VDATA    VFILOCKS VFLAG

   2 f5c25c60 f0286570       0 d     -    f5c29ac8        0 -

Удостоверимся, что поле v_vfsmountedhere (VFSMNTED) адресует элемент vfs подключенной файловой системы, а поле v_fsp (VFSP) указывает на элемент корневой файловой системы.

> vfs f5c25c60

FSTYP  BSZ MAJ/MIN   FSID VNCOVERED    PDATA BCOUNT FLAGS

ufs   8192  32,0   800000  f5c29ad0 f5c28c88      0 notr

> vfs f0286570

FSTYP  BSZ MAJ/MIN   FSID VNCOVERED    PDATA BCOUNT FLAGS

ufs   8192  32,24  800018         0 f5b79b78      0 notr

Наконец, посмотрим на содержимое inode файловой системы ufs, адресованного полем v_data (VDATA) виртуального индексного дескриптора:

> ui f5c29ac8

UFS INODE TABLE SIZE = 1671

SLOT MAJ/MIN INUMB RCNT LINK UID GID SIZE    MODE FLAGS

   -  32,24   7552    2    2   0   0  512 d---755 rf

Полученная информация показывает, что запись таблицы inode ufs адресует дисковый индексный дескриптор с номером 7552 (INUMB). Для того чтобы узнать имя файла, используем команду ncheck(1M):

> !ncheck -i 7552

/dev/dsk/c0t3d0s0:

7552 /usr/local

<p>Трансляция имен</p>

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

В табл. 4.6 приведены системные вызовы, для выполнения которых требуется трансляция имени файла.

Таблица 4.6. Системные вызовы, требующие трансляции имени

exec(2)Запустить программу на выполнение
chown(2)Изменить владельца-пользователя
chgrp(2)Изменить владельца-группу
chmod (2)Изменить права доступа
statfs(2)Получить метаданные файла
rmdir(2)Удалить каталог
mkdir(2)Создать каталог
mknod(2)Создать специальный файл устройства
open(2)Открыть файл
link(2)Создать жесткую связь
Перейти на страницу:

Похожие книги

Архитектура операционной системы UNIX (ЛП)
Архитектура операционной системы UNIX (ЛП)

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

Морис Дж Бах , Морис Дж. Бах

ОС и Сети, интернет / ОС и Сети / Книги по IT