Programación distribuida con ADA95 bajo GNU/Linux (I)



Documentos relacionados
Ficheros de configuración de Nagios (ejemplo con nrpe y snmp)

UNIVERSIDAD ICESI Guía de instalación y configuración del servicio de Apache en Ubuntu. Los objetivos de esta práctica de laboratorio son:

Crear servidor NFS en Debian

4.2- Instalación y Configuración de un Servidor DNS Dnsmasq en Ubuntu sin DHCP

Instantáneas o Shadow Copy

Implantar Microsoft Software Updates Service (SUS)

Manual de NetBeans y XAMPP

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda:

MANUAL TÉCNICO DE IMPLEMENTACIÓN PROYECTO SOCIAL COMPUESCUELA. Elaborado por: Julián A. Hernández M.

Programando por primera vez

Manual De Instalación MySQl 5.1 MANUAL DE INSTALACIÓN Y CONFIGURACIÓN DE MYSQL

DOCENTES FORMADORES UGEL 03 PRIMARIA

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Cherokee Web server. Alvaro López Ortega. Madrid España

GUÍA PARA LA INSTALACIÓN DE MOODLE EN UN COMPUTADOR PERSONAL QUE USA EL SISTEMA OPERATIVO MS. WINDOWS

Redes de área local Aplicaciones y Servicios Linux NFS

AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7

Modelo de Objetos Distribuidos

GUÍA CONFIGURACIÓN GNU/LINUX GENÉRICA

Podemos descargar la distribucion de gnu/linux de los repositorios de Ubuntu

Seguidamente se muestra una pantalla para seleccionar nuestra localización, y comprobamos que la hora y demás es correcto. Podemos hacerlo fácilmente

Estructuras de Sistemas Operativos

Ubuntu Server HOW TO : SQUID. EN ESTE SE REALIZA LO SIGUIENTE: En este how to se le va a enseñar como instalar servidor proxi Squid.

HOW TO SOBRE LA CREACION DE UNA DISTRIBUCION PERSONALIZADA DE LINUX

Instalar protocolo, cliente o servicio nuevo. Seleccionar ubicación de red. Práctica - Compartir y conectar una carpeta

Trabajo TICO Unidad 2: Sistemas Operativos. Guillermo Jarne Bueno.

Modo básico de funcionamiento del módulo Velneo vmodapache V7

Sistema operativo Discos duros Usuarios

Introducción a la extensión de scripting en gvsig 2.0

Guia de Instalación de un servidor para Gerencia y Gestión de Sistemas de información:

CAPÍTULO 3 VISUAL BASIC

Introducción a la plataforma Moodle Aníbal de la Torre Plataforma Moodle. Accediendo a los contenidos

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA

Curso de Java POO: Programación orientada a objetos

Informática 4º ESO Tema 1: Sistemas Informáticos. Sistemas Operativos (Parte 2)

Internet Information Server

MICQ. Trabajo Práctico Final Seminario de Ingeniería en Informática I Facultad de Ingeniería, UBA. Junio Cátedra: Pablo Cosso

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

CÓMO CONFIGURAR DHCP EN SUSE LINUX

Curso de PHP con MySQL Gratis

Servidor FTP en Ubuntu Juan Antonio Fañas

Prácticas A.S.O./A.S.O.P. - Boletín L08 NFS y NIS

U.E JUAN DE VELASCO CREAR DATOS EN SQL

Creación de imágenes. Pablo Sanz Mercado.

(PHP y APACHE), y el programa de comunicación Skype, para controlar de manera

TRABAJO GRUPAL TEMA: COMO CREAR BASE DE DATOS EN SQL

5.4. Manual de usuario

Laboratorio 8. Hojas de estilo, plantillas y bibliotecas en Dreamweaver

Manual del Sistema de Registro de Factura y Póliza 2012 INDICE CAPITULO 1 1

MANUAL DE USUARIO IMPORTADOR DE FICHERO DE USUARIOS EN EL SERVIDOR DE CENTRO

AGREGAR COMPONENTES ADICIONALES DE WINDOWS

Manual Instalación Versión 7

Manual instalación Windows 8. Instalar Windows 8 paso a paso

