====== Contabilização de tarefas ====== :!: alterações na interface em 03/2023 {{ :so:ppos_06_contabilizacao.mkv |Video deste 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//): Task 17 exit: execution time 4955 ms, processor time 925 ms, 171 activations ===== Cálculo dos tempos ===== A figura abaixo ilustra a execução de uma determinada tarefa, de sua criação (''task_init'') 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: {{ contabilização.png |}} 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 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 uma função para informar às tarefas o valor corrente do relógio: unsigned int systime () ; ===== Códigos de teste ===== * {{pingpong-contab.c|Teste 1}} ({{pingpong-contab.txt|saída esperada}}), sem usar prioridades. Neste exemplo, as tarefas devem concluir juntas, com consumo de processador e número de ativações similares. * {{pingpong-contab-prio.c|Teste 2}} ({{pingpong-contab-prio.txt|saída esperada}}), usando prioridades. Neste exemplo, as tarefas devem concluir **em instantes bem distintos**, mas com consumo de processador e número de ativações similares (pois a carga computacional delas é a mesma). ===== Outras informações ===== * Duração estimada: 4 horas. * Dependências: * [[Gestão de Tarefas]] * [[Dispatcher]] * [[Escalonador por prioridades]] (para o teste 2) * [[Preempção por Tempo]]