WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 | 3 | 4 |
ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ РФ ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Распределенные вычисления:

технология Microsoft RPC Учебное пособиепо специальности 230201 (071900) «Информационные системы и технологии» ДС.09 Часть 1 ВОРОНЕЖ 2005 2 Утверждено Научно-методическим советом Воронежского университета Протокол № 12 от 18.02.2005 г.

Составитель Фертиков В.В.

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

Рекомендуется для использования студентами 4 курса дневного отделения в качествеучебных материалов на практических занятиях по курсу «Распределенные системы вычислений».

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

Стратегическиеархитектуры каждого крупного системного производителя базируются сейчас на той или иной форме распределенной вычислительной среды (Distributed Computing Environment – DCE). Ключом к пониманию выгоды такой архитектуры является прозрачность. Пользователи не должны тратить свое время на попытки выяснить, где находится тот или иной ресурс, а разработчики недолжны писать коды для своих приложений, использующиеместоположениев сети.

Хорошо известный механизм для реализации распределенных вычислений, вызов удаленных процедур (Remote Procedure Call – RPC), расширяет традиционную модель программирования – вызов процедуры – для использования в сети. RPC может составлять основу распределенных вычислений. В каждом вызовеудаленной процедуры участвуют двестороны: активный клиент, который отправляет запрос вызовапроцедуры на сервер, и сервер, который отправляет клиенту ответ. Следует иметь ввиду, что термины «клиент» и «сервер» в данном случае относятся к определенной транзакции. Конкретное программное обеспечение (процесс или программа) могут работать как вроли клиента, так и вроли сервера. Наибольшая эффективность использования RPC достигается в тех приложениях, в которых существует интерактивная связь между удаленными компонентами с небольшим временем ответов и относительно малым количеством передаваемых данных. Такие приложения называются RPCориентированными.

Характерными чертами вызовалокальных процедур являются асимметричность (то есть одна из взаимодействующих сторон является инициатором) и синхронность (то есть выполнениевызывающей процедуры приостанавливается с момента выдачи запроса и возобновляется только после возврата из вызываемой процедуры). Подобными свойствами обладает и удаленный вызов:

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

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

Идея, положенная воснову RPC, состоитв том, чтобы сделать вызов удаленной процедуры выглядящим по возможности так же, как и вызов локальной процедуры. Другими словами – сделать RPC прозрачным: вызывающей процедуре нетребуется знать, что вызываемая процедура находится на другой машине и наоборот. Реализация удаленных вызовов существенно сложнее реализа, ции вызовов локальных процедур. Начнем с того, что поскольку вызывающая и вызываемая процедуры выполняются на разных машинах, то они имеют разные адресные пространстваи это создает проблемы при передачепараметров и ре, зультатов, особенно если машины неидентичны. Так как RPC неможет рассчитывать на разделяемую память, то это означает, что параметры RPC недолжны содержать указателей на ячейки нестековой памяти и что значения параметров должны копироваться с одного компьютера на другой. Следующим отличием RPC от локального вызоваявляется то, что он обязательно использует нижележащую систему связи, однако это недолжно быть явно видно ни в определении процедур, ни в самих процедурах. Удаленность вносит дополнительные проблемы. Выполнениевызывающей программы и вызываемой локальной процедуры в одной машинереализуется в рамках единого процесса. Но в реализации RPC участвуют как минимум двапроцесса – по одному в каждой машине В.



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

Технология RPC решает эти и некоторые другиепроблемы, достигая прозрачности путем включения в процесс взаимодействия клиента и сервера специальных программных компонентов, стабов (stub - заглушка). Взаимодействиепрограммных компонентов при выполнении удаленного вызовапроцедуры иллюстрируется рис. 1. Когда вызываемая процедура действительно является удаленной, в библиотеку помещается вместо локальной процедуры другая версия процедуры, называемая клиентским стабом. Задача заглушки – принять аргументы, предназначаемые удаленной процедуре, преобразовать их в некий стандартный формат и сформировать сетевой запрос. Упаковка аргументов и созданиесетевого запроса называется сборкой (marshalling).

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

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

Клиентмашина Сервер-машина вызов вызов Процесс- Стаб Стаб Процедура клиент клиента сервера результат результат Ядро клиента Ядро сервера сообщениевызов сообщениерезультат Рис. 1. Взаимодействиепрограммных компонентов На сторонесервера поступающиебиты помещаются принимающей аппаратурой либо во встроенный буфер, либо воперативную память. Когда вся информация будет получена, генерируется прерывание Обработчик прерывания.

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

