Добавил:
По своей натуре перфекционист. Поэтому люблю все аккуратно оформлять и упорядочивать, складывать по полочкам. Вот, не пропадать же добру, нажитому за четыре кропотливых семестра. Тут я выложил все мои ответы, курсовые, отчеты и некоторые ДЗ. Они могут вам помочь для получения зачета или сдачи экзамена. Если чего-то не нашли в папочках, то попытайте удачу в разделе НЕОТСОРТИРОВАННОЕ на моей страничке, там все 4 семестра разложены по папкам. ГРУППА КТ-43-15. Годы обучения 2015-2019. Коллекция будет пополняться. Что ж, удачки :З Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
112
Добавлен:
25.01.2018
Размер:
2.28 Mб
Скачать

сервера, вплоть до указания номера порта, а динамически находят нужный клиенту сервер.

Динамическое связывание требует изменения способа именования сервера. Наиболее гибким является исполь-

зование для этой цели имени RPC-интерфейса, состоящего из двух частей:

-типа интерфейса;

-экземпляра интерфейса.

Тип интерфейса определяет все характеристики интерфейса, кроме его месторасположения. Это те же характеристики, который имеются в описании для IDL-компилятора, например файловая служба определенной версии, включающая процедуры open, close, read, write, и т. п. Часть, описывающая экземпляр интерфейса,

должна точно задавать сетевой адрес сервера, который поддерживает данный интерфейс. Если клиенту безраз-

лично, какой сервер его будет обслуживать, то вторая часть имени интерфейса опускается.

Динамическое связывание иногда называют импортом/экспортом интерфейса: клиент импортирует интерфейс,

а сервер его экспортирует.

В том случае, когда для клиента важен только тип интерфейса, процесс обнаружения требуемого сервера в сети

с экземпляром интерфейса определенного типа может быть построен двумя способами:

- с использованием широковещания;

- с использованием централизованного агента связывания.

Эти два способа характерны для поиска сетевого ресурса любого типа по его имени, они уже рассмат-

ривались в общем виде в подразделе «Способы адресации» раздела «Механизм передачи сообщений в распре-

деленных системах». Первый способ основан на широковещательном распространении по сети серверами RPC

имени своего интерфейса, включая и адрес экземпляра. Применение этого способа позволяет автоматически балансировать нагрузку на несколько серверов, поддерживающий один и тот же интерфейс, — клиент просто

выбирает первое из подходящих ему объявлений.

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

вания, работающего на сервере имен. Сетевой адрес агента связывания (в формате, принятом в данной сети)

должен быть известным адресом как для серверов RPC, так и для клиентов. Если сервер по каким-то причинам не может больше поддерживать определенный RFC-интерфейс, то он должен обратиться к агенту и отменить свою регистрацию. Агент связывания на основании запросов регистрации ведет таблицу текущего наличия в

сети серверов и поддерживаемых ими RFC-интерфейсов.

Клиент RFC для определения адреса сервера, обслуживающего требуемый интерфейс, обращается к агенту связывания с указанием характеристик, задающих тип интерфейса. Если в таблице агента связывания имеются сведения о сервере, поддерживающем такой тип интерфейса, то он возвращает клиенту его сетевой адрес. Кли-

ент затем кэширует эту информацию для того, чтобы при последующих обращениях к процедурам данного

интерфейса не тратить время на обращения к агенту связывания.

Агент связывания может работать в составе общей централизованной справочной службы сети, такой как NDS,

X.500 или LDAP (справочные службы более подробно рассматриваются в следующей главе).

Описанный метод, заключающийся в импорте/экспорте интерфейсов, обладает высокой гибкостью. Например,

может быть несколько серверов, поддерживающих один и тот же интерфейс, и клиенты распределяются по

серверам случайным образом. В рамках этого метода становится возможным периодический опрос серверов,

анализ их работоспособности и, в случае отказа, автоматическое отключение, что повышает общую отказо-

устойчивость системы. Этот метод может также поддерживать аутентификацию клиента. Например, сервер

может определить, что доступ к нему разрешается только клиентам из определенного списка.

