Estas notas têm por objectivo fornecer-vos mais alguma informação sobre a prova prática que deverão realizar no próximo dia 2 de Maio, pelas 15:00, na sala B104.
A prova tem duração prevista para 2 horas, havendo ainda mais 30 minutos de tolerância.
Durante o exame terão acesso a toda a informação disponível no disco do computador onde realizam o exame, o qual deverá conter essencialmente a mesma documentação que os discos dos computadores das salas de aula.
Fornecerei ainda uma lista com os protótipos de funções que vos poderão ser úteis. (IMP- Não deverão incluir este ficheiro nos vossos ficheiros com código C, mas sim os especificados nas man pages das funções respectivas.)
Procurarei ainda disponibilizar através do SIGEX as transparências das aulas teóricas bem como o material relativo às aulas laboratoriais. Notem que esta disponibilização é condicional, pelo que devem preparar-se para a possibilidade de tal não ser possível.
Para finalizar este tópico, deixo-vos uma recomendação. Não se iludam com a quantidade de informação disponível. É facultada apenas para que vocês possam esclarecer uma dúvida de "última hora". Se vocês estiverem preparados como deve ser, só precisarão de consultar a lista com os protótipos e ocasionalmente a man page duma das funções dessa lista, para esclarecer pormenores relativos aos argumentos ou valores de retorno.
Nesta prova deverão resolver um problema sobre threads POSIX e os mecanismos de sincronização POSIX.
De forma a que possam ter crédito parcial o problema tem várias alíneas, 8 mais precisamente, cada uma das quais corresponde a um passo no desenvolvimento da solução para o problema proposto. A resposta a cada uma dessas alíneas deverá ser desenvolvida num diretório/pasta previsto para o efeito.
A decomposição do problema em 8 alíneas é tal que na minha solução, o número de linhas de código novas em cada uma delas anda à volta de 10, com excepção de 2 alíneas, uma com 16 e outra com 21 linhas de código novas.
A prova foi estruturada desta forma de modo a tentar automatizar a avaliação de cada uma das alíneas e simultaneamente tentar que vocês tenham uma classificação que reflita as vossas competências. Assim, é importante que vocês sigam as especificações. Por exemplo, se o enunciado diz que o ficheiro com a solução da alínea a) deverá encontrar-se no diretório de nome src/a, é importante que seja esse o diretório, e não src/A ou Src/a (em Unix/Linux, a capitalização das letras é relevante) ou outro nome que vos ocorra no momento. Para facilitar, fornecerei um arquivo com a estrutura de diretórios pretendida. Cada um desses diretório inclui já os ficheiros que vocês deverão alterar.
Outro aspecto relacionado com a automatização da avaliação diz respeito às strings que os vossos programas deverão imprimir. Dado o tipo de problemas em SO, o recurso a testes unitários não é apropriado. A solução que encontramos é especificar no enunciado strings que os vossos programas deverão imprimir indicando o processamento que fazem e o resultado desse processamento. Como a a avaliação deverá ser feita por scripts é essencial que as strings que os vossos programas imprimem sejam exactamente aquelas especificadas. Para facilitar, os ficheiros acima mencionados conterão as strings de formatação que deverão ser usadas. É também incluido um diretório, contendo a saída esperada pelos vossos programas quando invocados com determinados argumentos.
Ainda no sentido de facilitar o vosso trabalho, disponibilizarei os ficheiros util.c e util.h com a função parse_int_arg()
para processar argumentos da linha de comando que sejam inteiros. A outra função fornecida nestes ficheiros é print_usage()
a qual deverá ser invocada se o programa for invocado com os argumentos incorretos.
Finalmente, incluirei ainda em cada diretório uma makefile como a que se encontra no ficheiro Makefile para facilitar a compilação do programa correspondente, bastando executar o comando make, sem argumentos, na linha de comando. Estas makefiles permitem ainda remover o código resultante da compilação executando o comando make clean que poderá ser usado como descrito abaixo.
No final da prova deverão comprimir o diretório pai dos diferentes diretórios com o código que desenvolveram e fazer o upload do ficheiro resultante através do SIGEX. Para reduzir o tamanho do arquivo é conveniente que após resolverem cada alínea executem make clean, eliminando deste modo os ficheiros objeto e o executável.
Tratando-se duma prova de programação a avaliação basear-se-à fundamentalmente na execução do código que submeterem. Mais concretamente, tomarei em consideração na avaliação das provas os seguintes aspectos, os quais terão os pesos indicados entre parêntesis: compilação e código(25%), execução (70%) e outro (5%). No que diz respeito ao código consideraremos a sua legibilidade, a sua lógica e o processamento de erros. Quanto à compilação estaremos atentos aos "avisos" desnecessários. No que diz respeito aos outros aspectos consideraremos essencialmente o cumprimento das especificações, nomeadamente no que diz respeito aos nomes dos ficheiros e às strings impressas.