Anda di halaman 1dari 14

Llamadas a procedimientos remotos (RPC)

Diseo de Sistemas Operativos Sistemas Distribuidos

Juan Pavn Mestras Dep. Sistemas Informticos y Programacin Universidad Complutense Madrid http:// grasia.fdi.ucm.es/jpavon/dso

RPC
Llamada a procedimiento remoto (Remote Procedure Call)
n

Birrell y Nelson (1984)


n

Intentar que los programas puedan llamar a procedimientos localizados en otras mquinas
De manera similar a como se hace una llamada a procedimiento local Proporciona transparencia de distribucin

Cuando un proceso en una mquina A llama a un procedimiento en la mquina B:


El proceso que realiza la llamada desde A se suspende La ejecucin del procedimiento se realiza en B La informacin se puede pasar de un proceso a otro como parmetros, y regresar como resultado del procedimiento El programador no se preocupa de la transferencia de mensajes

JPM, UCM 2001-02

RPC

RPC
n

Problemas que resuelve:


n

n n

Ambos procesos estn en espacios de direcciones distintos Transferencia de parmetros y resultados Heterogeneidad
Qu pasa si las dos mquinas tienen arquitecturas distintas

Fiabilidad
Qu pasa si hay fallos en alguna de las mquinas Qu pasa si hay fallos en el canal de comunicaciones

n n

Localizacin y seleccin de servicios Seguridad

JPM, UCM 2001-02

RPC

RPC
Operacin bsica llamada
Cliente

Proxy Servidor (stub)

regreso
KERNEL

Proxy Cliente (stub)

llamada
Servidor

regreso

KERNEL

RED DE COMUNICACIONES
JPM, UCM 2001-02 RPC 4

RPC
n n

Automatizacin Ayuda a la transparencia de distribucin


n

RPC esconde el cdigo de red en los stubs de cliente y servidor Los stubs se generan automticamente
rpcgen especificacin

Se protege a la aplicacin de los detalles de red


n

Sockets, marshalling de los parmetros, orden de los bytes, temporizadores, control de flujo, reconocimientos, retransmisiones, etc.

Permite seleccionar llamadas locales a procedimientos o remotas, segn la localizacin del procedimiento llamado
RPC 5

JPM, UCM 2001-02

Plataformas RPC
n

OSF/DCE (Distributed Computing Environment)


n n

Paquete de multithreading Varios modelos de RPC y varios tipos de representacin de datos y protocolos de red Servicios: Tiempo, Directorio, Seguridad, Archivos Antes Sun RPC/XDR RFCs 1831 (ONC RPC) y 1832 (XDR)

ONC RPC
n n

Extensiones a arquitecturas de computacin de objetos distribuidos


n n

Java RMI OMG CORBA


RPC 6

JPM, UCM 2001-02

Servicios sobre RPC NFS (Network File System)


/etc/ e x p o r t s

cliente

servidor remoto

/u s r/ m a n -a c c e s s = c l i e n t e

/h o m e

/u s r

/
/u s r/ m a n

/l i b

/u s r

/u s r/ b i n

/u s r/ l o c a l

/u s r/ b i n

/u s r/ l o c a l

/u s r/ m a n

/usr/etc/ mount remote:/usr/man /usr/man


Directorio en mquina remota
JPM, UCM 2001-02 RPC

nombre local
7

Servicios sobre RPC NFS (Network File System)


llamadas al sistema
I/F NFS Servidor NFS

VFS

Otro VFS ( p .e j . P C - F S )

4.2 VFS

Cliente NFS

4.2 BSD UFS

RPC/XDR

RPC/XDR

RED
JPM, UCM 2001-02 RPC 8

Servicios sobre RPC NFS (Network File System)


Cliente 1 Aplicacin 3 filehandle pathname filehandle 2 Servidor mount Servidor NFS Servidor

JPM, UCM 2001-02

RPC

Servicios sobre RPC Port Mapper


Servidor Cliente 2
bind

a 111 portmapper

Aplicacin 3

registra

utiliza

b c

Programa Servidor

JPM, UCM 2001-02

RPC

10

Servicios sobre RPC


n

Especificacin del protocolo del Port Mapper en RPC


const PMAP_PORT = 111; /* portmapper port number */ /* A mapping of (program, version, protocol) to port number */ struct mapping { unsigned int prog; unsigned int vers; unsigned int prot; unsigned int port; }; Struct *pmaplist { mapping map; pmaplist next; }; /* Port mapper procedures */ program PMAP_PROG { version PMAP_VERS { void PMAPPROC_NULL(void) = 0; bool PMAPPROC_SET(mapping) bool PMAPPROC_UNSET(mapping) unsigned intPMAPPROC_GETPORT(mapping) pmaplist PMAPPROC_DUMP(void ) } = 2; } = 100000;

