Este projeto será realizado principalmente na linguagem de programação C em conjunto com as APIs de Linux e POSIX, mas também irá incluir alguma programação em shell e makefile.
O propósito geral do projeto será simular o fluxo central de um serviço de administração portuária com várias operações, tais como efetuar cargas, descargas, armazenagem de mercadorias, etc. Esta aplicação, chamada SO_AdmPor, envolverá múltiplos processos cooperativos para efetuar as suas operações. O fluxo de chamadas entre processos envolve:
- Envio de descrições de operações pretendidas.
- Emissão de pedidos destas operações.
- Agendamento/execução das mesmas. De forma a se poder aferir a qualidade do serviço prestado, são também registadas informações de progresso sob a forma de um log, que podem posteriormente ser analisadas.
Tecnologias principais: Multi-threading, memory buffers, semáforos, locks, sinais e alarmes .
Todo o projeto e a sua especificação encontra-se apresentada em maior detalhe em ambos enunciados.
A compilação de todos os ficheiros de código fonte presentes no projeto está definida no makefile, através do comando make, na shell, de onde resulta o executável soadmpor em /bin/
.
Será possível definir o input de teste, através dos ficheiros presentes em tests/in/
, onde já se encontram quatro ficheiros scenario1-scenario4. A utilização dos comandos make run1-4 define o ficheiro de input correspondente e, após execução, será criado o ficheiro de output em tests/out/
de respetiva denominação.
Se o executável fornecido pelos docentes estiver presente em /bin/
com o nome soadmpor_prof, ao utilizar o comando runtest serão corridos ambos executáveis, de ficheiros de input iguais, cujos ficheiros de output correspondentes serão comparados (ver limitações).
O ficheiro script.sh recebe o nome (não o path) de dois ficheiros que estejam em qualquer diretoria do projeto e compara-os, onde linhas em posições diferentes serão contabilizadas na mesma.
time_write_log_timed (time.c) não está devidamente implementada, logo o output para a consola não é completamente correto.
time_difference (time.c) tem problemas em tempos com valores em ordens de unidades diferentes e como tal alguns cálculos vão resultar em erro.
file_write_log_file (file.c) está incorretamente implementada, os ficheiros log não seguem o formato definido.
Devido à aleatoriedade introduzida pelo valor do tempo inicial, execuções sucessivas resultam em ficheiros de output diferentes, mesmo com inputs iguais. Como tal, ao comparar o output do executável fornecido pelos docentes e outro output produzido por este executável, não pode ser garantido que estes sejam iguais. Quanto menor for o número de clientes menor será a probabilidade de isto acontecer. É possível, no entanto, correr os testes várias vezes e eventualmente será obtido o resultado esperado.
Projeto realizado por Grupo 26:
- João Cotralha Nº51090
- Cláudio Esteves Nº51098