How to Crear Servidor DNS ClearOS

Servidor DNS sencillo en Linux con dnsmasq

PHPMYADMIN Y MYSQL. Para gestionar la base de datos MySQL, lo haremos desde la aplicación PhpMyAdmin.

GIT Dinahosting 3. Hola!

TUTORIAL - DHCP. RAFAEL BRITO HERNÁNDEZ ( ) Sistema III-Grupo 1 Profesor: José Doñe

Sistema NFS para compartir archivos.

El Entorno Integrado de Desarrollo Dev-C++ (Ayuda básica para las primeras sesiones de prácticas)

Iptables, herramienta para controlar el tráfico de un servidor

Uso del servidor gráfico X en los servidores del CESGA mediante PuTTY y Cygwin

Administración de sistemas UNIX/Linux Práctica Colección de scripts para la configuración de una infraestructura de máquinas UNIX

Person IP CRM Manual MOBILE

Firewall Firestarter. Establece perímetros confiables.

ESPACIOS DE COMUNICACIÓN VIRTUAL

Se ha confeccionado una aplicación sencilla para poder probar el interfaz de gestión explotación de MEGA, Modelo Estandarizado de Gestión de Agua.

Ambos paquetes simplifican mucho la instalación del servidor en el equipo. Y ambos pueden ser utilizados para la creación de una red intra-aula.

GENERACIÓN DE ANTICIPOS DE CRÉDITO

BRUTALIX Una distribución GNU/Linux para operadores.

TEMA 9 CREACIÓN DE PÁGINAS WEB

GESTIÓN DOCUMENTAL PARA EL SISTEMA DE CALIDAD

1) Aplicación Inp. Si has llegado hasta aquí poco te podemos decir ya de la misma. Seguimos.

INSTALACIÓN DE LOS MÓDULOS DEL ERP AbanQ

ATLAS MANUAL DE USUARIO DEL INSTALADOR INNO SETUP 5 Versión 1.0 UNIDAD DE ARQUITECTURA DE SOFTWARE DE APLICACIONES

Acronis License Server. Guía del usuario

Aviso Legal El presente libro electrónico se distribuye bajo Attribution-NonCommercial- NoDerivs 3.0 Unported

PRACTICA 9 SERVIDOR WEB APACHE SERVIDOR WEB APACHE. JEAN CARLOS FAMILIA Página 1

Plataforma e-ducativa Aragonesa. Manual de Administración. Bitácora

Instituto Tecnológico de Las América. Materia Sistemas operativos III. Temas. Facilitador José Doñe. Sustentante Robín Bienvenido Disla Ramirez

INSTALACIÓN DE SERVIDOR DE CORREO ELECTRÓNICO

Tutorial: Cómo realizar tu primer programa en C++ En el Sistema Operativo Windows

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. IIC1102 Introducción a la Programación

Manual de Instalación del sistema administrativo PremiumSoft Extended 7

Capítulo 5. Cliente-Servidor.

PRACTICA NO. 17, FIREWALL -EJEMPLO REAL DE USO DEL FIREWALL BLOQUEAR O PERMITIR RED, EQUIPO, PUERTO. HACER NAT, ETC. Vielka Mari Utate Tineo

Software distribuido

MF0952_2: Publicación de páginas web

MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD

Practica 1 Instalación del SGBD. Ing. María Elena Reyes Castellanos. Miguel Ángel Garduño Córdova Isaac Méndez Hernández

INTEGRACIÓN DE SISTEMAS OPERATIVOS EN RED Y PROPIETARIOS. Víctor Martín Martín

Entre los más conocidos editores con interfaz de desarrollo tenemos:

Sumario Instalación MDT V

Toda base de datos relacional se basa en dos objetos

PRÁCTICA 1-2: INSTALACIÓN Y ADMINISTRACIÓN DE UN SERVIDOR DNS (PRIMARIO Y ZONA DE RESOLUCIÓN DIRECTA E INVERSA EN WINDOWS 2008 SERVER)

ANÁLISIS DE HERRAMIENTAS PARA CLONAR DISCOS DUROS

JAVA EE 5. Arquitectura, conceptos y ejemplos.

