Вызов удаленной процедуры

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

С точки зрения прикладной программы вызов удаленной процедуры (remote procedure call) происходит по следующей схеме:

· процесс , выполняемый на процессоре , вызывает процедуру, выполняемую на процессоре ;

· процесс приостанавливается;

· вызванная процедура выполняется на процессоре ;

· процесс , продолжает выполняться.

Информация между процессом и вызываемой процедурой передается через параметры процедуры (как в традиционных языках программирования).

Реализация вызова удаленной процедуры:

· передача процессом-клиентом параметров процедуры процессу-серверу (см. рис. 2);

· выполнение процесса-сервера ;

· передача процессом-сервером результатов процессу-клиенту (см. рис. 3).

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

Аналогично, при передаче процессом-сервером результатов выполнения процедуры процессу-клиенту (см. рис. 3) ОС серверного процессора упаковывает результаты в сообщение и с помощью системного вызова отправляет сообщение клиентскому процессору. ОС клиентского процессора с помощью системного вызова принимает результаты, распаковывает их и передает процессу-клиенту.

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

Рис. 2. Передача процессом-клиентом Qi параметров процедуры процессу-серверу Qj.

Рис. 3. Передача процессом-сервером Qj результатов выполнения процедуры процессу-клиенту Qi.

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

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

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

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: