Трансляция имени пути требует ряда взаимодействий между интерфейсом vnode и нижележащими файловыми системами. Процесс трансляции имени пути проходит следующим образом.
1. Имя пути для трансляции копируется из процесса пользователя или, для запроса удаленной файловой системы, извлекается из сетевого буфера.
2. Определяется начальная точка имени пути либо как корневой каталог, либо как текущий каталог. vnode для соответствующего каталога становится каталогам поиска (lookup directory), использующимся на следующем шаге.
3. Уровень vnode вызывает специфическую операцию файловой системы lookup() и передает ей оставшиеся компоненты имени пути и текущий каталог поиска. Обычно нижележащая файловая система будет искать в каталоге поиска следующий компонент имени пути и возвратит получившийся vnode (или ошибку, если имя на самом деле не существует).
4. Если возвращена ошибка, верхний уровень возвращает ошибку. Если имя пути исчерпано, поиск имени пути сделан и возвращенный vnode является результатом поиска. Если имя пути не исчерпано, а возвращенный vnode не является каталогом, тогда уровень vnode возвращает ошибку «это не каталог». Если ошибок не было, верхний уровень проверяет, не является ли возвращенный каталог точкой монтирования другой файловой системы. Если да, тогда каталог поиска становится смонтированной файловой системой; в противном случае каталог поиска становится vnode, возвращенным нижележащим уровнем. Затем поиск продолжается с шага 3.
Хотя вызов через интерфейс vnode для каждого компонента имени пути может показаться неэффективным, это обычно необходимо. Причина в том, что нижележащая файловая система не знает, какие каталоги использовались в качестве точек монтирования. Поскольку точка монтирования перенаправит поиск в новую файловую систему, важно, чтобы текущая файловая система не продолжила поиск после смонтированного каталога. Хотя локальная файловая система могла бы знать о том, какие каталоги являются точками монтирования, для сервера почти невозможно узнать, какие из каталогов внутри его экспортированных файловых систем используются в качестве точек монтирования его клиентами. Поэтому используется консервативный подход с проходом лишь одного компонента имени пути на один вызов lookup(). Есть несколько случаев, когда файловая система будет знать, что в оставшейся части пути больше нет точек монтирования, и будет проходить оставшуюся часть имени пути.
- 16/11/2010 03:20 - Службы экспортированных файловых систем
- 14/11/2010 09:58 - Операции vnode
- 12/11/2010 12:38 - Содержимое vnode
- 10/11/2010 06:57 - Интерфейс виртуальной файловой системы
- 09/11/2010 19:30 - Перемещение данных внутри ядра
- 09/11/2010 18:56 - Реализация select