Transcripción:

Programación distribuida con ADA95 bajo GNU/Linux (I) Alvaro López Ortega alvaro@godsmaze.org 1. Introducción a GNAT-Glade En primer lugar hay que aclarar que el nombre de esta librería puede confundir a los usuarios y programadores de GTK+ y GNOME. Existe una aplicación muy extendida para el diseño de interfaces gráficas que se llama Glade. Un grandísimo número de lenguajes de programación disponen de librerías para poder leer los ficheros de interfaces que genera Glade (Python, C++, Scheme, Ruby, Eifell, Haskell, etc). Pues bien, GNAT-Glade no tiene nada que ver con esta (magnifica ;-) herramienta. 1

Figura 1. Este Glade NO es. GNAT-Glade es una extensión para GNAT95, el compilador libre (licenciado bajo GPL) de Ada95, que permite desarrollar aplicaciones distribuidas con este lenguaje. La base de las aplicaciones distribuidas de Ada95 son las particiones. Básicamente una aplicación distribuida se compone de al menos un par de particiones. Es posible utilizar GNAT-Glade de dos formas diferentes: Con varias particiones sobre la misma máquina. Con varias particiones sobre diferentes máquinas que formen parte de una red de computadoras. Desde luego resulta mucho más interesante la segunda de las opciones. Es más, para desarrollar aplicaciones con varias particiones sobre una misma máquina hay muchos casos en que seria más conveniente no utilizar Glade y basarse únicamente en los mecanismos de concurrencia de GNAT (Ada95): la aplicación será más eficiente. 2. Cómo funciona GNAT-Glade? Cada una de las particiones de una aplicación basada en GNAT-Glade, a la hora de la compilación se va a convertir en un ejecutable independiente. Cada uno de estos ejecutables serán los que se ejecuten por 2

separado y se comuniquen entre ellos. Existe una herramienta que facilita todo este proceso: gnatdist. Gnatdist lee un fichero de configuración en el que se especifica como queremos distribuir la aplicación y genera todos los ejecutables necesarios. De esta forma, es posible probar diferentes formas de distribuir una misma aplicación simplemente con lanzar gnatdist con un fichero de configuración distinto, sin necesidad de modificar el código de la aplicación. 3. Lenguaje de configuración de GnatDist Las configuraciones de GnatDist se escriben en un lenguaje muy parecido a ADA 95. Es importante que todas las configuraciones se guarden en ficheros con extensión ".cfg". Para lanzar la compilación de una aplicación distribuida con GnatDist únicamente es necesario ejecutar gnatdist dándole como parámetro el nombre del fichero de configuración. Por ejemplo: alo@servidor:~$ gnatdist Ejemplo_Configuracion1.cfg 3.1. Cómo se escriben las configuraciones? En cualquier punto de la configuración es posible usar comentarios, que al igual que en Ada se comienzan con los caracteres --. Los ficheros de configuración han de contener un bloque "configuration", cuyo nombre ha de coincidir, al igual que en el caso de los paquetes, con el nombre del fichero en el que se encuentra. Es decir: configuration Ejemplo_Configuracion1 is -- -- Código de la configuración -- end Ejemplo_Configuracion1; CONTINUAR!!!.. no esta terminado 4. Primer ejemplo El movimiento se aprender andando.. así que, vamos a por el primer ejemplo. 3

En este ejemplo vamos a crear una pequeña aplicación compuesta únicamente de dos particiones: La primera de ellas es un servidor de sumas y restas (al más puro estilo RPC). En el se van a definir dos operaciones: suma y resta, que dados dos números enteros, van a devolver el resultado de aplicar la operación elegida sobre ambos. La segunda de ellas es un pequeño cliente que efectuará un par de operaciones para comprobar que efectivamente el servidor responde. 4.1. calculadora.ads package Calculadora is pragma Remote_Call_Interface; function Sumar (Operador1 : in Integer; Operador2 : in Integer) return Integer; function Restar (Operador1 : in Integer; Operador2 : in Integer) return Integer; end Calculadora; En esta definición del paquete llama la atención la instrucción pragma. Un pragma es simplemente una directiva para el compilador. En concreto, en este ejemplo, el pragma Remote_Call_Interface hace que se exporte la interfaz del paquete para que otras particiones puedan realizar llamadas a sus funciones, es decir, básicamente una llamada RPC. 4.2. calculadora.adb package body Calculadora is function Sumar (Operador1 : in Integer; Operador2 : in Integer) return Integer is begin return Operador1 + Operador2; end Sumar; function Restar (Operador1 : in Integer; Operador2 : in Integer) return Integer is 4

