Escalonamento por prioridades
Este projeto faz parte do PPOS v2.
Este projeto consiste em adicionar um escalonador baseado em prioridades com envelhecimento ao nosso sistema operacional.
As seguintes operações devem ser implementadas no arquivo scheduler.c:
- uma função
sched_init, que inicializa as estruturas de dados usadas pelo escalonador, se houver. - uma função
schedulerque analisa a fila de tarefas prontas e devolve um ponteiro para a próxima tarefa a receber o processador. - funções
sched_getprioesched_setpriopara consulta e ajuste de prioridades, indicadas abaixo.
void sched_setprio (task_t *task, int prio)
Esta função ajusta a prioridade estática1) da tarefa task para o valor prio (que deve estar entre -20 e +20). Caso task seja nulo, ajusta a prioridade da tarefa atual.
int sched_getprio (task_t *task)
Esta função devolve o valor da prioridade estática da tarefa task (ou da tarefa corrente, se task for nulo).
Arquivos
Os seguintes arquivos são relevantes para este projeto:
kernel/scheduler.h: interface do escalonador (não alterar)kernel/scheduler.c: implementação do escalonadorkernel/tcb.c: define a estrutura do task control blockkernel/task.c: implementação da gestão básica de tarefastest/pingpong-scheduler.c: código de teste do escalonadortest/pingpong-scheduler.txt: saída esperada do teste (pequenos desvios são aceitáveis)
Na saída esperada, observe que a tarefa
pang executa com mais frequência que peng, esta executa com mais frequência que ping e assim sucessivamente. Isso mostra claramente a influência das prioridades das tarefas no escalonamento.
Observações
- O escalonador deve usar prioridades no estilo UNIX (valores entre -20 e +20, com escala negativa).
- Ao ser criada, cada tarefa recebe a prioridade default (0).
- Para que o escalonador funcione corretamente, ele deve implementar um esquema de envelhecimento de tarefas (task aging com α = -1). Caso contrário, sempre a mesma tarefa será escalonada para execução.
- O envelhecimento deve ser implementado dentro do escalonador.
Outras informações
- Duração estimada: 3 horas.
- Dependências:
1)
Pode ajustar a prioridade dinâmica também, para que o efeito da mudança seja imediato.