
2.2.
Удаленный вызов процедур 99
Когда сообщение приходит на сервер, заглушка исследует сообщение в поисках
указания на то, какую процедуру следует вызвать, а затем делает соответствую-
щий вызов. Если сервер поддерживает и другие удаленные процедуры, сервер-
ная заглушка должна содержать ргнструкцию типа switch для выбора вызываемой
процедуры в зависимости от первого поля сообщения. Реальный вызов процеду-
ры сервера из серверной заглушки выглядит почти как первоначальный клиент-
ский вызов, если не считать того, что параметрами являются переменные, ини-
циализированные значениями, взятыми из сообщения.
ТакР1м образом, имеет место следующая пошаговая процедура.
1.
Клиент вызрлвает процедуру add.
2.
Клиентская заглушка строит сообщение.
3.
Сообщение отправляется по сети на сервер.
4.
Операционная система сервера передает сообщение серверной заглушке.
5.
Серверная заглушка распаковывает сообщение.
6. Серверная заглушка выполняет локальный вызов процедуры add.
Когда сервер заканчивает работу, управление вновь передается серверной за-
глушке. Она получает результат, переданный сервером, и запаковывает его в со-
общение. Это сообщение отправляется назад, к клиентской заглушке, которая
распаковывает его и возвращает полученное значение клиентской процедуре.
До тех пор пока машины клиента и сервера идентичны, а все параметры и ре-
зультаты имеют скалярный тип (то есть целый, символьный или логический),
эта модель работает абсолютно правильно. Однако в больип1х распределенных
системах обычно присутствуют машины разных типов. Каждая из машин часто
имеет собственное представление чисел, символов и других элементов данных.
Так, в мэйнфреймах IBM используется кодовая таблица EBCDIC, а в персональ-
ных компьютерах той же фирмы
—
ASCII. Вследствие этого, если передать сим-
вольный параметр с клиента на базе IBM PC на мэйнфрейм IBM, используемый
в качестве сервера, по простейшей схеме, показанной на рис. 2.8, сервер поймет
эти символы неправильно.
Сходные проблемы могут обнаружиться при передаче целых чисел (знако-
вый или значащий старший бит) и чисел с плавающей точкой. Вдобавок сущест-
вует значительно более серьезная проблема, состоящая в том, что в некоторых
машинах, таких как Intel Pentium, байты нумеруются справа налево, а в других,
например в Sun SPARC,
—
в обратном направлении. Формат компании Intel на-
зывается
остроконечным
{little endian), а формат SPARC
—
тупоконечным (big
endian),
по аналогии с названиями политрхческих партий из книги «Путешествия
Гулливера», которые в спорах о том, с какой стороны разбивать яйца, дошли до
войны
[108].
Для примера рассмотрим процедуру с двумя параметрами, целым
числом и строкой из четырех символов. Для размещения каждого из параметров
требуется одно 32-битное слово. На рис. 2.9, а показано, как будет выглядеть со-
держащий параметры фрагмент сообщения, построенного клиентской заглуш-
кой, когда клиент работает на компьютере Intel Pentium. Первое слово содержит
целый параметр, в данном случае 5, а второе слово
—
строку
JILL.