Problema Controle de Tráfego Aéreo

Introdução

A melhoria de segurança dos aviões e a redução dos custos da aviação, provocou um aumento do tráfego aéreo, principalmente na segunda metade do Século XX. O controle de tráfego aéreo tornou-se um ponto crítico nos grandes aeroportos pelo mundo. Apesar da grande automação nas aeronaves atuais, o controle de tráfego aéreo nos aeroportos ainda é essencialmente humano.

Sendo assim, muito esforço tem sido feito para aumentar a automação do controle de tráfego aéreo nos aeroportos para possibilitar o aumento de tráfego crescente e aumentando a segurança para os usuários.

aeroporto

Descrição do Problema

Projetar e escrever um programa concorrente para automatizar um controle de tráfego aéreo em um aeroporto. Suponha que, neste aeroporto, tenha uma pista única, na qual as aeronaves aterrissam e decolam.

As aeronaves que partem não devem decolar a menos de cinco segundos de distância da última decolagem ou aterrissagem, embora possam demorar mais do que isso se houver congestionamento no ar ou na pista. 

Para decolar as aeronaves devem ficar esperando em uma fila com 3 posições (a pista de taxiamento somente permite 3 aviões em espera). Nenhuma aeronave deve aterrissar durante este período de cinco segundos nem durante os 5 segundos necessários para o avião decolar. Antes de decolar, o avião deve esperar 5 segundos para que o avião anterior que aterrissou saia da pista principal ou o avião que acabou de decolar se afaste com segurança. Como em qualquer aeroporto, a prioridade é sempre para as aeronaves que estão pousando, porém se a fila de decolagem estiver lotada, a prioridade de uso da pista será a de decolagem.

Aeronaves que aterrissam precisam de 10 segundos, também durante o qual nenhuma outra aeronave pode decolar ou pousar. Assim como na vida real, se a pista estiver ocupada (por decolagem ou aterrissagem), a aeronave vai ficar circulando sobre o aeroporto até a pista ser liberada. O avião criado se dirige imediatamente para aterrissar na pista, caso esteja liberada. O combustível é limitado, assim, cada aeronave não pode ficar voando sobre o aeroporto mais do que 30 segundos.

Serão "criados" um avião a cada 8 segundos, aleatoriamente para decolar e para aterrisar. Voce pode diminuir o tempo se não ocorrer filas durante a execução.

A figura abaixo mostra o diagrama de tempo de decolagens e aterrissagem consecutivas.



O objetivo é desenvolver um programa que implemente o controle de tráfego aéreo sem haver colisão na pista de decolagem nem que alguma aeronave caia por falta de combustível.

Para verificar o funcionamento, escreva um log com a hora de “nascimento” de cada aeronave, se vai decolar ou aterrissar, e o momento que inicia a decolagem e conclui a decolagem/aterrissagem (registrando a hora). Ao final imprima uma lista com todos os voos e o tempo que ficaram esperando até decolar/aterrissar.

Implementação

O trabalho prático consiste em escrever um programa em C, C++, Java ou Python para simular o jogo. Não precisa fazer interface gráfica. 

O programa deve implementar a classe Aircraft() concorrente. A pista deve implementar um “lock” para controlar a exclusão mútua. Deve também possuir uma estrutura de controle pré e pós exclusão mútua que não cause deadlock nem starvation.  Note que não é crítico que a aeronave seja atendida na ordem exata em que eles são criados, no entanto, seria bom se a solução leve em conta a ordem.

Crie 10 aeronaves decolando e 10 aterrissando. O programa deve criara aleatoriamente os aviões porém implemente um contador para controlar a quantidade de cada um.

Primeiro crie um programa usando variáveis globais para controlar o acesso. Como não vai funcionar, coloque semáforos ou monitores. Isso é importante para voce ver como programação concorrente é importante....

Avaliação

A avaliação consiste em uma apresentação oral em sala com a execução do programa e um trabalho escrito.

Apresentação Oral

Os alunos deverão fazer uma apresentação oral do trabalho realizado para os demais alunos. Na apresentação deverão mostrar a análise do problema, as formas de resolução, as decisões de implementação e a apresentação da execução do programa. 

Considera-se a execução correta se o programa cumprir o determinado sem a ocorrência de deadlocks ou starvation.

O calendário de apresentação será definido futuramente.

Trabalho Escrito

Os alunos deverão entregar um relatório escrito com os seguintes tópicos:
  1. Formulação do problema
  2. Descrição dos algoritmos
  3. Descrição da Implementação (diagrama de classes)
  4. Resultados
Para ajudar na preparação do relatório apresentamos um modelo de exemplo: Modelo de Relatório
Comments