Однако у динамического связывания имеются недостатки, например дополнительные накладные расходы (вре-

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

лать стандартным способом, используя распределенную справочную службу (таким свойством обладают

службы NDS, X.500 и LDAP).

Необходимо отметить, что и в тех случаях, когда используется статическое связывание, такая часть адреса, как порт сервера интерфейса (то есть идентификатор процесса, обслуживающего данный интерфейс), определяется клиентом динамически. Эту процедуру поддерживает специальный модуль RPCRuntime, называемый в ОС

UNIX модулем отображения портов (portmapper), а в ОС семейства Windows — локатором RFC (RPC Locator).

Этот модуль работает на каждом сетевом узле, поддерживающем механизм RPC, и доступен по хорошо из-

вестному порту TCP/UDP.

Каждый сервер RPC, обслуживающий определенный интерфейс, при старте обращается к такому модулю с запросом о выделении ему для работы номера порта из динамически распределяемой области (то есть с номе-

ром, большим 1023). Модуль отображения портов выделяет серверу некоторый свободный номер порта и за-

поминает это отображение в своей таблице, связывая порт с типом интерфейса, поддерживаемым сервером.

Клиент RPC, выяснив каким-либо образом сетевой адрес узла, на котором имеется сервер RPC с нужным ин-

терфейсом, предварительно соединяется с модулем отображения портов по хорошо известному порту и запра-

шивает номер порта искомого сервера. Получив ответ, клиент использует данный номер для отправки сообще-

ний- J вызовов удаленных процедур. Механизм очень похож на механизм, лежащий в основе работы агента связывания, но только область его действия ограничивается портом одного компьютера.

85.Основные принципы построения сетевой файловой системы. Модель сетевой файловой службы.

Сетевые файловые системы Принципы построения

Ключевым компонентом любой распределенной системы является файловая система, которая также яв-

ляется в этом случае распределенной. Как и в централизованных системах, в распределенной системе функ-

цией файловой системы является хранение программ и данных и предоставление доступа к ним по мере необ-

ходимости. Распределенная файловая система поддерживается одним или более компьютерами, хранящими файлы. Эти компьютеры, которые позволяют пользователям сети получать доступ к своим файлам, обычно называют файловыми серверами. Файловые серверы отрабатывают запросы на чтение или запись файлов, по-

ступающие от других компьютеров сети, которые в этом случае являются клиентами файловой службы. Каж-

дый посланный запрос проверяется и выполняется, а ответ отсылается обратно. Файловые серверы обычно содержат иерархические файловые системы, каждая из которых имеет корневой каталог и каталоги более низ-

ких уровней. Во многих сетевых файловых системах клиентский компьютер может подсоединять и монтиро-

вать эти файловые системы к своим локальным файловым системам, обеспечивая пользователю удобный до-

ступ к удаленным каталогам и файлам. При этом данные монтируемых файловых систем физически никуда не перемещаются, оставаясь на серверах.

С программной точки зрения распределенная файловая система — это сетевая служба, имеющая типич-

ную структуру, рассмотренную в главе 2 «Назначение и функции операционной системы». Файловая служба включает программы-серверы и программы-клиенты, взаимодействующие с помощью определенного прото-

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

полняется данная программа), которая работает на этом компьютере и обеспечивает совокупность услуг по доступу к файлам и каталогам на удаленном компьютере. Соответственно программу, работающую на клиент-

ском компьютере и обращающуюся к файловому серверу с запросами, называют клиентом файловой системы,

как и компьютер, на котором она работает. Такая неоднозначность терминов «файловый сервер» и «клиент» обычно не вызывает затруднений, так как из контекста, как правило, понятно, о каком программном или аппа-

ратном компоненте сети идет речь.

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

рые предоставляют файловые услуги систем UNIX и Windows соответственно, и пользовательские процессы могут обращаться к подходящему серверу. Кроме того, один компьютер может в одно и то же время предо-

ставлять пользователям сети услуги различных файловых служб, для этого нужно, чтобы на этом компьютере работало несколько процессов, каждый из которых реализовывал бы файловую службу определенного типа.

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

созданием каталогов и управлением ими, добавлением и удалением файлов из каталогов и т. п.

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

полняется, возвращая им результаты. Более того, пользователи даже не должны знать, что файловая система является распределенной. В идеале для пользователя она должна выглядеть так же, как и централизованная файловая система.

