Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Т2. Связь_Таненбаум_СРС_ПРИС.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.59 Mб
Скачать

2.2. Удаленный вызов процедур 97

в ызывает процедуру сервера. С точки зрения сервера это воспринимается как прямой вызов с клиента — параметры и адрес возврата находятся в стеке, где они и должны находиться, и ничего необычного в этом нет. Сервер делает свое дело и обычным порядком возвращает результат вызвавшей процедуре. Так, например, в случае чтения файла сервер заполняет данными буфер, на кото­рый указывает второй параметр. Этот буфер — внутренний буфер серверной за­глушки.

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

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

В блаженстве неведения, царящем на стороне клиента, и состоит прелесть та­кой схемы. Как мы видели, доступ к удаленным службам осуществляется по­средством вызова обычных (то есть локальных) процедур, без всяких там send и receive. Все детали пересылки сообщений скрыты в двух библиотечных проце­дурах, так же как в традиционных библиотеках скрыты детали реально произво­димых системных вызовов.

Подведем итоги. При удаленном вызове процедур происходят следующие действия.

  1. Процедура клиента обычным образом вызывает клиентскую заглушку.

  1. Клиентская заглушка создает сообщение и вызывает локальную операцион­ ную систему.

  2. Операционная система клиента пересылает сообщение удаленной операцион­ ной системе.

  1. Удаленная операционная система передает сообщение серверной заглушке.

  2. Серверная заглушка извлекает из сообщения параметры и вызывает сервер.

  3. Сервер выполняет вызов и возвращает результаты заглушке.

  1. Серверная заглушка запаковывает результаты в сообщение и вызывает свою локальную операционную систему.

  2. Операционная система сервера пересылает сообщение операционной системе клиента.

98 Глава 2. Связь

9. Операционная система клиента принимает сообщение и передает его клиент­ской заглушке.

10. Заглушка извлекает результаты из сообщения и передает их клиенту.

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