Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
so:contabilizacao [2023/03/29 14:09] – [Cálculo dos tempos] mazieroso:contabilizacao [2023/05/23 08:16] (atual) maziero
Linha 1: Linha 1:
 +====== 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//):
 +
 +<code>
 +Task 17 exit: execution time 4955 ms, processor time 925 ms, 171 activations
 +</code>
 +
 +===== 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.
 +
 +<note warning>
 +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. 
 +</note>
 +
 +Você deverá implementar uma função para informar às tarefas o valor corrente do relógio:
 +
 +<code c>
 +unsigned int systime () ;
 +</code>
 +
 +===== 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]]