Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции.docx
Скачиваний:
1
Добавлен:
22.04.2025
Размер:
116 Кб
Скачать
☆

Вызов удалённых процедур.

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

Основные характеристики вызова локальных процедур:

  1. Ассиметричность.

  2. Ассинхронность.

RPC не рассчитывает на разделяемую память, то есть они не содержат указатели на ячейки памяти и значения параметров должны копироваться с одного устройства на другое. RPC обязательно используют нижележающую систему обмена сообщениями, но явно это не определяется ни в определение, ни в самих процедурах. В реализации RPC участвуют минимум 2 процесса, и если один из них аварийно завершается, то могут возникнуть то могут возникнуть 2 варианта:

  1. При аварии вызывающей процедуры удалённо вызванные процедуры становятся бесхозными (осиротевшими).

  2. При аварийном завершение удалённых процедур бесхознами становятся вызывающие процедуры, то есть безрезультатном ожидают ответа от удалённой процедуры.

Технология RPC лежит в основе РОС. Пусть есть процедура записи данных в файл.

Там чё-то буфер – указатель на массив символов, длина массива и fbufff, который дискриптор файла.

Для того, чтобы осуществить вызов, вызывающая процедура помещает указанные параметры в стек в обратном порядке и передаёт управление вызываемой процедуре. Данная пользовательская процедура после определённых манипуляций с данными символьного массива buff выполняет системный вызов write для записи данных в файл, передавая ему параметры тем же способом, то есть помещая их в стек. При реализации системного вызова они копируются в стек системы, а при возврате из него результат помещается в пользовательский стек. После того, как процедура mwrite выполнена, она помещает возвращаемое значение m в регистр, перемещая адрес возврата, и возвращает управление вызывающей процедуре, которая выбирает параметры из стека, возвращая его в исходное состояние. Тогда параметры копируются из исходной области данных памяти в локальную процедуры, которая располагается в стековом сегменте:

  1. Вызываемая процедура работает с оригинальными данными.

  2. С копиями.

Это значимый выбор.

Выбор механизма передачи параметра лежит на разрабе. В определённых случаях это зависит от передаваемых данных.

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

Прозрачность в RPC достигается следующим образом – в библиотеку процедур вместо локальной реализации оригинального кода процедуры, помещается версия процедуры, которая называется клиенсткий_стаф. На устройство, которое выполняет роль сервера процедур, помещается оригинальный код вызываемой процедуры и стаб (серверный стаб).

Назначения стабов.

Они отвечают за организацию передачи параметров вызываемой процедуры и возврат значения процедуры через сеть. Код оригинальной процедуры, помещённой на сервере, должен быть полностью сохранён.

Стабы используют для передачи данных через сеть средства подсистемы обмена сообщениями, т.е. примитивы ОС send и receive.

В определённых случаях для обмена сообщениями выделяется программный модуль, организующий связь стабов с примитивами передачи сообщений (модуль RPC_runtime).

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