- •Ограничения.
- •Механизм передачи сообщений.
- •Синхронизация.
- •Вызов удалённых процедур.
- •Назначения стабов.
- •Генерация стабов.
- •Формат сообщений в rpc.
- •Модель сетевой файловой системы (сфс).
- •Модифицируемость файлов.
- •Интерфейс сфс.
- •Единицы доступа.
- •Распределение клиентов и серверов по ос.
- •Кэширование.
- •Репликация.
- •Управление репликацией.
- •Согласованность реплик.
- •Примеры сетевых файловых служб ftp, nfs.
- •Организация базы справочных данных.
- •Служба nds и файловая система.
Вызов удалённых процедур.
Идея вызова удалённых процедур состоит в расширение механизма передачи управления и данных внутри программы, исполняющейся на одной машине на передачу управления данных через сеть. Механизм RPC достигается там, где существует интерактивная связь между удалёнными компонентами с небольшим временем ответа и относительно малым количеством передаваемых данных.
Основные характеристики вызова локальных процедур:
Ассиметричность.
Ассинхронность.
RPC не рассчитывает на разделяемую память, то есть они не содержат указатели на ячейки памяти и значения параметров должны копироваться с одного устройства на другое. RPC обязательно используют нижележающую систему обмена сообщениями, но явно это не определяется ни в определение, ни в самих процедурах. В реализации RPC участвуют минимум 2 процесса, и если один из них аварийно завершается, то могут возникнуть то могут возникнуть 2 варианта:
При аварии вызывающей процедуры удалённо вызванные процедуры становятся бесхозными (осиротевшими).
При аварийном завершение удалённых процедур бесхознами становятся вызывающие процедуры, то есть безрезультатном ожидают ответа от удалённой процедуры.
Технология RPC лежит в основе РОС. Пусть есть процедура записи данных в файл.
Там чё-то буфер – указатель на массив символов, длина массива и fbufff, который дискриптор файла.
Для того, чтобы осуществить вызов, вызывающая процедура помещает указанные параметры в стек в обратном порядке и передаёт управление вызываемой процедуре. Данная пользовательская процедура после определённых манипуляций с данными символьного массива buff выполняет системный вызов write для записи данных в файл, передавая ему параметры тем же способом, то есть помещая их в стек. При реализации системного вызова они копируются в стек системы, а при возврате из него результат помещается в пользовательский стек. После того, как процедура mwrite выполнена, она помещает возвращаемое значение m в регистр, перемещая адрес возврата, и возвращает управление вызывающей процедуре, которая выбирает параметры из стека, возвращая его в исходное состояние. Тогда параметры копируются из исходной области данных памяти в локальную процедуры, которая располагается в стековом сегменте:
Вызываемая процедура работает с оригинальными данными.
С копиями.
Это значимый выбор.
Выбор механизма передачи параметра лежит на разрабе. В определённых случаях это зависит от передаваемых данных.
Для С целые и скалярные данные передаются по значениям, а массивы по ссылкам. Так как мы не хотим, чтобы пользователь мучался, вызов удалённых процедуры должен быть аналогичен локальной.
Прозрачность в RPC достигается следующим образом – в библиотеку процедур вместо локальной реализации оригинального кода процедуры, помещается версия процедуры, которая называется клиенсткий_стаф. На устройство, которое выполняет роль сервера процедур, помещается оригинальный код вызываемой процедуры и стаб (серверный стаб).
Назначения стабов.
Они отвечают за организацию передачи параметров вызываемой процедуры и возврат значения процедуры через сеть. Код оригинальной процедуры, помещённой на сервере, должен быть полностью сохранён.
Стабы используют для передачи данных через сеть средства подсистемы обмена сообщениями, т.е. примитивы ОС send и receive.
В определённых случаях для обмена сообщениями выделяется программный модуль, организующий связь стабов с примитивами передачи сообщений (модуль RPC_runtime).
Клиентский стаб вызывается путём передачи обычных параметров через стек. Далее, вместо выполнения системного вызова, который работает с локальным ресурсом, формируется сообщения, в которых содержатся имя вызываемой процедуры и её параметров. Данная операция – операция упаковки параметров. После этого на след шаге клиентский стаб обращается к примитиву send для передачи сообщения удалённому устройству, для которой помещена реализация оригинальной процедуры. Получив из сети сообщение, ядро ОС удалённого компьютера вызывает серверный стаб, который извлекает из сообщения параметры и вызывает обычным образом оригинальную процедуру. Для получения сообщения серверный стаб должен предварительно вызвать примитив receive, чтобы узнать для кого пришло сообщение. Серверный стаб распаковывает параметры вызова и в обычном порядке вызывает процедуру, передаваемую через стек. После окончания работы процедуры серверный стаб упаковывает её результаты в новое сообщение и с помощью примитива send передаёт сообщение по сети клиентскому стабу, потом возращает обычным образом результат и выполнение вызывающей процедуре. Ни одна процедура не понимает, что они работают на разных устройствах.
