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
ppos-v2:escalonador_por_prioridades [2026/03/27 16:25] – [Escalonamento por prioridades] mazieroppos-v2:escalonador_por_prioridades [2026/05/06 22:31] (atual) maziero
Linha 1: Linha 1:
 +====== Escalonamento por prioridades ======
 +
 +Este projeto faz parte do [[PPOS-v2:start|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 ''scheduler'' que analisa a fila de tarefas prontas e devolve um ponteiro para a próxima tarefa a receber o processador.
 +  * funções ''sched_getprio'' e ''sched_setprio'' para consulta e ajuste de prioridades, indicadas abaixo.
 +
 +<code c>
 +void sched_setprio (task_t *task, int prio)
 +</code>
 +
 +Esta função ajusta a prioridade **estática**((Pode ajustar a prioridade dinâmica também, para que o efeito da mudança seja imediato.)) da tarefa ''task'' para o valor ''prio'' (que deve estar entre -20 e +20). Caso ''task'' seja nulo, ajusta a prioridade da tarefa atual.
 +
 +<code c>
 +int sched_getprio (task_t *task)
 +</code>
 +
 +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 escalonador
 +  * ''kernel/tcb.c'':  define a estrutura do task control block
 +  * ''kernel/task.c'': implementação da gestão básica de tarefas
 +  * ''test/pingpong-scheduler.c'': código de teste do escalonador
 +  * ''test/pingpong-scheduler.txt'': saída esperada do teste (pequenos desvios são aceitáveis)
 +
 +<note tip>
 +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.
 +</note>
 +
 +===== 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:
 +    * [[Tarefas cooperativas]]
 +    * [[Despachante de tarefas]]