begin return Operador1 - Operador2; end Restar; end Calculadora; Programación distribuida con ADA95 bajo GNU/Linux (I) Este fichero es únicamente la implementación de las funciones del paquete calculadora. 4.3. cliente.adb with Text_IO; use Text_IO; with Calculadora; procedure Cliente is begin Put_Line ("- Calculadora, cuanto es 321+123? = " & Integer Image (Calculadora.Sumar (321,123))); Put_Line ("- Calculadora, cuanto es 321-123? = " & Integer Image (Calculadora.Restar (321,123))); end Cliente; Por último, el cliente. Este programa hace un par de llamadas a los funciones exportadas por el proceso de calculadora. Como se puede ver el código no tiene en cuenta si el proceso calculadora se encuentra corriendo en la misma máquina o en otra. Simplemente realiza llamadas a las funciones de la calculadora. De todo lo demás, que es mucho, ya se ha encargado gnatdist y se encarga ADA. 4.4. ejemplo.cfg configuration ejemplo is pragma Starter (Ada); Particion1: Partition := (Calculadora); Particion2: Partition := (Cliente); procedure Cliente is in Particion2; end ejemplo; Este es el fichero de configuración/compilación de gnatdist. El pragma Starter describe como queremos que gnatdist compile el proyecto. Existen tres posibilidades: Ada, Shell y None. En este caso es uno de los ejecutables el que lance todos los demás. 5

A continuación se definen las dos particiones que se han utilizado en este ejemplo: una para la calculadora y la segunda para el cliente que le realiza peticiones. Por último se especifica cual es la parte principal (el main). Esta partición, lógicamente, ha de tener un body. Importante: Cuidado con los nombres de los ficheros: han de coincidir con el nombre del paquete y además, han de estar en minúsculas. De no ser así gnatdist producirá un error. 4.5. Compilación y ejecución del programa Para compilar la aplicacion, como ya hemos visto, simplemente hay que ejecutar gnatdist: $ gnatdist ejemplo.cfg Si no ha habido ningún problema, se habrá producido una salida como esta: gnatdist: checking configuration consistency ------------------------------ ---- Configuration report ---- ------------------------------ Configuration : Name : ejemplo Main : cliente Starter : Ada code Partition particion1 Units : - calculadora (rci) Partition particion2 Main : cliente Units : Name : ejemplo Main : cliente Starter : Ada code Partition particion1 Units : - calculadora (rci) Partition particion2 Main : cliente Units : - cliente (normal) 6

------------------------------- gnatdist: building calculadora caller stubs from calculadora.ads gnatdist: building calculadora receiver stubs from calculadora.adb gnatdist: building partition particion1 gnatdist: building partition particion2 gnatdist: generating starter cliente En este momento ya tenemos construidos todos los ejecutables: lrwxrwxrwx 1 alo alo 10 Oct 9 22:33 cliente -> particion2 -rwxr-xr-x 1 alo alo 3663802 Oct 9 22:33 particion1 -rwxr-xr-x 1 alo alo 3723193 Oct 9 22:33 particion2 Como podemos ver, al especificar el Pragma Starter (Ada) en el fichero de configuración, gnatdist ha generado un link simbólico al ejecutable que va a lanzar los demás. En esta prueba vamos a ejecutar los dos programas en la misma máquina, más adelante se explicará como hacerlo en varias. $./cliente Host for "particion1": localhost - Calculadora, cuanto es 321+123? = 444 - Calculadora, cuanto es 321-123? = 198 Ahora bien.. estamos seguros de que se ha ejecutado un programa paralelo? estamos seguros de que en realizar no se la linkado el paquete Calculadora en los dos ejecutables? Como podemos ver en los procesos, realmente se han ejecutado los dos programas: [..] 7701 pts/10 S 0:00 \_ bash 8753 pts/10 S 0:00 \_./cliente 8754 pts/10 S 0:00 \_./cliente 8755 pts/10 S 0:00 \_./cliente 8793 pts/10 S 0:00 \_./cliente [..] 8788? S 0:00 /home/alo/prog/glade/1/particion1 --detach --boot_location tcp://l 8790? R 0:00 \_ /home/alo/prog/glade/1/particion1 --detach --boot_location tcp 8791? S 0:00 \_ /home/alo/prog/glade/1/particion1 --detach - -boot_location tcp://localhost:35802 8792? S 0:00 \_ /home/alo/prog/glade/1/particion1 --detach - -boot_location tcp://localhost:35802 7

