Informe TPFConcurrentes - Schild

Anuncio
Trabajo Final de Programación
Concurrente: Misiles
Integrantes
Romero Scrofani, Fernando
Schild, Marcelo
Año: 2013
Introducción
En el presente informe, se explica todo lo relacionado con el tratamiento de la concurrencia en el
trabajo final de la materia. Lo referente al diseño del código se encuentra en el “Informe de
Ingeniería de Software” en la carpeta “Archivos de Ingeniería de Software”.
Se llevaron a cabo algunos cambios en dicho diseño, por lo cual, se incluye un nuevo diagrama de
clases, así como también, se incluyen diagramas de secuencias que muestran el comportamiento
de los objetos afectados por problemas de naturaleza concurrente.
Archivos
Al presente informe, se adjuntan las siguientes carpetas:




Archivos de Ingeniería de Software: Carpeta que contiene el informe del trabajo final de
Ingeniería de Software, el cual provee información sobre el diseño del código.
Proyecto en Eclipse: Carpeta que contiene el proyecto completo en Eclipse, a fin de
facilitar cualquier intento de Revisión del código desde dicha IDE.
Código Fuente: Carpeta que contiene el código fuente por sí solo de la aplicación.
Archivos de Programación Concurrente: Carpeta que contiene Diagramas utilizados en el
estudio de la concurrencia.
Nuevo Diagrama de Clases
Se confecciono un nuevo diagrama de clases, dado que aquel presente en la etapa de diseño no
cumple correctamente con los requerimientos. Se agregaron las siguientes clases:



Monitor: Gestiona el acceso de los hilos “MisilAliado” a las baterías encargadas de
lanzarlos. Se utilizaron locks para implementar el acceso a la sección crítica, y Conditions
(se obtienen a partir de los locks) para implementar las colas de condición del monitor.
Petri: Lee la matriz de incidencia presente en un archivo HTML y la utiliza para determinar
que acciones son posibles mediante la ecuación de estado de la red de Petri que
representa dicha matriz de incidencia. Sólo la clase Monitor Tiene acceso a esta clase.
Tx y Rx: Las clases “Tx” y “Rx” se encargan de la comunicación vía sockets entre el Radar y
el ServidorEnTierra.
También se incorporaron las clases presentes en el paquete “Utilidades”, pero estas no se
muestran en el diagrama porque no tienen relación con la concurrencia o con el comportamiento
de la simulación. Tales clases son:




Logger: Se encarga de guardar un registro de lo que sucede en un log (archivo de texto).
GUI_PanelDeRadar y Board: Son el código de la interfaz Gráfica.
CalculadoraDeMisiles: Se utiliza para cálculos algebraicos necesarios para calcular la
trayectoria de los misiles enemigos, su velocidad, etc.
HTML_Parser: Lo utiliza la clase Petri para lee la matriz de incidencia desde un documento
HTML generado con el Pipe (aplicación que sirve para dibujar y analizar redes de Petri).
Funcionamiento del Monitor
Todos los métodos públicos del monitor se ejecutan de manera atómica gracias al uso de locks.
Dichos métodos son:


solicitarBateria(): Este método es llamado por un hilo misil para solicitar ser disparado por
una determinada batería. El monitor consulta a la clase Petri para verificar si el disparo es
posible. De no serlo, se bloquea a este hilo en la cola de condición correspondiente a la
batería que intento utilizar.
habilitarBateria(): Las baterías tienen un tiempo de espera de 30segundos entre un
disparo y otro. Al finalizar esos 30segundos, ejecutan este método del monitor para
actualizar la red de Petri y ejecutar un resume sobre la cola de condición correspondiente,
a fin de que si hay hilos MisilAliado esperando por esta batería, se despierte uno de ellos.

getDisponibilidad(): Método que devuelve un arreglo de cuatro elementos booleanos que
indican cuales baterías están habilitadas y cuales no.
Diagramas de Secuencias de los métodos del monitor: estos diagramas se encuentran en formato
PDF en la carpeta “Archivos de Programacion Concurrente”.
solicitarBateria()
habilitarBateria()
Red de Petri
La Red de Petri que se utilizó para modelar el sistema garantiza exclusión mutua sobre el uso de
las baterías. La imagen a continuación muestra dicha red. El código XML de la red se encuentra en
el archivo “Codigo XML de la Red de Petri (Pipe).xml” dentro de la carpeta “Archivos de
Programacion Concurrente”. La red consta de 16 estados posibles, esta acotada y posee vivacidad.
Análisis de la Red de Petri
Invariantes de Plaza:
M(Detectados) + M(Ocupada-N) + M(Ocupada-S) + M(Ocupada-E) + M(Ocupada-O) = 4
M(Ocupada-N) + M(Habilitada-N) = 1
M(Ocupada-S) + M(Habilidada-S) = 1
M(Ocupada-E) + M(Habilitada-E) = 1
M(Ocupada-O) + M(Habilitada-O) = 1
Invariantes de Transición:
Ejemplo de Ejecución
Para ejecutar el código se debe hacer desde la clase “Aplicación” que se encuentra dentro del
paquete “Entorno”. Dicha clase solo se encargar de instanciar los objetos necesarios para correr el
programa.
La imagen a continuación muestra la interfaz gráfica. En ella el círculo rojo delimita el área
protegida, los puntos celestes representan a los misiles aliados y los puntos rojos a los misiles
enemigos.
Al cerrar Esta ventana se detiene la ejecución. Para mayor detalle es posible acceder a un log que
se almacena en la capeta raíz del proyecto. Este Log se renueva tras cada ejecución.
Descargar