Теперь начинает работу серверный стаб Он распаковывает параметры и.

помещает их соответствующим образом в стек. Извлечение (unmarshalling) может включать необходимые преобразования (например, изменения порядка расположения байтов). Когда всеготово, выполняется вызов настоящей процедуры-сервера, которой адресован запрос клиента, с передачей ей полученных по сети аргументов. После выполнения процедуры сервер передает результаты клиенту. Для этого выполняются всеописанные выше этапы, только в обратном порядке: стабсервера преобразует возвращенные процедурой значения, формируя сетевое сообщениеотклик, который передается по сети системе, от которой пришел запрос. Операционная система передает полученное сообщение стабу клиента, который, после необходимого преобразования, передает значения (являющиеся значениями, возвращенными удаленной процедурой) клиенту, воспринимающему это как нормальный возврат из процедуры. Рис. 2 демонстрирует описанные этапы выполнения RPC-вызова.

Рис. 2. Этапы выполнения процедуры RPC Итак, с точки зрения клиента, он производитвызов удаленной процедуры, как он это сделал бы для локальной. То же самое можно сказать и о сервере:

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

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





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

Реализация RPC фирмы Microsoft Microsoft Remote Procedure Call (MS RPC) для языков программирования C и C++ представляет совокупность трех моделей программирования распределенных вычислений: обычная модель разработки приложений на C путем написания процедур и библиотек; модель, которая использует мощные компьютеры в качестве сетевых серверов, выполняющих специфические задачи для своих клиентов; и модель клиентсервер, в которой клиентобычно управляет интерфейсом пользователя, в то время как сервер занимается выборкой, манипулированием и хранением данных. Выделим основные их особенности.

Программная модель.

Язык C поддерживает процедурно-ориентированное программирование.

Все процедурно-ориентированные языки обеспечивают простые механизмы определения и описания процедур. Например, ANSI стандарт прототипа функции C – конструкция, используемая для определения имени процедуры, типа возвращаемого результата (если есть), а также числа, последовательности, и типов параметров. Использованиефункционального прототипа – формальный способ определить интерфейс между процедурами. Далее термин «процедура» используется как синоним термина «подпрограмма» для обозначения любой последовательности компьютерных команд, выполняющих функциональную цель. Термин «функция» обозначает процедуру, которая возвращает значение.

Связанные процедуры часто группируются в библиотеках. Так, библиотека может включать набор процедур, которые выполняют задачи в какой-либо общей области, например, математическиеоперации с плавающей запятой, форматируемый ввод / вывод, сетевые функции. Библиотека процедур – следующий уровень упаковки, облегчающий разработку прикладных программ. Библиотеки могут разделяться многими прикладными программами. Библиотеки, разработанные на C, обычно сопровождаются файлами заголовков. Каждая программа, использующая библиотеку, компилируется с файлами заголовков, которые формально определяют интерфейс к процедурам библиотеки.

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

Модель клиент-сервер.

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

Сетевые системы поддерживают разработку приложений клиентсервер с использованием средств межпроцессных взаимодействий (interprocess communication – IPC), которые позволяют клиенту и серверу связываться и координировать их работу. Например, клиентможет использовать механизм IPC, чтобы послать код операции и данные на сервер, запрашивая вызов специфической процедуры. Сервер получает и декодирует запрос, затем вызывает соответствующую процедуру, выполняет всевычисления, необходимые для удовлетворения запроса, затем возвращает результат пользователю. Приложения клиентсервер обычно разрабатываются с целью минимизации количествапереда- ваемых по сети данных. В дополнениеко всем возможным ошибкам, которые могут происходить на одиночном компьютере, сеть имеет и собственные условия возникновения ошибок. Например, соединениеможет быть потеряно, сервер может исчезнуть из сети, сетевая службабезопасности может отвергнуть доступ к ресурсам системы, пользователи могут конкурировать при использовании ресурсов. Итак, при написании приложения клиентсервер необходимо обеспечить уровень кода, который управлял бы сетевой связью с обработкой всевозможные условий возникновения ошибок. Преимущество использования Microsoft RPC в том, что инструментальные средства RPC сами обеспечивают этот уровень: RPC почти устраняет потребность писать специфический для сети код. Инструментальные средства RPC управляет многими деталями в отношении сетевых протоколов и связи, позволяя разработчику сосредоточиться на деталях приложения.

Модель сервера-вычислителя.

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

Pages:     || 2 | 3 | 4 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.