8794? R 0:00 \_ /home/alo/prog/glade/1/particion1 --detach - -boot_location tcp://localhost:35802 Es más, si examinamos los símbolos de los dos ejecutables podemos ver como la calculadora tiene linkadas las funciones de suma y resta: 08050500 g F.text 00000011 calculadora restar 080504f0 g F.text 0000000d calculadora sumar y el cliente, además, tiene las funciones que usa gnatdist para el acceso: 080502c0 l F.text 00000018 calculadora sumar clean.0 080502e0 l F.text 0000005a calculadora sumar input27 read30.2 08050340 l F.text 0000018a calculadora sumar input27.1 080504d0 g F.text 000002bf calculadora sumar 08050790 l F.text 00000018 calculadora restar clean.3 080507b0 l F.text 0000005a calculadora restar input67 read70.5 08050810 l F.text 0000018a calculadora restar input67.4 080509a0 g F.text 000002bf calculadora restar 5. Instalación bajo Debian GNU/Linux Instalación de GNAT (compilador de Ada95) y Glade para GNAT (extensión para soporte de programación distribuida). Para realizar la instalación en el sistema es imprescindible estar conectado como usuario root : # apt-get install gnat gnat-glade Reading Package Lists... Done Building Dependency Tree... Done The following NEW packages will be installed: gnat gnat-glade 0 packages upgraded, 2 newly installed, 0 to remove and 2 not upgraded. Need to get 10.1MB of archives. After unpacking 40.2MB will be used. Get:1 http://http.us.debian.org unstable/main gnat 3.13p-8 [6789kB] Get:2 http://http.us.debian.org unstable/main gnat-glade 3.13p-6 [3339kB] Fetched 10.1MB in 6m30s (25.9kB/s) Selecting previously deselected package gnat. (Reading database... 93759 files and directories currently installed.) Unpacking gnat (from.../archives/gnat_3.13p-8_i386.deb)... Selecting previously deselected package gnat-glade. Unpacking gnat-glade (from.../gnat-glade_3.13p-6_i386.deb)... Setting up gnat (3.13p-8)... 8

Setting up gnat-glade (3.13p-6)... Instalación de la documentación de ambos paquetes. Estos paquetes son opcionales aunque muy recomendables. # apt-get install gnat-glade-doc gnat-doc Reading Package Lists... Done Building Dependency Tree... Done The following NEW packages will be installed: gnat-doc gnat-glade-doc 0 packages upgraded, 2 newly installed, 0 to remove and 2 not upgraded. Need to get 3708kB of archives. After unpacking 6567kB will be used. Get:1 http://http.us.debian.org unstable/main gnat-doc 3.13p-2 [3399kB] Get:2 http://http.us.debian.org unstable/main gnat-glade-doc 3.13p-2 [309kB] Fetched 3708kB in 2m19s (26.5kB/s) Selecting previously deselected package gnat-doc. (Reading database... 95179 files and directories currently installed.) Unpacking gnat-doc (from.../gnat-doc_3.13p-2_all.deb)... Selecting previously deselected package gnat-glade-doc. Unpacking gnat-glade-doc (from.../gnat-glade-doc_3.13p-2_all.deb)... Setting up gnat-doc (3.13p-2)... Setting up gnat-glade-doc (3.13p-2)... 9