Современные сетевые файловые системы пока еще не полностью соответствуют идеалу. В большинстве коммерческих ОС (таких, как ОС семейств UNIX, Windows NT/2000, NetWare) пользователь должен явно ука-

зать имя файлового сервера при доступе к его ресурсам. Большую степень прозрачности демонстрируют сете-

вые файловые системы экспериментальных операционных систем — Amoeba, Mach и Chorus. Тем не менее работы в этом направлении продолжаются и сетевые файловые системы постепенно приближаются к истинно распределенным.

Модель сетевой файловой системы Сетевая файловая система (ФС) в общем случае включает следующие элементы (рис. 10.1):

локальная файловая система;

интерфейс локальной файловой системы;

сервер сетевой файловой системы;

клиент сетевой файловой системы;

интерфейс сетевой файловой системы;

протокол клиент-сервер сетевой файловой системы.

Клиенты сетевой ФС — это программы, которые работают на многочисленных компьютерах, подклю-

ченных к сети. Эти программы обслуживают запросы приложений на доступ к файлам, хранящимся на удален-

ном компьютере. В качестве таких приложений часто выступают графические или символьные оболочки ОС,

такие как Windows Explorer или UNIX shell, а также любые другие пользовательские программы.

Рис. 10.1. Модель сетевой файловой системы Клиент сетевой ФС передает по сети запросы другому программному компоненту — серверу сетевой

ФС, работающему на удаленном компьютере. Сервер, получив запрос, может выполнить его либо самостоя-

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

а тот, в свою очередь, — приложению, обратившемуся с запросом.

Приложения обращаются к клиенту сетевой ФС, используя определенный программный интерфейс, ко-

торый в данном случае является интерфейсом сетевой файловой системы. Этот интерфейс стараются сделать как можно более похожим на интерфейс локальной файловой системы, чтобы соблюсти принцип прозрачно-

сти. При полном совпадении интерфейсов приложение может обращаться к локальным и удаленным файлам и каталогам с помощью одних и тех же системных вызовов, совершенно не принимая во внимание места хране-

ния данных. Например, если на серверах сети используются локальные файловые системы FAT, то интерфейс сетевой файловой системы повторяет системные вызовы FAT.

Клиент и сервер сетевой файловой системы взаимодействуют друг с другом по сети по определенному протоколу. В случае совпадения интерфейсов локальной и сетевой файловых систем этот протокол может быть достаточно простым — в его функции будет входить ретрансляция серверу запросов, принятых клиентом от

приложений, с которыми тот затем будет обращаться к локальной файловой системе. Одним из механизмов,

используемых для этой цели, может быть механизм RPC.

Рассмотрим сетевую файловую систему, построенную на базе локальной файловой системы FAT и ис-

пользующую в качестве протокола клиент-сервер протокол SMB (Server Message Block), который был сов-

местно разработан компаниями Microsoft, Intel и IBM и до сих пор является основой сетевой файловой службы в операционных системах семейства Windows (его последние расширенные версии получили название

Common Internet File System, CIFS).

Как и все протоколы файловых служб, этот протокол работает на прикладном уровне модели OSI. Для передачи по сети своих сообщений протокол SMB использует различные транспортные протоколы. Историче-

ски основным протоколом передачи сообщений SMB был протокол NetBIOS (и его более поздняя реализация

NetBEUI), но сейчас сообщения SMB могут передаваться и с помощью других протоколов, например TCP/UDP

и IPX.

SMB относится к классу протоколов, ориентированных на соединение. Работа протокола начинается с того, что клиент отправляет серверу специальное сообщение с запросом на установление соединения. В про-

цессе установления соединения клиент и сервер обмениваются информацией о себе: они сообщают друг другу,

какой диалект протокола SMB они будут использовать в этом соединении (диалект здесь — определенное под-

множество функций протокола, так как кроме файловых функций SMB поддерживает также доступ к принте-

рам, управление внешними устройствами и некоторые другие). Если сервер готов к установлению соединения,

он отвечает сообщением-подтверждением.

После установления соединения клиент может обращаться к серверу, передавая ему в сообщениях SMB

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

предоставить содержимое каталога, создать и удалить файл, прочитать и записать содержимое файла, устано-

вить атрибуты файла и т. п.

Протокол сетевой файловой системы кроме простой ретрансляции системных файловых вызовов от клиента серверу может выполнять и более сложные функции, учитывающие природу сетевого взаимодействия,

