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

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

Эта проблема имеет давнюю историю, но не было практически никаких подвижек вплоть до выхода статьи Биррелла и Нельсона (Birrell and Nelson, 1984), в которой был предложен совершенно другой способ ее решения. Хотя сама идея на удивление проста (после того, как кто-то до нее додумался), ее применение часто чревато трудноуловимыми осложнениями. В этом разделе будет рассмотрены сама концепция, ее реализация и все ее сильные и слабые стороны.

В кратком изложении, Биррелл и Нельсон предложили разрешить программам вызов процедур, находящихся на других центральных процессорах. Когда процесс на первой машине вызывает процедуру, находящуюся на второй машине, то вызывающий процесс на первой машине приостанавливается, а вызванная процедура выполняется на второй машине. Информация может перемещаться от вызывающего к вызываемому в параметрах и возвращаться обратно в результатах процедуры. Программист не видит ни передачи сообщений, ни вообще какого-нибудь ввода-вывода. Эта технология известна как вызов удаленной процедуры (Remote Procedure Call (RPC)) и положена в основу огромного количества программного обеспечения, разработанного для мультикомпьютеров. Традиционно вызывающая процедура известна как клиент, а вызываемая процедура — как сервер, и мы также будем придерживаться этой терминологии.

Идея, положенная в основу RPC, заключается в том, чтобы сделать вызов удаленной процедуры максимально похожим на вызов локальной процедуры. В простейшем виде, чтобы вызвать удаленную процедуру, клиентская программа должна быть связана с небольшой библиотечной процедурой, которая называется клиентской заглушкой (client stub).

Аналогично этому сервер связан с процедурой, которая называется серверной заглушкой (server stub). Эти процедуры скрывают тот факт, что вызов процедуры, поступающий от клиента к серверу, не является локальным.

Реальные шаги осуществления RPC показаны на рис. 8.20. Шаг 1 заключается в вызове клиентом клиентской заглушки. Этот вызов является вызовом локальной процедуры с параметрами, помещенными в стек в обычном порядке. Шаг 2 заключается в том, что клиентская заглушка упаковывает параметры в сообщение и осуществляет системный вызов для его отправки. Упаковка параметров называется маршализацией (marshaling). Шаг 3 заключается в том, что ядро отправляет сообщение с клиентской на серверную машину. Шаг 4 состоит в том, что ядро передает входящий пакет серверной заглушке (которая, как правило, еще раньше вызвала процедуру receive). И наконец, шаг 5 заключается в том, что серверная заглушка вызывает серверную процедуру. Ответ проходит тот же путь, только в обратном направлении.

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


странстве с ожидаемыми ею параметрами. Для серверной процедуры нет ничего необычного. Таким образом, вместо осуществления операций ввода-вывода с помощью процедур send и receive удаленный обмен данными осуществляется за счет имитации обычного вызова процедуры.


<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Вызов удаленной процедуры:

  1. Упражнение № 3. Удаление обид
  2. ВЫЗОВ ВРАЧА
  3. СПТ откликается на вызов обстоятельств
  4. Быстрый вызов желаемого
  5. Бросьте себе вызов
  6. Самоубийство как вызов обществу
  7. § 14 Условное соглашение. – Предложение и вызов. – Договор посредством публичного торга или состязания. – Одностороннее обещание.
  8. Схема «Процедуры комфортизации».
  9. Схема «Процедуры комфортизации».
  10. 3. Процедуры банкротства гражданина
  11. ПРОЦЕДУРЫ И РИТУАЛЫ
  12. ИТАК, ПРОЦЕДУРА КОМФОРТИЗАЦИИ.
  13. ИТАК, ПРОЦЕДУРА КОМФОРТИЗАЦИИ.
  14. 28. Процедура наблюдения
  15. 5.3. Социометрические процедуры
  16. Процедуры и техники.
  17. Процедура комфортизации («Послушный» и «непослушный» мозг»).
  18. 3.3. Процедура экспериментирования
  19. § 4. Порядок работы парламента. Законодательная процедура
  20. 3.2. Процедура рассмотрения и утверждения проекта