= = = =

1; 2; 3; 4;
11

JPM, UCM 2001-02

RPC

Servicios sobre RPC


NIS (Network Information Service)
n

Tambin conocido como pginas amarillas (yellow pages)

Proporciona gestin centralizada de informacin de red (no slo de mquinas y direcciones IP, tambin de passwords, servicios, grupos, aliases, etc.) La informacin se guarda en NIS maps
n n

Conjuntos de claves y valores asociados Implementados en archivos dbm localizados en /etc/yp en las mquinas de los servidores NIS
reemplazan o aumentan la informacin de Unix en /etc/

n n

Ejemplos de mapas NIS: hosts, protocols, password, rpc, services, group, netgroup, aliases, timezone, NIS domain: un conjunto de NIS maps
Define un rea de control administrativo

JPM, UCM 2001-02

RPC

12

Servicios sobre RPC


NIS (Network Information Service)
n

Para cada NIS map hay


n n

un servidor NIS maestro y los dems funcionan como esclavos Se puede invocar con la orden ypinit

n n

Un servidor NIS se ejecuta como el demonio ypserv


n

Los clientes NIS, en vez de acceder a los archivos /etc hacen RPC al servidor NIS cada vez que necesitan informacin de una base de datos NIS
n n n

ypwhich dice el nombre del servidor NIS que usa ypbind ypcat passwd -- equivaldra a hacer cat /etc/passwd ypmatch nombreusuario passwd -- ypcat passwd | grep nombreusuario

JPM, UCM 2001-02

RPC

13

Java RMI
RMI (Remote Method Invocation)
n n

Extensin de RPC para objetos Java Permite acceder a mtodos de objetos remotos

CLIENTE ObjetoCliente

SERVIDOR lookup rmiregistry registra ObjetoServidor

JPM, UCM 2001-02

RPC

14

JavaRMI
n n

El cliente solicita una instancia de una clase utilizando sintaxis URL El cliente utiliza el objeto remoto como si fuera local
n n

Las conexiones de red se soportan automticamente La serializacin de Java se utiliza para pasar los parmetros sin tener que escribir cmo parsearlos y reconstruirlos
Los tipos atmicos se pasan por valor Los objetos remotos se pasan por referencia Los objetos locales se pasan por valor (una copia)

Slo hay que gestionar algunas excepciones (p.ej., RMIRemoteException)


RPC 15

JPM, UCM 2001-02

JavaRMI
n

Stub (en el cliente)


n n n n

Empaqueta el identificador del objeto remoto Empaqueta el identificador del mtodo Codifica y empaqueta los parmetros (marshalling) Enva el paquete al skeleton del servidor Desempaqueta y descodifica los parmetros (unmarshalling) Llama al mtodo del objeto, que devolver un valor o una excepcin Codifica y empaqueta el valor de retorno (marshalling) Enva el paquete al stub del cliente

Skeleton (en el servidor)


n

n n

JPM, UCM 2001-02

RPC

16

Programacin con Java RMI


n

Definicin de interfaz
n n

La interfaz define los servicios ofrecidos por el objeto remoto La utilizan tanto el cliente como el servidor

Ejemplo:
package Contador; public interface ContadorRMI extends java.rmi.Remote { int getCuenta() throws java.rmi.RemoteException; void setCuenta(int valor) throws java.rmi.RemoteException; } n La interfaz debe heredar de java.rmi.Remote n Las excepciones java.rmi.RemoteException se pueden producir por problemas de comunicacin, o cada del servidor

JPM, UCM 2001-02

RPC

17

Programacin del cliente con Java RMI


n

Busca un objeto en el servidor remoto


n n

Utilizando la operacin Naming.lookup(url) Tiene que conocer la direccin de la mquina servidor remota y el nombre del objeto remoto, con los que construye un URL de la forma
rmi://hostname/objectname

lookup() devuelve un Object o una excepcin RemoteException o MalformedURLException

Hace casting al tipo de interfaz y lo utiliza como objeto local


n n

Mientras exista una referencia al objeto remoto, se mantiene la conexin La conexin se cierra cuando se elimina el proxy del objeto remoto por el recogedor de basura

JPM, UCM 2001-02

RPC

18

Programacin del cliente con Java RMI


