Thursday, Feb 23rd

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Обзор системы ввода/вывода Трансляция имен путей

Трансляция имен путей

Трансляция имени пути требует ряда взаимодействий между интерфейсом vnode и нижележащими файловыми системами. Процесс трансляции имени пути проходит следующим образом.

1. Имя пути для трансляции копируется из процесса пользователя или, для запроса удаленной файловой системы, извлекается из сетевого буфера.

2. Определяется начальная точка имени пути либо как корневой каталог, либо как текущий каталог. vnode для соответствующего каталога становится каталогам поиска (lookup directory), использующимся на следующем шаге.

3. Уровень vnode вызывает специфическую операцию файловой системы lookup() и передает ей оставшиеся компоненты имени пути и текущий каталог поиска. Обычно нижележащая файловая система будет искать в каталоге поиска следующий компонент имени пути и возвратит получившийся vnode (или ошибку, если имя на самом деле не существует).

4. Если возвращена ошибка, верхний уровень возвращает ошибку. Если имя пути исчерпано, поиск имени пути сделан и возвращенный vnode является результатом поиска. Если имя пути не исчерпано, а возвращенный vnode не является каталогом, тогда уровень vnode возвращает ошибку «это не каталог». Если ошибок не было, верхний уровень проверяет, не является ли возвращенный каталог точкой монтирования другой файловой системы. Если да, тогда каталог поиска становится смонтированной файловой системой; в противном случае каталог поиска становится vnode, возвращенным нижележащим уровнем. Затем поиск продолжается с шага 3.

Хотя вызов через интерфейс vnode для каждого компонента имени пути может показаться неэффективным, это обычно необходимо. Причина в том, что нижележащая файловая система не знает, какие каталоги использовались в качестве точек монтирования. Поскольку точка монтирования перенаправит поиск в новую файловую систему, важно, чтобы текущая файловая система не продолжила поиск после смонтированного каталога. Хотя локальная файловая система могла бы знать о том, какие каталоги являются точками монтирования, для сервера почти невозможно узнать, какие из каталогов внутри его экспортированных файловых систем используются в качестве точек монтирования его клиентами. Поэтому используется консервативный подход с проходом лишь одного компонента имени пути на один вызов lookup(). Есть несколько случаев, когда файловая система будет знать, что в оставшейся части пути больше нет точек монтирования, и будет проходить оставшуюся часть имени пути.

Сейчас 28 гостей онлайн