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 3 (peng) exit code 0, 42562 ms elapsed time, 8512 ms cpu time, 852 activations
Valores impressos:
3: task idpeng: nome da tarefa0: exit code (informado emtask_exit)42562: tempo de vida8512: tempo de CPU852: número de ativações
Essa mensagem deve ser gerada pelo despachante, assim que a 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.
gettimeofday e outras.
Você deverá implementar a seguinte função em time.c para informar às tarefas o valor corrente do relógio:
int systime () ;
Arquivos
Os seguintes arquivos são relevantes para este projeto:
kernel/time.c: gestão de tempokernel/task.c: gestão de tarefaskernel/tcb.c: define a estrutura do task control blocktest/pingpong-contab.c: teste sem prioridades; as tarefas devem concluir juntas, com tempos de vida e de CPU similares e número de ativações também similares.test/pingpong-contab-prio.c: teste com prioridades; as tarefas devem ter tempos de vida bem distintos, mas tempo de CPU e número de ativações similares (pois a carga computacional delas é a mesma).test/pingpong-contab-stress.c: teste para verificar se seu sistema se comporta bem com muitas tarefas (todas têm a mesma prioridade e mesma carga computacional).test/pingpong-contab*.txt: saídas esperadas (pequenos desvios são aceitáveis)
Outras informações
- Duração estimada: 4 horas.
- Dependências:
- Escalonador por prioridades (para o teste 2)