например то, что клиент и сервер работают на разных компьютерах, которые могут отказывать, или что сооб-

щения передаются по ненадежной и вносящей порой большие задержки сетевой среде.

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

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

ным является вопрос, что такое файл? Во многих системах, таких как UNIX и Windows, файл — это не интер-

претируемая последовательность байтов. Значение и структура информации в файле является заботой приклад-

ных программ, операционную систему это не интересует. В ОС мэйнфреймов поддерживаются разные типы логической организации файлов, каждый с различными свойствами. Файл может быть организован как после-

довательность записей, и у операционной системы имеются вызовы, которые позволяют работать на уровне этих записей.

Большинство современных сетевых файловых систем поддерживают определение файла как последо-

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

файла естественным образом отражается на типе сетевого файлового интерфейса, поддерживающего для не-

структурированных файлов чтение любой области в файле, а для структурированных — только записей опре-

деленного формата.

Модифицируемость файлов Важным аспектом файловой модели является возможность модификации файла после его создания. В

большинстве сетевых файловых систем файлы могут модифицироваться, но в некоторых распределенных си-

стемах единственными операциями с файлами являются create (создать) и read (прочитать). Такие файлы назы-

ваются неизменяемыми. Для неизменяемых файлов намного легче осуществить кэширование файла и его ре-

пликацию (тиражирование), так как исключаются все проблемы, связанные с обновлением всех копий файла при его изменении. В файловых системах, работающих с немодифицируемыми файлами, проблемы поддержки многочисленных версий файла, возникающих при его модификации, перекладываются на плечи пользовате-

лей, которые должны давать им имена, отражающие тот факт, что все множество файлов имеет близкое содер-

жание, и в то же время позволяющие различать версии файлов.

Семантика разделения файлов Когда два или более пользователей разделяют один файл, необходимо точно определить семантику чте-

ния и записи, чтобы избежать проблем с интерпретацией результирующих данных файла.

Семантика UNIX. В централизованных многопользовательских операционных системах, разре-

шающих разделение файлов, таких как UNIX (имеется в виду локальная версия этой ОС), обычно определяется,

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

гично, когда операция чтения следует за двумя операциями записи, то читается файл, измененный последней операцией записи. Тем самым система придерживается абсолютного временного упорядочивания всех опера-

ций и всегда возвращает самое последнее значение данных. Если запись осуществляется в открытый многими пользователями файл, то все эти пользователи немедленно видят результат изменения данных файла. Обычно такая модель называется семантикой UNIX. В централизованной системе, где файлы хранятся в единственном экземпляре, ее легко и понять, и реализовать.

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

ляются на файловый сервер, который обрабатывает их строго последовательно. На практике, однако, произво-

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

вера, то он получит неверную копию файла. Одним из способов устранения этого недостатка является немед-

ленный возврат всех изменений в кэшированном файле на сервер. Такой подход хотя и концептуально прост,

но не эффективен. Распределенные файловые системы обычно используют более свободную семантику разде-

ления файлов.

Сеансовая семантика. В соответствии с этой моделью изменения в открытом файле сначала видны только процессу, который модифицирует файл, и только после закрытия файла эти изменения могут

видеть другие процессы. При использовании сеансовой семантики возникает проблема одновременного ис-

пользования одного и того же файла двумя или более клиентами. Одним из решений этой проблемы является принятие правила, в соответствии с которым окончательным является тот вариант, который был закрыт по-

следним. Однако из-за задержек в сети часто оказывается трудно определить, какая из копий файла была за-

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

ций над файлом не является детерминированным.

Семантика неизменяемых файлов. Следующий подход к разделению файлов заключается в том,

чтобы сделать все файлы неизменяемыми. Тогда файл нельзя открыть для записи, а можно выполнять только операции create (создать) и read (читать). Тогда для изменения файла остается только возможность создать полностью новый файл и поместить его в каталог под новым именем. Следовательно, хотя файл и нельзя мо-

дифицировать, его можно заменить (автоматически) новым файлом. Таким образом, проблема, связанная с од-

новременным использованием файла, для файловой системы просто исчезнет, но с ней столкнутся пользова-

тели, которые будут вынуждены вести учет имен своих копий модифицированного файла.

