Лекция: Протокол NFS

Этот протокол определяет набор RPC-запросов, которые реализуют операции с отдаленными файлами и каталогами

Поиск файла в каталоге — LOOKUP, чтение набора элементов каталога — READDIR, создание и исключение файлов и каталогов — CREATE, REMOVE, MKDIR, RMDIR, чтение и записывание файлов — READ и WRITE, работа с атрибутами файлов — GETATTR, SETATTR).

Среди этих NFS-запросов, однако, нет аналогов системных вызовов ореп() и close(). Это отображает фундаментальное свойство NFS-серверов — они не хранят состояния между обращениями клиентов. Такой подход используют из-за опасности потери состояния в случае выхода сервера из строя (в этом случае последующее использование открытых файлов станет невозможным).

То, что NFS-протокол не хранит состояния, определяет две важны характеристики запросов, которые входят у него.

1. NFS-запросы являются независимыми. Всю информацию, необходимую для выполнения такого запроса, нужно передавать в него как параметры. Например, запрос WRITE должен принимать как параметры уникальный идентификатор файла и сдвиг внутри файла.

2. Большинство NFS-запросов должны быть идемпотентными. Это значит, что NFS-клиент может отослать серверу один и тот же запрос несколько раз, при этом общий результат их выполнения должен остаться тем самым. Например, чтение дискового блока из файла (запрос READ) является идемпотентным: в результате выполнения операции возвращаются те же данные независимо от того, сколько раз она была повторена.

Не все запросы должны иметь свойство идемпотентности. Например, повторное выполнение запроса REMOVE будет приводить к попытке исключения отсутствующего файла. Для решения этой проблемы современные реализации NFS поддерживают специальный кэш повторных запросов, в котором хранят информацию о запросах, выполненных в последнее время. Если новый запрос совпадает с каким-то запросом из этого кэша, его не выполняют.

Протокол NFS — это реализация протокола запроса-справки. Если клиент не получит подтверждения выполнения запроса к исчерпанию времени ожидания, он пересылает тот же запрос повторно. Это повторяют до тех пор, пока запрос не будет выполнен (при этом время ожидания подтверждения с каждой новой попыткой удваивают), после чего клиент продолжает свою работу, будто и ничего не случилось.

Если сервер выйдет из строя, клиент будет повторять запросы в цикле и продолжать работу не сможет. Способ завершения цикла задают во время монтирования каталога. В случае жесткого монтирования (hard mount) цикл будет длиться бесконечно (он может быть прерван только после возобновления работы сервера), в случае мягкого монтирования (soft mount) цикл перерывают по окончании некоторое время (обычно нескольких минут), а клиенту возвращают ошибку. За умалчиванием используют жесткое монтирование.

 

еще рефераты
Еще работы по информатике