package Contador; import java.io.DataInputStream; import java.rmi.Naming; import java.rmi.RMISecurityManager; public class ClienteContadorRMI { public static void main(String[] args) { DataInputStream stdin = new DataInputStream(System.in); System.setSecurityManager( new RMISecurityManager() ); try { ContadorRMI proxyContador = (ContadorRMI) Naming.lookup("rmi://" + args[0] + "/primer contador"); // ver que se usa como direccin del objeto remoto un URL con protocolo RMI
JPM, UCM 2001-02 RPC 19

Programacin del cliente con Java RMI


System.out.println("Elija una opcin: salir | ver | numero"); while (true) { String entrada = stdin.readLine(); if ( entrada.equals("salir") ) break; if ( entrada.equals("ver") ) System.out.println( proxyContador.getCuenta() ); else { int intVal = Integer.parseInt(entrada); proxyContador.setCuenta(intVal); } } System.out.println(Adios."); } catch(Exception e) { e.printStackTrace(); } } }
JPM, UCM 2001-02 RPC 20

10

Programacin del servidor con Java RMI Estructura del servidor


ServidorContador crea main ContadorImpl registra instala RMISecurityManager MVJ
RPC

ContadorRMI

rmiregistry

(Naming)

JPM, UCM 2001-02

21

Programacin del servidor con Java RMI (1)


package Contador; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class ContadorImpl extends UnicastRemoteObject implements ContadorRMI { private int cuenta; public ContadorImpl() throws RemoteException { super(); System.out.println(Objeto ContadorImpl: constructor"); cuenta = 0; } public synchronized int getCuenta() throws RemoteException { System.out.println(" Objeto ContadorImpl: getCuenta() "); return cuenta; } public synchronized void setCuenta(int valor) throws RemoteException { System.out.println(" Objeto ContadorImpl: setCuenta ( +valor+)); cuenta = valor; } } JPM, UCM 2001-02 RPC

22

11

Programacin del servidor con Java RMI (2)


package Contador; import java.rmi.Naming; import java.rmi.RMISecurityManager; public class ServidorContadorRMI {

// crea el objeto ContadorImpl y lo registra


public static void main(String[] args) { System.setSecurityManager(new RMISecurityManager()); try { ContadorImpl miContador = new ContadorImpl(); Naming.rebind(primer contador", miContador); } catch(Exception e) { System.out.println("Exception: " + e.getMessage()); e.printStackTrace(); } } }
JPM, UCM 2001-02 RPC 23

Ejecucin de aplicacin con Java RMI


1) Compilar el servidor javac ServidorContador.java
El compilador Java se encarga de compilar ContadorRMI y ContadorImpl, por estar usados en ServidorContador.

2) Creacin de stub y skeleton: rmic Contador.ContadorImpl


Crea las clases ContadorImpl_Stub y ContadorImpl_Skel Utiliza como entrada la clase que implementa la interfaz

3) Compilar el cliente: javac Contador.ClienteContador 4) Arrancar el RMI Registry (una sola vez): n En Windows: start rmiregistry n En Unix: rmiregistry &
Por defecto utiliza el puerto 1099 (aunque se puede especificar otro)
JPM, UCM 2001-02 RPC 24

12

Ejecucin de aplicacin con Java RMI


5) Arrancar el servidor (en la misma mquina que el Registry):
java Contador.ServidorContador
En el servidor hacen falta ContadorRMI.class ContadorImpl.class ServidorContador.class ContadorImpl_Skel.class

6) Ejecutar el cliente (en cualquier nodo):


java Contador.ClienteContador maquinaservidor
En el cliente hacen falta ContadorRMI.class ClienteContador.class ContadorImpl_Stub.class

JPM, UCM 2001-02

RPC

25

JavaRMI en Applets
n

Los applets slo pueden conectarse con el servidor desde donde se descargaron
n

El RMI Registry y el servidor de objetos remotos deben estar en la misma mquina del servidor HTTP desde donde se descarg el applet Innecesario especificar un nuevo RMISecurityManager

El stub de protocolo RMI 1.2 slo es soportado por las ltimas versiones de IE y Netscape
n

Utilizar RMI 1.1:


rmic v1.1 ImplementacionInterfaz

JPM, UCM 2001-02

RPC

26

13

Ejercicio
n

Hacer un applet cliente del objeto Contador

JPM, UCM 2001-02

RPC

27

Bibliografa
n

Java RMI:
n

http://java.sun.com/products/jdk/rmi (pginas oficiales de Sun) http://www.parallax.co.uk/cetus/oo_javabeans.html (Cetus links) A. Birrell y B. Nelson, Implementing Remote Procedure Calls, ACM Transactions on Programming Languages and Systems, vol.2, n. 1, feb. 1984, pp. 39-59 A. Birrell, Secure Communication Using Remote Procedure Calls, ACM Transactions on Computer Systems, vol. 3, n. 1, Feb 85, pp. 1-14 OSF, Introduction to OSF DCE, Englewood Cliffs, Prentice Hall, 1992
RPC 28

RPC
n

JPM, UCM 2001-02

14

Anda mungkin juga menyukai