Транзакционная семантика. Четвертый способ работы с разделяемыми файлами в распределен-

ных системах — это использование механизма неделимых транзакций, достаточно подробно описанного в главе 8 «Дополнительные возможности файловых систем».

Контроль доступа

С каждым разделяемым файлом обычно связан список управления доступом (Access Control List, ACL),

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

стема использует этот механизм и при доступе по сети. Если же механизм защиты в локальной файловой си-

стеме отсутствует, то сетевой файловой системе приходится поддерживать его самостоятельно, иногда — упрощенным способом, защищая разделяемый каталог и входящие в него файлы и подкаталоги как единое целое, В Windows NT/2000 существуют два механизма защиты — на уровне разделяемых каталогов и на уровне локальных каталогов и файлов. Последний работает только в том случае, когда в качестве локальной файловой системы используется система NTFS, поддерживающая механизм ACL. Механизм защиты разделяемых ката-

логов нужен для того, чтобы защищать данные, хранящиеся в локальной файловой системе FAT, не имеющей механизмов защиты. В том случае, когда работают оба уровня защиты, у пользователей и администраторов могут иногда возникать некоторые логические сложности, связанные с определением реальных прав доступа как комбинации нескольких правил.

Единица доступа Файловый интерфейс может быть отнесен к одному из двух типов в зависимости от того, поддерживает

ли он модель загрузки-выгрузки или модель удаленного доступа. В модели загрузки-выгрузки пользователю предлагаются средства чтения или записи файла целиком. Эта модель предполагает следующую схему обра-

ботки файла: чтение файла с сервера на машину клиента, обработка файла на машине клиента и запись обнов-

ленного файла на сервер. Типичным представителем этого вида файлового интерфейса является служба FTP,

пользователь которой должен применить команду get file_ame для перемещения файла с сервера на клиентский компьютер и команду put file_name для возвращения файла на сервер.

Преимуществом этой модели является ее концептуальная простота. Кроме того, передача файла цели-

ком очень эффективна в отношении объема создаваемого трафика. Главным недостатком этой модели явля-

ются высокие требования к объему диска клиента, который должен вместить любой файл, хранящийся на сер-

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

ствуют реализации, выполняющие такую работу полностью самостоятельно при первом обращении к удален-

ному файлу (при этом, правда, необходимо решить вопрос, каким образом пользователь может задать обраще-

ние к удаленному файлу).

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

имуществом такого подхода являются низкие требования к дисковому пространству на клиентских машинах,

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

стемы монтируются в общее с локальной системой дерево (или его часть, что происходит при отображении удаленной системы на букву логического диска).

Модели удаленного доступа могут использовать различные наименьшие единицы перемещения части файла. Наиболее популярны такие единицы, как байт, блок или запись. Последний вид единицы может приме-

няться только в том случае, когда локальная файловая система поддерживает структурированные файлы.

87. Размещение клиентов и серверов по компьютерам и в операционной системе

При организации в сети взаимодействия между ОС по концепции клиент-сервер, имеются различные способы распределения серверной и клиентской частей между компьютерами.

1.В некоторых файловых системах (например, NFS или файловых системах Windows 95/98/NT/2000) на всех компьютерах сети работает одно и то же базовое программное обеспечение, включающее как клиентскую, так и серверную части, так что любой компьютер, который захочет предложить услуги файловой службы, может это сделать.

