Клиент NFS
В базирующихся на UNIX системах,
подобных Solaris, работа подсистемы
клиента NFS эквивалентна работе
дисковой подсистемы, а именно, она
обеспечивает сервис менеджеру
виртуальной памяти и, в частности,
файловой системе на той же самой
основе, что и дисковый сервис, за
исключением того, что этот сервис
осуществляется с привлечением
сети. Это может показаться
очевидным, но имеет определенное
воздействие на работу системы NFS
клиент/сервер. В частности,
менеджер виртуальной памяти
располагается между приложениями и
клиентом NFS. Выполняемые
приложениями обращения к файловой
системе кэшируются системой
виртуальной памяти клиента,
сокращая требования клиента к
вводу/выводу. Это можно увидеть на
рисунке 4.5. Для большинства
приложений больший объем памяти на
клиенте приводит к меньшей
нагрузке на сервер и более высокой
общей (т.е. клиент/сервер)
производительности системы. Это
особенно справедливо для
бездисковых клиентов, которые
вынуждены использовать NFS в
качестве внешнего запоминающего
устройства для анонимной памяти.
Рис. 4.5. Взаимодействие
между приложением, файловой
системой виртуальной памяти и NFS
Работа механизмов кэширования
системы виртуальной памяти
задерживает, а иногда и полностью
отменяет работу NFS. Например,
рассмотрим бездисковую рабочую
станцию, выполняющую 1-2-3. Если и
данные, и двоичные коды приложения
размещаются удаленно, система
должна будет, как и требуется,
загрузить в страницы памяти
выполняемые двоичные коды 1-2-3 с
помощью NFS. Затем с помощью NFS в
память будут загружены данные. Для
большинства файлов 1-2-3 на типично
сконфигурированной рабочей
станции данные будут кэшироваться
в памяти и оставаться там в течение
значительного времени (скорее
минуты, а не секунды). Если
открывается и остается открытым
временный файл, то само открытие
файла выполняется немедленно как
на клиенте, так и на сервере, но все
обновления содержимого файла
обычно кэшируются на некоторое
время в клиенте перед передачей на
сервер. В соответствии с семантикой
UNIX-файла, когда файл закрывается
все изменения должны быть записаны
на внешнее запоминающее
устройство, в данном случае на
сервер NFS. В альтернативном
варианте кэшированные записи могут
записываться на внешнее
запоминающее устройство с помощью
демонов fsflush (Solaris 2.x) или udpated (Solaris
1.x). Как и в случае обычного
дискового ввода/вывода,
кэшированные данные ввода/вывода NFS
остаются в памяти до тех пор, пока
память не потребуется для
каких-либо других целей.
Когда операция записи выдана в
сервер, он должен зафиксировать эти
данные в стабильной памяти перед
последующей передачей. Однако на
клиенте все происходит несколько
иначе. Если снова происходит
обращение к кэшированным данным,
например, если в нашем примере
снова обрабатываются некоторые
текстовые страницы 1-2-3, то вместо
выдачи запросов к серверу,
обращение удовлетворяется прямо из
виртуальной памяти клиента.
Конечно когда клиенту не хватает
памяти, для того чтобы выделить
пространство для новых данных
модифицированные страницы быстро
записываются обратно на сервер, а
немодифицированные страницы
просто исключаются.
[Предыдущая глава]
[Оглавление] [Следующая
глава]
|