Основы ОС Unix RPC (Remote Procedure Call) Удаленный вызов процедур

advertisement
Основы ОС Unix
RPC
(Remote Procedure Call)
Удаленный вызов процедур
Основы ОС Unix 5/21/08
Слайд 1 из 34
Сегодня: RPC – основа NIS и
NFS
●
●
●
●
●
●
●
Модель Клиент/Сервер и RPC
Механизм работы RPC
Представление данных
Поток данных при RPC
portmap демон / rpcinfo
RPCGEN – компилятор протоколов
ONC и DCE RPC
Основы ОС Unix 5/21/08
Слайд 2 из 34
Модель клиент/сервер и RPC
●
●
●
●
●
Клиент
Сервер
Вызывающая процедура
Вызываемая процедура
{protocol, local-address, local-process, foreignaddress, foreign-process}
–
–
–
–
protocol – TCP, UDP
local address/process (port) – клиент
foreign address/process (port) – сервер
port – идентификатор процесса для коммуникации
Основы ОС Unix 5/21/08
Слайд 3 из 34
Механизм работы RPC
1. Вызывающая процедура готовит все данные
для RPC. (Замечание: выполнение процедуры может
оказаться на другой архитектуре!)
2. Вызвыющая процедура передает данные на
удаленный хост для выполнения RPC,
используя сетевой адрес (маршалинг)
3. RPC принимает данные, выполняется и
передает результат обратно
(маршалинг/демаршалинг)
4. Вызывающая процедура получает результат
RPC и продолжает выполнение.
Представление данных
●
●
●
●
low order / high order = little-endian/big-endian
сетевое представление = big-endian
ONC стандарт для представления данных
(XDR) – коллекция С функций для
конвертации представлений данных
enum x_op:
–
–
–
XDR_ENCODE преобразовать в XDR
XDR_DECODE пробразовать в локальное пред.
XDR_FREE очистить память
Поток данных при RPC
1) клиент кодирует данные через
XDR фильтр;
2) клиент передает закодированные
XDR данные по сети на удаленный
хост;
3) сервер декодирует данные через
XDR фильтр;
4) сервер выполняет RPC и кодирует
результат через XDR фильтр;
5) сервер передает закодированный
резудьтат по сети обратно
клиенту;
6) клиент декодирует RPC результат
через XDR фильтр и продолжает
выполнение.
portmap – связывание клиента и
сервера для RPC
●
●
●
●
portmap демон регистрирует
номер порта для RPC
программ;
сервер RPC назначает целые
идентификаторы для программ
и процедур RPC для
регистрации в таблице
диспетчеризации, хранящей
адреса XDR фильтров и адреса
реальных процедур;
клиент обращается к portmap
для получения доступа к
нужному порту и процедуре из
таблицы диспетчеризации.
См. rpcinfo
RPCGEN – компилятор
протоколов
●
●
●
Утилита rpcgen автоматизирует создание XDR
процедур, необходимых для конвертации параметров и
результата удаленной процедуры в сетевой формат и
обратно;
rpcgen это компилятор для RPC языка, на котором
описывается интерфейс удаленной процедуры (.x);
rpcgen обрабатывая *.x файл создает 4 C-файла:
– *.h
общий заголовочный файл;
– *_clnt.c
прокси (stub) программу для клиента;
– *_svc.c
скелетон главной программы сервера ;
– *_xdr.c
XDR фильтры для параметров и результата.
Пример RPC файла avg.x
1./*
2. * Процедура average принимает массив вещественных
3. * чисел и возвращает их среднее значение
4. * Этот игрушечный сервис обрабатывает максимум
5. * 200 чисел.
6. */
7.const MAXAVGSIZE = 200;
8.
9.struct input_data {
10. double input_data<200>;
11.};
12.
13.typedef struct input_data input_data;
14.
15.program AVERAGEPROG {
16.
version AVERAGEVERS {
17.
double AVERAGE(input_data) = 1;
18.
} = 1;
19.} = 22855;
Пример: клиент client.c
●
●
#include "avg.h"
реализует функцию
void averageprog_1( char* host, int argc, char
*argv[])
обрабатывает и печатает входные параметры
вызывает функцию
clnt = clnt_create(host, AVERAGEPROG,
AVERAGEVERS, "udp");
– выполняет вызов RPC
result_1 = average_1(&average_1_arg, clnt)
–
–
●
реализует функцию main(argc, argv)
– принимает входные параметры командной строки
– вызывает averageprog_1( host, argc, argv);
Пример: server.c
#include <rpc/rpc.h>
#include "avg.h"
#include <stdio.h>
static double sum_avg;
double * average_1(input_data *input,
CLIENT *client) {
....
return(&sum_avg);
}
double * average_1_svc(input_data *input,
struct svc_req *svc)
{
CLIENT *client;
return(average_1(input,client));
}
Работа
Реализации RPC
ONC RPC – Open Network
Computing (Sun Microsystems)
●
●
●
●
●
язык ONC RPC
XDR - eXternal Data
Representation
int номер программы
сервера
portmap демон
rpcgen компилятор
DCE RPC – Distributed
Computing Environment (OSF)
●
●
●
●
●
язык IDL
NDR - Network Data
Representation
строка UUID – Universal
unique identifier uuidgen
rpcd демон
IDL компилятор
Приложения RPC
●
сервисы, например,
–
–
●
NIS – Network Information Service
NFS – Network Filesystem Service
Распределенные приложения
–
–
многопроцессорные системы
кластеры
Литература
1. Ed Petron. Remote Procedure Call.
http://www.linuxjournal.com/article/2204
2.У.Р.Стивенс. UNIX Разработка сетевых приложений.
Питер, 2003.
3.Родерик В. Смит. Сетевые средства Linux.
M:Вильямс, 2003.
4.J.Blommer. Power Programming with RPC. O'Reilly
Acc. 1993.
Основы ОС Unix 5/21/08
Слайд 15 из 34
Download