2.В некоторых случаях выпускается так называемая серверная версия ОС (например, Windows NT Server), которая использует то же программное обеспечение файловой службы, но только позволяющее (за счет выделения файловому серверу большего количества ресурсов (в основном оперативной памяти) обслуживать одновременно большее число пользователей, чем версии файлового сервера для клиентских компьютеров.

3.В других системах файловый сервер — это специализированный компонент серверной ОС, отсутствующий в клиентских компьютерах. По такому пути пошли разработчики сетевой ОС NetWare, создав операционную систему, оптимизированную для работы в качестве файлового сервера, но не поддерживающую работу в качестве клиентской ОС.

Для повышения эффективности работы файловый сервер и клиент обычно являются модулями ядра ОС, работающими в привилегированном режиме. В современных ОС эти компоненты оформляются как высокоуровневые драйверы, работающие в составе подсистемы ввода-вывода.

88.Файловые серверы типа stateful и stateless.

Файловый сервер может быть реализован по одной из двух схем: с запоминанием данных о последовательности файловых операций клиента(stateful) и без запоминания таких данных(stateless).

Серверы stateful работают по схеме, обычной для любой локальной файловой службы. Такой сервер поддерживает тот же набор вызовов, что и локальная система, то есть вызовы open, read, write, seek и close. Открывая файлы по вызову open, переданному по сети клиентом, сервер stateful должен запоминать, какие файлы открыл каждый пользователь в своей внутренней системной таблице (рис. 10.5). Обычно при открытии файла клиентскому приложению возвращается по сети дескриптор файла fd или другое число, которое используется при последующих вызовах для идентификации файла. При поступлении вызова read, write или seek сервер использует дескриптор файла для определения, какой файл нужен. В этой таблице хранится также значение указателя на текущую позицию в файле, относительно которой выполняется операция чтения или записи. Таблица, отображающая дескрипторы файлов на сами файлы, является хранилищем информации о состоянии клиентов.

Рис. 10.5. Сервер с сохранением состояния (stateful)

Для сервера stateless каждый запрос должен содержать всю информацию (полное имя файла, смещение в файле и т. п.), необходимую серверу для выполнения требуемой операции. Очевидно, что эта информация увеличивает длину сообщения и время, которое тратит сервер на локальное открытие файла каждый раз, когда над ним производится очередная операция чтения или записи. Серверы, работающее по схеме stateless, не поддерживают в протоколе обмена с клиентами таких операций, как открытие (open) и закрытие (close) файлов. Принципиально набор команд, предоставляемый клиенту сервером stateless, может состоять только из двух команд: read и write (рис. 10.6). Эти команды должны передавать в своих аргументах всю необходимую для сервера информацию — имя файла, смещение от начала файла и количество читаемых или записываемых байт данных.

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

Рис. 10.6. Сервер без сохранения состояния (stateless)

Основным последствием переноса таблиц открытых файлов на клиентов при применении серверов stateless является реакция файловой службы на отказ сервера. При отказе сервера stateful теряются все его таблицы, и после перезагрузки неизвестно, какие файлы открыл каждый пользователь. Последовательные попытки провести операции чтения или записи с открытыми файлами будут безуспешными. Серверы stateless в этом плане являются более отказоустойчивыми, позволяя клиентам продолжать операции с открытыми файлами, и это является основным аргументом в пользу их применения. Платой за отказоустойчивость может быть скорость

работы сервера, так как ему приходится выполнять больше операций с файлами. Кроме того, применение серверов stateless затрудняет реализацию блокировок файлов, так как информацию о блокировке файла одним из пользователей необходимо запоминать на всех клиентах файлового сервера. Преимущества каждого из подходов можно обобщить следующим образом.

Серверы stateless:

отказоустойчивы;

не нужны вызовы open/close;

меньше памяти сервера расходуется на таблицы; нет ограничений на число открытых файлов; отказ клиента не создает проблем для сервера.

Серверы stateful:

более короткие сообщения при запросах; лучше производительность; возможно опережающее чтение; возможна блокировка файлов.

89. Место расположения кэша сетевой файловой системы. Способы распространения модификаций. Проверка достоверности кэша.

Схемы кэширования в сети отличаются по трем вопросам: месту расположения кэша; способу распространения модификаций; проверке достоверности кэша.

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

Место расположения кэша

Имеются три места для хранения кэшируемых файлов и их частей: память сервера, диск клиента и память клиента.

Память сервера практически всегда используется для кэширования файлов. Файловый сервер может использовать для кэширования своих файлов существующий механизм локального кэша операционной системы. Однако при кэшировании только в памяти сервера скорость доступа по-прежнему снижают задержки, вносимые сетью, и загруженность процессора сервера.

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

Кэширование в оперативной памяти клиента позволяет ускорить доступ к данным, но ограничивает размер данных объемом кэша.

Способы распространения модификаций

Существование в сети нескольких копий файла в кэшах клиентов порождает проблему согласования копий.

Одним из путей решения проблемы согласования является использование алгоритма сквозной записи. Когда кэшируемый элемент (файл или блок) модифицируется, новое значение записывается в кэш и одновременно посылается на сервер для обновления главной копии файла (семантика в стиле UNIX).