Применение дескрипторов вместо составных Имен файлов
Чтобы понять, с чем связана необходимость применения дескрипторов, рассмотрим, какие имена файлов используются клиентами в удаленной иерархии каталогов. Напомним, что система NFS требует, чтобы интерпретация всех составных имен файлов выполнялась клиентом, поскольку это позволяет не учитывать в клиентских программах синтаксис составных имен файлов сервера и обеспечить доступ к иерархическим файловым системам с разнотипных компьютеров. В результате этого исключается возможность использовать в клиентской программе полное составное имя для обозначения файла при передаче запроса на выполнение операции с этим файлом. Вместо этого клиентская программа должна получить дескриптор, который может применяться для ссылки на файл.
Возможность получения от сервера NFS не только дескриптора файла, но и дескриптора каталога позволяет в клиентской программе прослеживать путь в иерархии каталогов сервера. Чтобы понять, с чем это связано, напомним, что дистанционное монтирование может выполняться в любой точке иерархии каталогов. Следовательно, поиск NFS должен быть объединен с обычным поиском в файловой системе. При указании файла в приложении должен быть указан полный составной путь. В операционной системе для преобразования составного имени в имя файла на внешнем устройстве используется обычный алгоритм: поиск начинается с корня файловой системы и рассматривается каждый компонент составного имени. После достижения точки дистанционного монтирования локальная операционная система передает управление клиенту NFS. Поскольку остальные компоненты составного имени относятся к каталогам, находящимся на удаленном компьютере, клиентская программа NFS не может выполнить поиск этих каталогов непосредственно. Вместо этого для поиска отдёльного компонента клиент должен обратиться к соответствующему серверу NFS и получить дескриптор. Затем этот дескриптор применяется для передачи серверу запроса на выполнение поиска в каталоге. На рис. 24.8 показано, какими сообщениями обмениваются клиент и сервер в процессе поиска клиентом файла с составным именем /a/b/с в иерархии каталогов сервера. На этом рисунке дескриптор файла или каталога с именем х обозначен как Нх, а символом "/" обозначен корневой каталог и разделитель компонентов, используемый клиентом. На практике для получения дескриптора корневого каталога предусмотрен отдельный протокол.
Как показано на этом рисунке, сервер возвращает дескриптор для каждого каталога в процессе прохождения по компонентам составного имени. Клиент использует каждый дескриптор в очередном дистанционном вызове процедуры. Например, после получения дескриптора каталога а клиент снова передает этот дескриптор серверу и запрашивает, чтобы сервер выполнил поиск подкаталога b в каталоге а. Клиент не может указать имя этого подкаталога в форме /а/b, так же как не может указать имя каталога верхнего уровня в форме /а, поскольку не имеет информации о том, какой синтаксис составных имен при¬меняется на сервере.