Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Олифер. Сетевые операционные системы.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
16.5 Mб
Скачать

Особенности реализации rpc на примере систем Sun rpc и dce rpc

Рассмотрим особенности реализации RPC на примере двух широко распространенных систем удаленного вызова процедур: Sun RPC и DCE RPC. Сист­ма Sun RPC является продуктом компании Sun Microsystems и работает во всех сетевых операционных системах этой компании — SunOS, Solaris, а система DCE RPC — это стандарт консорциума Open Software Foundation для распреде­ленной вычислительной среды (Distributed Computing Environment, DCE). Реализации DCE RPC доступны сегодня для многих сетевых ОС, кроме того, на основе стандарта DCE RPC разработана система Microsoft RPC, применяющаяся в популярных ОС семейства Windows. К сожалению, реализации Sun RPC и DCE RPC несовместимы друг с другом, более того, нет гарантий, что различные реализации RPC, в основе которых лежит стандарт DCE RPC, смогут совместно работать в гетерогенной сети, так как стандарт DCE определяет только базовые свойства механизма удаленного вызова процедур, а каждая реализация добавляет к стандарту большое количество собственных дополнительных функций.

Sun RPC

Система Sun RPC позволяет автоматически генерировать клиентский и серверный стабы — в том случае, если RPC-интерфейс описан на языке IDL, называемом RPC Language (RPCL). Язык RPCL является расширением языка Sun XDR (external Data Representation), который был разработан для системно-независимого представления внешних данных в гетерогенной среде. XDR-представление данных по умолчанию используется в Sun RPC при передаче аргументов и результатов между RPC-клиентом и RPC-сервером.

Механизм Sun RPC обладает некоторыми достаточно жесткими ограничениями.

Одним из них является ограничение на аргументы и результаты удаленных процедур — процедура может иметь только один аргумент и вырабатывать только один результат. Для преодоления этого ограничения в качестве аргу­мента и результата обычно используется структура данных.

Следующий пример описания интерфейса файловой службы иллюстрирует эту особенность:

Интерфейс однозначно идентифицируется номером программы (FILE_ SERVICE_2 = 0x20000000) и номером версии (FILE_SERVICE_VERS = 1), а проце­дуры внутри интерфейса — номерами процедур, READ — номером 1 и WRITE — номером 2.

Структура readargs позволяет передать процедуре READ три аргумента — имя файла, позицию (смещение) в файле, с которой нужно начать чтение данных, и количество считываемых байтов. Структура Data позволяет вызывающей процедуре получить результат чтения в массиве buffer и узнать количество реально считанных байтов с помощью переменной n. Аналогично используются структуры writeargs и Data в процедуре записи WRITE.

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

Механизм Sun RPC не поддерживает динамического связывания с сервером с помощью агента связывания. Клиент должен явно указывать сетевой адрес сервера, а для получения номера порта он должен обратиться к модулю отобра­жения портов, работающему на узле сервера. Для взаимодействия с этим моду­лем система Sub RPC предоставляет в распоряжение клиента системный вызов сlnt_cгеatе, имеющий следующий синтаксис:

client_handle = clnt_create(server_host_name, interface_name.

interface_version, protocol)

Аргумент server_host_name представляет собой имя (символьное DNS-имя или IP-адрес узла, на котором работает RPC-сервер), аргументы interface_ name и interface_version задают номер и версию интерфейса, а аргумент protocol указывает на один из двух транспортных протоколов стека TCP/IP — TCP или UDP. Жесткая ориентация только на один стек коммуникационных протоколов, а именно стек TCP/IP, — еще одно ограничение Sun RPC. У компании Sun существует также протокольно-независимая версия системы удален­ного вызова процедур — TI-RPC (Transport-Independent RPC), но она менее распространена.

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

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

Еще одним ограничением Sun RPC является максимальный размер сообще­ния в 8 Кбайт при использовании протокола UDP (применение протокола TCP не накладывает таких ограничений в силу особенности его интерфейса с вышележащими протоколами, который позволяет передавать непрерывный поток байтов в течение периода существования ТСР-соединения).

DCE RPC

Служба DCE RPC обладает рядом функциональных преимуществ по сравнению с Sun RPC. Она поддерживает динамическое связывание клиентов и серверов, для чего используется справочная служба среды DCE — служба Cell Directory Service (CDS). Каждый RPC-сервер при старте регистрирует свой сетевой адрес и уникальный идентификатор интерфейса на CDS-сервере. Кроме того, на каждом узле, поддерживающем RPC, работает процесс rpcd, который выполняет функции по отображению RPC-сервера на подходящий локальный адрес процесса (например, порт TCP/UDP, если сервер работает на компьютере, поддерживающем стек TCP/IP). Служба DCE RPC является транспортно-независимой, что позволяет ей работать на разных платформах и в различных сетях.

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

Выводы

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

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

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

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

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

  • Основными характеристиками коммуникационных примитивов являются:

  1. способ адресации;

  2. наличие синхронизации;

  3. О способ буферизации;

  4. степень надежности доставки.

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

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