You are on page 1of 7

ALUMNA: Alejandra Garcia Delgado.

PROFESOR: Arturo Elias Ramirez.

MATERIA: Redes III.

PRACTICA 5 RPC

7 B

Aguascalientes, Ags., 7 de noviembre de 2012 INTRODUCCION

Para esta practica implementamos un RPC en C, siguiendo las especificaciones del maestro. Dado que en Windows era mas complicado terminar la practica, la realice en Ubuntu, ya que tiene el comando rpcgen que facilita la creacion de los archivos necesarios para la ejecucion del rpc.

MARCO TEORICO

C es un lenguaje de programacin de propsito general. Su diseo proporciona construcciones que se asignan eficientemente a las instrucciones tpicas de la mquina, y por lo tanto, encontrar empleo duradero en aplicaciones que anteriormente haba sido codificados en lenguaje ensamblador. C es uno de los lenguajes de programacin ms usados de todos los tiempos, y hay muy pocas arquitecturas de computadora en las cuales no existe un compilador para C. Sus caractersticas son:

1. Un ncleo del lenguaje simple, con funcionalidades aadidas importantes, como funciones matemticas y de manejo de archivos, proporcionadas porbibliotecas. 2. Es un lenguaje muy flexible que permite programar con mltiples estilos. Uno de los ms empleados es el estructurado "no llevado al extremo" (permitiendo ciertas licencias de ruptura). 3. Un sistema de tipos que impide operaciones sin sentido. 4. Usa un lenguaje de preprocesado, el preprocesador de C, para tareas como definir macros e incluir mltiples archivos de cdigo fuente. 5. Acceso a memoria de bajo nivel mediante el uso de punteros. 6. Interrupciones al procesador con uniones. 7. Un conjunto reducido de palabras clave. 8. Por defecto, el paso de parmetros a una funcin se realiza por valor. El paso por referencia se consigue pasando explcitamente a las funciones las direcciones de memoria de dichos parmetros. 9. Punteros a funciones y variables estticas, que permiten una forma rudimentaria de encapsulado y polimorfismo. 10. Tipos de datos agregados (struct) que permiten que datos relacionados (como un empleado, que tiene un id, un nombre y un salario) se combinen y se manipulen como un todo (en una nica variable "empleado").

RPC (Remote Procedure Call), es un IPC (Inter Process Call) que permite a los programas de computadoras hacer una subrutina o procedimiento para ejecutarse en otro espacio de direcciones (normalmente ne otro equipo en una red compartida) sin que el programador de detalles esta interaccion a distancia. Es decir el programaodor escribe esecencialmente el mismo cdigo si la subrutina es local para el programa en ejecucin o a distancia. Cuando el software en cuestin utiliza principios orientados a objetos, al RPC se le llama Invocacion remota o Metodo de Invocacion Remota. Diferentes tecnologas pueden ser usadas para implementar este concepto. RPC provee un paradigma diferente para el acceso de servicios en red en vez de accesar servicios remotos a travs del paso de mensaje, un cliente invoca un

servicio haciendo un a llamada a un proceso local, el proceso local esconde los detalles de la comunicacin en la red. Cuando se hace un RPC: El entorno de la llamada se suspende, los parmetros del procedimiento se transfieren a travs de la red para el entorno en el que el procedimiento es de ejecutar, y se ejecuta el procedimiento all. Cuando el prcceso termina y produce sus resultados, los resultados son transferidos al entorno de llamada, donde la ejecucin se reanuda como si se hubiera hecho una llamada a un procedimiento regular.

