Familiariação com o kernel de Linux.
Escreva um programa para instrumentar funções do kernel:
O programa comunicará com o usuário através de 2 chamadas de sistema, uma que lê um contador e outra que limpa o contador.
As funções receberão 2 argumentos. O primeiro será o identificador do número de processos, de acordo com a semântica de kill. O segundo será o número do contador, entre 0 e 32. Permissões de processos terão que ser respeitadas.
As funções retornarão um long
Implementação: cada processo manterá um buffer de memória com 32 posições, e cada contador corresponde a uma dessas posições. Nas funções instrumentadas será inserida uma macro que atualizará uma posição do buffer
Exemplo de funções a instrumentar: schedule, do_fork, __iget, path_lookup, tcp_sendmsg, eth_header, __ide_do_rw_disk, kbd_event,
Valorização 1: Implemente um arquivo no /proc que lhe permita usar essa informação sem ter que usar chamadas de sistema.
Valorização 2: Garanta que as chamadas funcionam correctamente mesmo na presença de concorrência.
Valorização 3: Meça o tempo gasto nas funções, não o número de chamadas. Nesse caso a função deverá retornar um long long.
O trabalho deverá incluir um relatório com a descrição completa do trabalho e análise de resultados. A descrição do trabalho deverá explicar as principais alterações ao kernel, quais os programas desenvolvidos, e aplicações usadas para testar o programa. Explique cuidadosamente as decisões que teve que tomar no relatório.
O formato preferido para o relatório é HTML.
Os seguintes livros são as principais referências para o kernel de Linux: