Este trabalho tem por objetivo exercitar primitivas básicas da Linguagem C e iniciar a discussão sobre problemas complexos e a sua solução.
Você foi contratado pela Acima e Avante Elevadores para projetar a próxima geração de elevadores da empresa. De forma a reduzir os custos de desenvolvimento, você optou por implementar um simulador orientado a eventos do controlador de elevador. O ambiente de funcionamento de um elevador consiste do número de andares do prédio e da sua capacidade. Durante a operação do elevador, há basicamente dois eventos a serem considerados:
Sempre que o elevador atende um chamado, a entrada do passageiro é sujeita a haver espaço no elevador. O elevador pode postergar o atendimento do chamado se estiver cheio. Para fins de simplificação num primeiro momento, você não considera os tempos de aceleração e desaceleração do elevador. Mais ainda, você considera que todos os tempos são expressos em uma unidade de tempo Jepslon. Assim, para percorrer a distância de um andar a outro, é necessário 1 Jepslon. Para 1 ou mais passageiros entrarem ou sairem do elevador também é necessário 1 Jepslon.
Em termos da estratégia de escalonamento, você pode usar algo tão simples quanto FIFO, embora o elevador vá ficar se movimentando desnecessariamente. Há várias estratégias que podem ser usadas e são encontradas na literatura.
Para cada passageiro transportado, você deve imprimir o tempo de espera e o tempo dentro do elevador até o seu destino, ambos em Jepslons. Você pode também imprimir a taxa de ocupação do elevador, assim como a distância percorrida e o número de vezes que a porta foi aberta e fechada.
Assim, elabore um programa com as seguintes características:
Por simplicidade, você pode considerar que cada passageiro é um evento, indicando o andar no qual ele chamou o elevador e o andar de destino. Faz parte do trabalho gerar cargas realistas, que, por exemplo, tenham uma distribuição de freqüência dos andares desigual indicando um andar de entrada e saída do prédio.
O programa implementado deve ser avaliado para várias configurações, utilizando as funções getrusage e gettimeofday. Deve-se também distinguir entre os tempos de computação e tempos de entrada e saída. Comente sobre os tempos de usuário e os tempos de sistema e sua relação com os tempos de relógio.
Avaliação
Deverão ser entregues:
Distribuição dos pontos:
execução correta: 10%
saída legível: 10%
código bem estruturado: 15%
código legível: 15%
comentários explicativos: 20%
análise de complexidade: 10%
análise de resultados: 20%