Часто обмен данными между процессами носит ярко выраженный асимметричный характер: один из процессов (процесс-клиент) запрашивает у другого процесса (процесс-сервер) некоторую услугу (сервис) и не продолжает свое выполнение до тех пор, пока эта услуга не будет выполнена и пока процесс-клиент не получит соответствующие результаты. Семантически такой режим взаимодействия процессов эквивалентен вызову процедуры. Поэтому естественно желание оформить его должным образом и синтаксически.
С точки зрения прикладной программы вызов удаленной процедуры (remote procedure call) происходит по следующей схеме:
· процесс
, выполняемый на процессоре
, вызывает процедуру, выполняемую на процессоре
;
· процесс
приостанавливается;
· вызванная процедура выполняется на процессоре
;
· процесс
, продолжает выполняться.
Информация между процессом
и вызываемой процедурой передается через параметры процедуры (как в традиционных языках программирования).
Реализация вызова удаленной процедуры:
· передача процессом-клиентом
параметров процедуры процессу-серверу
(см. рис. 2);
· выполнение процесса-сервера
;
· передача процессом-сервером
результатов процессу-клиенту
(см. рис. 3).
ОС клиентского процессора упаковывает параметры в сообщение и с помощью системного вызова
d отправляет сообщение серверному процессору. ОС серверного процессора с помощью системного вызова
принимает параметры, распаковывает их и передает процессу-серверу.
Аналогично, при передаче процессом-сервером
результатов выполнения процедуры процессу-клиенту
(см. рис. 3) ОС серверного процессора упаковывает результаты в сообщение и с помощью системного вызова
отправляет сообщение клиентскому процессору. ОС клиентского процессора с помощью системного вызова
принимает результаты, распаковывает их и передает процессу-клиенту.
Поскольку в различных компьютерах мультикомпьютера данных могут представляться по-разному (например, часто по-разному представляются числа с плавающей точкой), то одной из основных функций данного механизма обмена сообщениями является автоматическое преобразование форматов данных при взаимодействии процессов, выполняющихся на разнородных компьютерах.
|
Рис. 2. Передача процессом-клиентом Qi параметров процедуры процессу-серверу Qj.
|
Рис. 3. Передача процессом-сервером Qj результатов выполнения процедуры процессу-клиенту Qi.
При идейной простоте изложенной схемы реализация этой схемы сталкивается с рядом проблем.
Во-первых, поскольку процесс-клиент и процесс-сервер находятся в разных адресных пространствах, невозможно использование указателей в качестве параметров. В некоторых случаях эту проблему можно обойти, передавая процессу-серверу не указатель, а сами данные, на которые ссылается этот указатель. Если данные имеют сложную структуру, этот метод практически неработоспособен. Аналогичная ситуация имеет место также и при использовании системных вызовов типа
и
.
Во-вторых, если язык программирования пользовательского процесса не является сильно типизированным, то не всегда ОС процесса-клиента может передать процессу-серверу все необходимые данные. Такая ситуация, например, может иметь место, если количество элементов массива определяется не его описанием, а ограничивается каким-либо специальным символом.
В-третьих, локальная процедура наряду с параметрами, передаваемыми через ее заголовок, может использовать глобальные параметры. Удаленная процедура из-за разных адресных пространств процесса-клиента и процесса-сервера не может использовать глобальные переменные процесса-клиента.
Вызов удаленной процедуры может быть реализован с помощью системных вызовов или библиотечных функций.






