Debe introducir al menos 3 caracteres en el buscador.
Inicio / Wikis / Cursos gratis / Curso de Ada - Programación distribuida con GLADE

Curso de Ada - Programación distribuida con GLADE

 ****- (10 opiniones)
GNU Free Documentation License Curso gratis de José Alfonso Malo Romero - 16 de Marzo de 2006
Temas Relacionados: Programación estructurada
60. Programación distribuida con GLADE

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 gran número de lenguajes de programación disponen de librerías para poder leer los ficheros de interfaces que genera Glade (C, C++, Ada, Python, Scheme, Ruby, Eiffel, etc). Pues bien, GNAT-GLADE no tiene nada que ver con esta (magnífica ;-) herramienta.

GLADE (GNAT Library for Ada Distributed Environments) es una extensión para GNAT, el compilador libre (licenciado bajo GPL) de Ada 95, que permite desarrollar aplicaciones distribuidas basándose en el anexo del manual de referencia de Ada: Annex E: Distributed Systems.

La base de las aplicaciones distribuidas de Ada 95 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 sería más conveniente no utilizar GLADE y basarse únicamente en los mecanismos de concurrencia de Ada (las tareas): la aplicación será más eficiente.

¿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 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 cómo 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.

Lenguaje de configuración de gnatdist


Las configuraciones de gnatdist se escriben en un lenguaje muy parecido a Ada. 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 esta herramienta dándole como parámetro el nombre del fichero de configuración. Por ejemplo:

gnatdist Ejemplo_Configuracion1.cfg

¿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;

Primer ejemplo


El movimiento se aprende andando… así que, vamos a por el primer ejemplo.

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 él 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.

calculadora.ads


package Calculadora is pragma Remote_Call_Interface; function Sumar (Operando1 : in Integer; Operando2 : in Integer) return Integer; function Restar (Operando1 : in Integer; Operando2 : 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.

calculadora.adb


package body Calculadora is function Sumar (Operando1 : in Integer; Operando2 : in Integer) return Integer is begin return Operando1 + Operando2; end Sumar; function Restar (Operando1 : in Integer; Operando2 : in Integer) return Integer is begin return Operando1 - Operando2; end Restar; end Calculadora;

Este fichero es únicamente la implementación de las funciones del paquete calculadora.

cliente.adb


with Ada.Text_IO; use Ada.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.

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 el primero de los casos será uno de los ejecutables el que lance todos los demás. Mediante Shell es un shell script el que lanzará los procesos. Con None tendremos que lanzarlos a mano o hacer nuestro propio script de arranque.

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 cuál es la parte principal (el main). Esta partición, lógicamente, ha de tener un body.

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.

Compilación y ejecución del programa


Para compilar la aplicación, 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)
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
Nota: las siguientes copias de salidas de comandos son de un sistema GNU/Linux, pero en otro sistemas operativos existirá un equivalente.

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 enlace 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á cómo 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 realidad no se ha enlazado 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://localhost:35802 8790 ? R 0:00 \_ /home/alo/prog/glade/1/particion1 --detach --boot_location tcp://localhost:35802 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 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 enlazadas las funciones de suma y resta:

08050500 g F .text 00000011 calculadorarestar 080504f0 g F .text 0000000d calculadorasumar

y el cliente, además, tiene las funciones que usa gnatdist para el acceso:

080502c0 l F .text 00000018 calculadorasumar_clean.0 080502e0 l F .text 0000005a calculadorasumar_input27_read30.2 08050340 l F .text 0000018a calculadorasumar_input27.1 080504d0 g F .text 000002bf calculadorasumar 08050790 l F .text 00000018 calculadorarestar_clean.3 080507b0 l F .text 0000005a calculadorarestar_input67_read70.5 08050810 l F .text 0000018a calculadorarestar_input67.4 080509a0 g F .text 000002bf calculadorarestar

Instalación bajo Debian GNU/Linux


Instalación de GNAT (compilador de Ada 95) y GLADE para GNAT (extensión para soporte de programación distribuida).

Para realizar la instalación en el sistema es imprescindible estar identificado como usuario root:

# apt-get install gnat gnat-glade

Instalación de la documentación de ambos paquetes. Estos paquetes son opcionales aunque muy recomendables.

# apt-get install gnat-glade-doc gnat-doc

Enlaces externos



Manual de referencia de Ada



Autores



  • Copyright © 2001 por Alvaro López Ortega
  • Copyright © 2005 por los autores de esta versión. Consulte el historial.
