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 id
  • peng: nome da tarefa
  • 0: exit code (informado em task_exit)
  • 42562: tempo de vida
  • 8512: tempo de CPU
  • 852: número de ativações

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

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:

int systime () ;

Os seguintes arquivos são relevantes para este projeto:

  • kernel/time.c: gestão de tempo
  • kernel/task.c: gestão de tarefas
  • kernel/tcb.c: define a estrutura do task control block
  • test/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)
  • ppos-v2/relogio_e_contabilizacao.txt
  • Última modificação: 2026/05/06 22:31
  • por maziero