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