Tabla de contenidos
  1. 1 - Introducción
  2. 2 - Historia
  3. 3 - Manual de referencia
  4. 4 - Instalación
  5. 5 - Hola Mundo
  6. 6 - Elementos del lenguaje
  7. 7 - Tipos
  8. 8 - Enteros
  9. 9 - Enumeraciones
  10. 10 - Coma flotante
  11. 11 - Coma fija
  12. 12 - Arrays
  13. 13 - Strings
  14. 14 - Registros
  15. 15 - Registros discriminados
  16. 16 - Registros variantes
  17. 17 - Punteros a objetos
  18. 18 - Punteros a subprogramas
  19. 19 - Tipos derivados
  20. 20 - Tipos etiquetados (orientación a objetos)
  21. 21 - Subtipos
  22. 22 - Objetos (variables y constantes)
  23. 23 - Atributos
  24. 24 - Expresiones
  25. 25 - Operadores
  26. 26 - Sentencias y estructuras de control
  27. 27 - Subprogramas
  28. 28 - Sobrecarga
  29. 29 - Entrada/salida
  30. 30 - Pragmas
  31. 31 - Interfaz con otros lenguajes
  32. 32 - Diseño y programación de sistemas grandes
  33. 33 - Paquetes
  34. 34 - Clausula use
  35. 35 - Clausula with
  36. 36 - Paquete Standard
  1. 37 - Declaraciones
  2. 38 - Ámbito
  3. 39 - Visibilidad
  4. 40 - Renombrado
  5. 41 - La biblioteca Ada (unidades y subunidades)
  6. 42 - Unidades de biblioteca
  7. 43 - Unidades hijas
  8. 44 - Subunidades
  9. 45 - Compilación separada y dependiente
  10. 46 - Tipos abstractos de datos
  11. 47 - Tipos limitados
  12. 48 - Unidades genéricas
  13. 49 - Excepciones
  14. 50 - Paquete Ada.Exceptions
  15. 51 - Concurrencia
  16. 52 - Tareas
  17. 53 - Sincronización de tareas mediante puntos de entrada o citas (entry)
  18. 54 - Aceptación de citas (accept)
  19. 55 - Selección de citas (select)
  20. 56 - Llamadas a punto de entrada complejas
  21. 57 - Tareas dinamicas: creación dinamica de tareas (tipos t
  22. 58 - Dependencia de tareas
  23. 59 - Ejemplos de tareas
  24. 60 - Programación distribuida con GLADE
  25. 61 - Novedades de Ada 2005
  26. 62 - Unidades predefinidas
  27. 63 - Paquete Ada.Strings.Fixed
  28. 64 - Paquete Ada.Strings.Unbounded
  29. 65 - Paquete Ada.Text_IO
  30. 66 - Paquete Ada.Text_IO.Editing
  31. 67 - Paquete Ada.Float_Text_IO
  32. 68 - Paquete Ada.Sequential_IO
  33. 69 - Paquete Ada.Command_Line
  34. 70 - Paquete Interfaces
  35. 71 - Recursos en la Web
Autor y licencia de 'Curso de Ada - Programación distribuida con GLADE'
José Alfonso Malo Romero Extraído de: http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_Ada_/_Introducci%C3%B3n GNU Free Documentation License
El contenido está disponible bajo los términos de GNU Free Documentation License
Licencia GNU Free Documentation License: http://www.gnu.org/copyleft/fdl.html
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Wikis relacionados con 'Curso de Ada - Programación distribuida con GLADE'

Excelente curso de iniciación a la astronomía para aquellos que quieran aprender sobre esta apasionante... Más »
La idea de este curso surgió de varias conversaciones entre amig@s de la cuadrilla y... Más »
Este es un curso tremendamente completo, guiado y con ejemplos y prácticas pensadas para convertirlo... Más »
Este tutorial presenta los conceptos básicos de líneas de transmisión (Transmission lines), así como una... Más »
Publicidad, término utilizado para referirse a cualquier anuncio destinado al público y cuyo objetivo es... Más »
Gente Wiki
Alfonso Fuentes Martinez
Soy ing. Electronica industrial, maestria en ingenieria electrica, experiencia en la educacion univcersitaria mas de 17 años...
Alfredo De León
Docente universitario con especialidad en química y procesos ambientales. Educación y gestión medioambiental. Consultor.
Certificación de calidad medioambiental, Conservación medioambiental,...
Patricia
Mi trayectoria profesional y formativa ha estado ligada siempre al mundo del marketing y la comunicación. Hace más de dos...
Cuentas, Gestión de ventas,...
Roberto Hernaiz
Consultor de informática y nuevas tecnologías especializado en la gestión, implantación y tutorización de plataformas e-learning. Gerente de una empresa...
Luis Eduardo Carrillo Villamizar
Soy contador público y deseo perfeccionar mis conocimientos en la actividad inmobiliaria que desarrollo paralelamente a mi profesión de contador.
Derecho inmobiliario, Gestión de fincas,...
Fernando Molina Guzman
Cuasi-maestro en gestión de tecnologías de información. Soy director de investigación y desarrollo en una empresa de logística empresarial, paralelamente...
Suscribirse
¿Estás seguro de que deseas eliminar este capítulo?