Последовательность действий при монтировании

Утилита монтирования - mount. Демонтирования – umont. Аргументы – точка монтирования.

Аргументы:

- тип ФС;

- точка монтирования;

- дополнительны данные, связанные с реальной ФС;

- флаг (если требуются).

Для QNX: mount dos /dev/mnt/fd0. Для UNIX: mount dos /dev/fd0/mnt

Точка монтирования.

При монтировании осуществляются следующие действия:

1) Поиск vnode (lookup(), name_i()), соответствующей точке монтирования.

2) Проверяется, является ли vnode каталогом и не используется ли другими ФС данная (.) монтир-ия.

3) Поиск элемента-коммутатора ФС vfssw, который соответствует типу монтируемой ФС.

4) Процедура инициализации этого элемента (размещение специальных данных) – init().

5) Ядро размещает структуру vfs и помещает указатель vfs в список подключённых ФС.

6) Заполнение поля *vfs_vnodecovered. Сюда записывается ссылка на точку монтирования. Вычисление этого указателя производится с учетом всех путей. Если ФС – корневая (root) – записывается 0.

7) Заполнение поля *vfs_op – указатель на список операции, определённых для данной ФС.

8) Указатель на данный элемент (vfs) сохраняется в *v_vfsmountedhere/

9) Вызов функции vfs_mount() для данной ФС, он имеет возможность формировать реальную ФС.

Происходит проверка прав монтирования ФС:

- размещение и инициализация файлов данного типа;

- размещение vnode для корневого каталога, подключённого для данной ФС, доступ к которому возможен с помощью операции vfs_root.

10) После подключения ФС, она м.б. адресована по имени точки монтирования (/mnt либо /dev/fd0).

 

30. Файловые дескрипторы и трансляция имён

 

Прикладные процессы работают с файлами и модифицируют их. При работе с фалами мы работаем либо с файловыми дескрипторами, либо с именами. Ядро же различает файлы по индексному дескриптору => требуется установка соответствия между файловыми дескрипторами и индексными дескрипторами. В большинстве случаев используется трансляция имен.

Системные вызов, требующие трансляции имен: exec(), chown(), chgrp(), chmod(), rmdir, mkdir, mknode, open(), link()…

Для трансляции имен существенно указывать полный или относительный путь к файлу.

Если есть точка монтирования, то для проведения трансляции необходимо выполнить vfs_root() для перехода через точку монтирования, в результате которого получается vnode корневой системы.

Трансляция продолжается до тех пор, пока не будут просмотрены все имена. В результате завершения операции трансляции – возвращении виртуального дескриптора.

Доступ к ФС из процесса.

 

В системной таблице содержится следующая информация:

F_flag = fread;

F_cont=2;

F_vnode=03564; *

F_offset=0x32;

 

F_flag = fwrite;

F_cont=1;

F_vnode=03304; **

F_offset=0x16;

 

Окончательная таблица.

 

Виртуальная ФС позволяет пройти от пользовательского процесса до устройства.

Файловые дескрипторы получаются процессом в результате системных вызовов из пользовательских приложений. Файловый дескриптор – индекс в таблице файловых дескрипторов каждого из процессов. Хранится эта таблица в u_area каждого процесса.

 

Существует системная таблица, в которую переписывается информация из всех таблиц ФД всех активных процессов. Поскольку эта системная таблица одна на всех – возможны повторения. Каждая активная запись представляет открытый файл и адресует область таблицы. Существует суммарная таблица виртуальных дескрипторов, где каждый файл упоминается 1 раз. Делается соответствующая запись и по этим записям имеется возможность обратиться к реальной ФС, используя вышеописанные структуры.