Pasos del desarrollo de un RPC: 1. Identificar como remoto el servicio solicitado, el mecanismo del proceso cliente del RPC localiza el servidor que lo soporta. 2. Se empaquetan los argumentos en formato estndar para formar el cuerpo del mensaje. Este proceso se denomina Socializacin (Marshalling). 3. La informacin se enva empleando un protocolo de comunicacin TCP/IP. 4. El proceso cliente queda bloqueado hasta la recepcin de la respuesta. 5. En el nodo servidor al recibir la peticin el SO desbloquea al servidor y si es multihilo del servidor se hace cargo de la ejecucin. 6. Se ejecuta el mecanismo RPC en el servidor desempaquetando la informacin deserializacion (unmarshalling). 7. El mecanismo RPC ejecuta la funcin asociada al servicio solicitado. 8. La funcin del servidor se ejecuta mediante llamada local 9. Al obtenerse el resultado del servicio, el mecanismo RPC lo serializa. 10. Se enva el mensaje con el resultado al cliente. 11. El SO desbloquea al cliente cuando recibe el resultado. 12. El mecanismo RPC deserializa el resultado. 13. El resultado se devuelve al programa. El rpcgen es un generador de interfaz precompilado para Sun Microsystems RPC, usa una definicin de interfaz para crear un stub cliente y servidor. El rpcgen produce una salida de lenguaje C que incluye versiones de rutinas auxiliares del cliente, un esqueleto del servidor, un XDR para ambos parmetros y resultados y un archivo encabezado (libreras) que contiene definiciones comunes. En otras palabras crea un esqueleto completo, o platilla para la compilacin y ejecucin del RPC.

DESARROLLO

Creamos el archivo cuadro.x. Para posteriormente compilarlo con el comando rpcgen, y esto generara muchos archivos incluidos el de cliente y servidor, que posteriormente modificaremos. Lo primero fue la creacin del archivo cuadro.x program CUADRO_PROG { version CUADRO_VERS{ float PERIMETRO(float) = 1; float AREA(float) = 2; } = 1; } = 0x31111111; Despus utilicemos el comando rpgen -a cuadro.x en una terminal nos creara varios cdigos. Ahora modifiquemos el archivo servidor de la siguiente manera: Archivo cuadro_server.c: /* * This is sample code generated by rpcgen. * These are only templates and you can use them * as a guideline for developing your own functions. */ #include "cuadro.h" float * perimetro_1_svc(float *argp, struct svc_req *rqstp) { static float result; //calcular perimetro result = (*argp) * 4; return &result; } float * area_1_svc(float *argp, struct svc_req *rqstp) { static float result; //calcular area result = (*argp) * (*argp); return &result; }

Posteriormente modifiquemos el archivo del cliente, usaremos el siguente codigo: Archivo cuadro_client.c /* * This is sample code generated by rpcgen. * These are only templates and you can use them * as a guideline for developing your own functions. */ #include "cuadro.h" void cuadro_prog_1(char *host) { CLIENT *clnt; float *result_1; float perimetro_1_arg; float *result_2; float area_1_arg; //pedimos lados printf("Por favor ingrese lado: "); scanf("%f",&perimetro_1_arg); area_1_arg = perimetro_1_arg; #ifndef DEBUG clnt = clnt_create (host, CUADRO_PROG, CUADRO_VERS, "udp"); if (clnt == NULL) { clnt_pcreateerror (host); exit (1); } #endif/* DEBUG */ //obtener resultados, si error marcar error result_1 = perimetro_1(&perimetro_1_arg, clnt); if (result_1 == (float *) NULL) { clnt_perror (clnt, "call failed"); } result_2 = area_1(&area_1_arg, clnt); if (result_2 == (float *) NULL) { clnt_perror (clnt, "call failed"); } #ifndef DEBUG clnt_destroy (clnt); #endif /* DEBUG */ //imprimir resultados printf("Perimetro: %.2f\nArea: %.2f\n",*result_1,*result_2); }

int main (int argc, char *argv[]) { char *host = "148.211.144.35"; //ip del host cuadro_prog_1 (host); exit (0); } La compilacin se hace con el siguiente cdigo en una terminal: make -f Makefile.cuadro La ejecucin del cdigo ./cuadro_client y ./cuadro_server en cada computadora.

CONCLUSION

RPC es una tcnica para comunicar procesos en una o en varias computadoras en red. La complejidad del RPC depende de los procedimientos ms que en la programacin del mismo. Se implementa de una manera muy sencilla. rpcgen es una herramienta til en el desarrollo de un RPC en C, esta facilita el uso de RPC en un entorno LINUX.

REFERENCIAS

http://.en.wikipedia.org/wiki/Remote_procedure_call http://es.scribd.com/doc/106749057/RPC-en-Ubuntu-y-C http://web.cs.wpi.edu/~cs4514/b98/week8-rpc/week8-rpc.html http://docs.freebsd.org/44doc/psd/22.rpcgen/paper.pdf

You might also like