Experimentação com Kernel de Linux

Objectivo do Trabalho

Familiariação com o kernel de Linux.

Projeto Sugerido

Escreva um programa para instrumentar funções do kernel:

  1. 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.

  2. 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.

  3. As funções retornarão um long

  4. 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

  5. Exemplo de funções a instrumentar: schedule, do_fork, __iget, path_lookup, tcp_sendmsg, eth_header, __ide_do_rw_disk, kbd_event,

  6. Valorização 1: Implemente um arquivo no /proc que lhe permita usar essa informação sem ter que usar chamadas de sistema.

  7. Valorização 2: Garanta que as chamadas funcionam correctamente mesmo na presença de concorrência.

  8. 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.

Avaliação

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.

Material de Apoio

Os seguintes livros são as principais referências para o kernel de Linux:


vitor@cos.ufrj.br