Beruflich Dokumente
Kultur Dokumente
Basado en el libro Internetworking with TCP/IP. Vol III. D. E Comer y D. Stevens Algunas Ilustraciones se tomaron de Practical Unix Programming. K. Robbins y Robbins
RPC
Conceptos ? Generacin de Programas Distribuidos (Concepto de RPCGEN) ? Ejemplo
?
M. Curiel
M. Curiel
Paradigmas
?
Conceptos
?
Se comienza con el protocolo Se disea el formato de los mensajes y cmo el cliente y el servidor reaccionan y responden a los mensajes
M. Curiel
Se disea una aplicacin para resolver el problema. Se hacen pruebas en una sola mquina Se divide el programa en varias piezas que se ejecutarn en distintos computadores y se aade el protocolo.
Comer & Stevens M. Curiel
Modelo Conceptual
Subrutinas main
func()
Espacio Usuario
Llamadas al Sistema
Espacio Usuario Espacio del Kernel
sys_func(void ){
Espacio usuario
Programa usuario
llamada
retorno
Funcin de librera
sys_func() func(void ){
trap
proc1
proc2
proc3
}
System call
proc5
proc6
Thread de ejecuci n Thread de ejecuci n Thread bloqueado Trap-return
Espacio del kernel
M. Curiel
M. Curiel
Programa Distribuido
Comp. local
Computador 1
Cliente
Proceso en el Cliente
Proceso en el Servidor
Comp. remoto
Funciones del Servidor
func(void ){
Cliente
llamada Remota
retorno
llamada
retorno
Computador 2
func()
Req. Marshaled
Retorno Marshaled
Req. Marshaled
Retorno Marshaled
proc3
Servicios de red
Thread de ejecuci n Thread bloqueado
kernel del cliente Kernel del servidor
Red
proc4
proc5
Servicios de red
Es una poderosa tcnica para el desarrollo de aplicaciones distribuidas, basadas en el paradigma cliente/servidor. Extiende la nocin de llamadas a procedimientos locales, de forma tal que el procedimiento llamado no tiene que estar en la misma mquina donde reside el llamador.
Comer & Stevens M. Curiel
En RPC se transfiere el control al procedimiento llamado. El llamador se suspende. La respuesta del servidor es anloga al return(). El flujo de control vuelve al llamador y el llamado deja de ejecutarse. Existen llamadas anidadas: un procedimiento remoto puede llamar a otro. El Servidor se convierte en cliente de otro servicio.
10
M. Curiel
El procedimiento remoto no comparte el ambiente del llamador. No tiene acceso directo a los descriptores de archivo o a las funciones del SOP.
Define:
?
El formato de los mensajes que el cliente (llamador) enva al invocar un procedimiento remoto. El formato de los resultados
? ? ?
Permite al programador usar TCP o UDP Usa XDR (external data representation) Ofrece un compilador que facilita el desarrollo del programa
13
M. Curiel
14
M. Curiel
Programas remotos
Un programa remoto es la unidad bsica de software que se ejecuta en un computador remoto. Equivale al servidor. ? Se compone de un conjunto de procedimientos y datos globales
? proc1 proc2 proc3
Programas remotos
Argumentos: se pasan en una estructura (struct de C). ? Identificacin:
?
A cada programa se le asigna un identificador de 32 bits ? A cada procedimiento se le asigna un nmero entero: 1,2,..N. ? Tambin se incluye un nmero de versin.
?
(prog,vers, proc) 16
Comer & Stevens M. Curiel
Programas remotos
?
Programas remotos
?
Exclusin Mutua:
?
Como mximo se puede invocar un procedimiento en un programa remoto (exclusin mutua entre procedimientos)
Si una llamada a procedimiento remota retorna, el llamador puede concluir que el procedimiento se invoc al menos una vez. Si una llamada a proc. remota no retorna, ste pudo haber sido invocado cero o ms veces. Cada llamada a procedimiento debe ser idempotente.
Comer & Stevens M. Curiel
Cero o ms veces:
?
17
M. Curiel
18
y un puerto
?
Retransmisiones:
?
Existe una estrategia de retransmisin sencilla basada en timeouts. Los timeouts no se adaptan a las condiciones de la red. El software en la mquina del llamador puede, despus de varios intentos, declarar que el procedimiento remoto no se pudo ejecutar. Esto no garantiza que nunca se ejecut.
? ?
? ?
19
M. Curiel
20
Para hacer posible la comunicacin, a cada servicio se le asigna un nmero de puerto que conocen todos los clientes. Programas RPC (32 bits), puertos (16 bits). Los programas remotos obtienen puertos dinmicamente. Las asignaciones son temporales. El servidor, cuando inicia su ejecucin, pregunta al sistema por un puerto. El sistema puede elegir cada vez un nmero de puerto diferente.
Comer & Stevens M. Curiel
Al no conocer el puerto, el cliente no puede contactar al servidor directamente. El cliente slo conoce el host y el nmero de programa. Debe ser capaz de obtener el puerto asignado al servidor. El mapping o asociacin se debe hacer de forma dinmica. RPC incluye un servicio de asociacin dinmica.
Cada mquina que ofrece un programa RPC con un mecanismo que permite al cliente obtener el nmero de puerto del servidor: port mapper.
Server: Programa RPC Server registra (programa, puerto) Port Mapper
21
M. Curiel
22
Marshaling
Para transferir los argumentos entre computadoras estos deben ser representados con un formato externo. Las listas, por ejemplo, deben colocarse en una representacin compacta (marshaling). ? Los siguientes trminos se usan para denotar la tarea de codificar argumentos:
?
Cuando un servidor RPC comienza a ejecutarse, solicita un puerto del sistema que usa para sus comunicaciones El servidor contacta al port mapper para aadir la siguiente informacin a la BD:
(Nro. Programa, puerto)
Ahora los llamadores pueden saber el puerto del servidor enviando un mensaje al port mapper al puerto 111. ? Al saber el puerto el cliente puede contactar 23 directamente al servidor. Comer & Stevens
?
24
M. Curiel
Rutinas para convertir datos simples y complejos al formato XDR Rutinas de librera para llamar un procedimiento remoto, registrar un servicio con el port_mapper, conducir una llamada al procedimiento adecuado dentro del prog. remoto. Una herramienta que produce programas fuentes en C.
25
M. Curiel
26
M. Curiel
XDR
Enum Priority { PRIO_LOW = 1; PRIO_MED = 1; PRIO_HIGH = 1; }; Struct alarm { Priority prio; string text<>; /* string de tamao variable */ } ?
Similar a declaraciones en C, pero son lenguajes diferentes Se ofrecen los tipos bsicos: int, short,char long. Nmeros de doble precisin (float, double). El tipo void. Se da el soporte para tipos definidos por el usuario: typedef, structs, unions, arrays, tipos enumerados Se definen tipos extra: bool, string
Comer & Stevens M. Curiel
Unions
Enum ReturnType { RESULT_NAME = 1; RESULT_CODE = 2; }; Union Result switch(Return type){ case RESULT_NAME: string name<>; case RESULT_CODE: int code; default: void; };
XDR
?
Listas
Rutinas de Librera
Enviar un mensaje a un servidor:
clientrpc(host,prog, progver, procnum, inproc, im , outproc, out) inproc: progrma que hace el marshaling de los argumentos a enviar. in: direccin de los argumentos outproc: procedimiento local para hacer unmarshaling de los resultados. out:direccin en memoria donde se quedan los resultados.
Program PROG { version PROG1 { void PROG_PROC1( int a) void PROG_PROC2(string } = 1; version PROG2 { Program RPCDEMO { void PROG_PROC1( int a, version RPCDEMO_VERS_ORIG { void PROG_PROC2(string void RPCDEMO_PRINT(ListaPtr lp ) = 1; } = 2; } = 1; } = 600000; } = 600000;
= 1; str<>) = 2;
int b) = 1; str<>) = 2;
29
M. Curiel
30
M. Curiel
Rutinas de Librera
Handle = cln_create (host,prog, ver, proto) Crea un identificador que puede usarse para enviar mensajes RPC. host, prog y ver: host, programa y versin. proto: protocolo
RPCGEN
?
31
M. Curiel
32
M. Curiel
Programacin Distribuida
Los argumentos deben coincidir con los parmetros formales. ? Hay que aadir cdigo: los procedimientos adicionales se llaman Stubs. En el cliente, el stub reemplaza al procedimiento llamado. En el servidor, reemplaza al llamador.
? 33 34
Proc. B Proc. A
Llamada remota
Stub del Cliente
Proc. A1
Proc. A2
Proc. B1 Stub S. B1
Proc. B2 Stub S. B2
Stub C. B2 Stub C. B1
Llamada remota
Dispatcher
M. Curiel
M. Curiel
rdict.c
Funciones del Serv.
Cliente
Archivos
llamada Remota
retorno
llamada
retorno
Aplic. Cliente
Infaz. cliente
Comm. Cliente
Req. Marshaled
Retorno Marshaled
Req. Marshaled
Retorno Marshaled
Comp. C
Cliente
Servicios de red
RPC
Servicios de red
Rdict_sif.c
M. Curiel
36
Archivos de Salida
rdict.h = declaraciones de constantes y tipos rdict_xdr.h = rutinas XDR para codificar los argumentos rdict_clnt.c = Stub de comunicaciones del lado del cliente rdict_svc.c = Stub de comunicaciones del lado del servidor
? ? ? ? ?
Desarrolle y pruebe una aplicacin convencional Elija un conjunto de procedimientos para colocarlos en una mquina remota. Colquelos en un archivo separado. Escriba la especificacin para rpcgen y ejecute rpcgen Escriba las interfaces para cliente y servidor Genere el ejecutable del cliente: aplicacin, stubs, rutinas XDR Genere el ejecutable del servidor: stubs, procedimientos, rutinas XDR. Ejecute el servidor en una mquina remota. Ejecute el cliente.
Comer & Stevens M. Curiel
37
M. Curiel
38
main
Ejemplo
nextin insertw
initw deletew
lookupw
Comando
I i d l q
Argumento
Funcin
Inicializa la BD. Elimina todas las palabras Inserta una palabra en la BD Elimina una palabra de la BD
deletew Programa remoto en Comp2 Cliente en Comp1 initw main insertw Estructura de datos del diccionario
nextin lookupw
39