- •Глава 11
- •В.Г.Олифер, н.А.Олифер. Сетевые операционные системы. Учебное пособие.-сПб.:бхв-Петербург, 2006.-536с.
- •В.А.Шеховцов. Операційні системи. Підручник .-к.:Виканавча група внv. 2005. 576с.
- •Столлингс в. Операционные системы. М.: Вильямс, 2001. -672с.
- •Раздел 11
- •11.1. Многопроцессорные системы
- •11.1.1. Типы многопроцессорных систем
- •11.1.2. Поддержка многопроцессорной в операционных системах
- •11.1.3. Производительность многопроцессорных систем
- •11.1.4. Планирование в многопроцессорных системах
- •11.1.5. Родство процессора
- •11.1.6. Поддержка многопроцессорности в Linux
- •11.1.7. Поддержка многопроцессорной в Windows xp
- •11.2. Принципы разработки распределенных систем
- •11.2.1. Отдалены вызовы процедур
- •11.2.2. Использование Sun rpc
- •11.2.3. Использование Microsoft rpc
- •11.2.4. Обработка ошибок и координация в распределенных системах
- •11.3. Распределеные файловые системы
- •11.3.1. Организация распределенных файловых систем
- •11.3.2. Файловая система nfs
- •11.3.3. Файловая система Microsoft dfs
- •11.4. Современные архитектуры распределенных систем
- •11.4.1. Кластерные системы
- •11.4.2. Grid-системы
- •Контрольные вопросы и задания
11.2. Принципы разработки распределенных систем
В этом разделе будет речь идти о базовых технологиях разработки распределенных систем.
К ним принадлежат передачи сообщений и отдалены вызовы процедур (RPC).
11.2.1. Отдалены вызовы процедур
RPC отличается от сокетов тем, что в случае использования этой технологии сеть является прозрачной для программиста. Эта прозрачность в том, что код клиентских приложений и серверных процедур, которые взаимодействуют с помощью RPC, в известной мере выглядит так, будто сети нет; фактически его нельзя отличить от кода, который использует локальные процедуры. Покажем, в результате чего удается достичь такой прозрачности.
Заглушки
Основная идея, на которой основываются RPC, заключается в том, что клиент и сервер связаны не прямо, а через заглушки (stubs), — специальные программные модули, ответственные за сетевое взаимодействие. Рассмотрим, какие заглушки принимают участие в вызове отдаленной процедуры.
1. Во время обращения к отдаленной процедуре клиентский процесс использует локальные договоренности о вызове (аналогичные к вызову локальной процедуры), но в действительности обращается к клиентской заглушке (client stub), которая маршализует параметры и пересылает их серверу. Под маршализацией (marshaling) понимают упаковывание данных в формат, пригодный для передачи в сеть (с сетевым порядком байтов и тому подобное), под демаршализацией (demarshaling) - их обратное превращение.
2. На сервере данные принимает серверная заглушка (server stub), демаршализует параметры и вызывает отдаленную процедуру. Она также будет вызвана с локальными договоренностями о вызове, ее код не имеет информации о том, что вызов был отдаленным. После этого серверная заглушка маршализует возвращеные значения и передает их назад клиенту.
3. У клиента возвращеные значения демаршализует клиентская заглушка и передает клиентскому приложению аналогично к данным локальной процедуры.
Основной особенностью заглушек является то, что они имеют те же интерфейсы, что соответствующие процедуры. Клиентская заглушка выглядит для приложения-клиента как локальная процедура с одними и теми же параметрами; серверная заглушка выглядит для отдаленной процедуры как локальный клиент.
Язык IDL
Для автоматизации создания заглушек в RPC используют описание интерфейсов процедур специальным языком описи интерфейсов (Interface Definition Language, IDL).
Каждую процедуру, которую нужно вызывать отдаленно, необходимо описать на IDL, задав имя процедуры, количество и типы параметров, а также тип возвращения.
Файл с IDL-кодом, который содержит объявление таких процедур, обрабатывают IDL-компилятором, который генерирует заглушки для клиента и сервера.
Архитектура отдаленного вызова процедур показана на рис. 11.2.

Рис. 11.2 Отдаленный вызов процедур
Есть разные реализации IDL, которые воплощают общие принципы этого языка.
1. Процедуры на IDL объединяют в интерфейсы. В этом языке под интерфейсом понимают набор заглавий процедур и типов, связанных общим назначением. Интерфейс имеет имя и номер версии. Каждый интерфейс в результате обработки IDL-компилятором превращается в пару заглушек — клиентскую и серверную.
-
IDL является декларативным языком, она предназначена исключительно для описания интерфейсов (фактически это сводится к описанию заглавий процедур и типов данных). Выполняемых операторов в ней нет.
-
Для обеспечения связи между неоднородными системами в IDL должно быть зафиксирован набор базовых типов (например, может быть принято, что int всегда будет длиной 4 байта и тому подобное).
-
Параметры процедур в IDL имеют режимы. Режим параметра определяет направление пересылки соответствующих данных. Для входных параметров данные передают от клиента серверу, для выходных — от сервера клиенту, для параметров смешанного режима — в обе стороны.
