Contabilização de tarefas

Este projeto faz parte do PPOS v2.

Neste projeto, você irá adicionar mecanismos para contabilizar o uso do processador pelas tarefas em execução. Sua implementação deve produzir uma mensagem de saída com o seguinte formato, para cada tarefa que finaliza (incluindo o próprio dispatcher):

PPOS: task   5 (ping), 13833 ms run,  2772 ms cpu,   278 acts, exit code   0

Valores impressos:

Essa mensagem deve ser gerada pelo despachante, assim que cada tarefa encerrar.

Cálculo dos tempos

A figura abaixo ilustra a execução de uma determinada tarefa, de sua criação (task_create) ao seu encerramento (task_exit). As áreas em verde indicam o uso do processador. É fácil perceber como os valores de contabilização podem ser calculados:

Para a contabilização você precisará de uma referência de tempo (ou seja, um relógio). Para isso, pode ser definida uma variável global (em time.c) para contar ticks de relógio, incrementada a cada interrupção do temporizador (1 ms). Dessa forma, essa variável indicará o número de ticks decorridos desde a inicialização do sistema na função ppos_init, ou seja, funcionará como um relógio baseado em milissegundos.

Um dos objetivos deste projeto é entender como é implementada a contagem de tempo no kernel de um SO. Por isso, você deve construir seu próprio relógio, sem usar funções de consulta ao relógio do Linux como gettimeofday e outras.

Você deverá implementar a seguinte função em time.c para informar às tarefas o valor corrente do relógio:

unsigned int time()

Arquivos

Os seguintes arquivos são relevantes para este projeto:

Outras informações