.1. Multi-Level Feedback Queue
Esse documento representa parte dos meus estudos acerca do Livro - Operational Systems Three Easy Pieces, de dominio publico.
Como um sistema computacional de proposito geral normalmente nao sabe por quanto tempo rodar um processo, como sabemos e poderiamos decidir a forma mais otimizada de dividi-lo (ou nao) para escalonarmos corretamente todos os que estao na lista de processos?
The Multi-Level Feedback Queue (MLFQ)
Para fazer essa implementacao, definiremos prioridades para cada processo chamado. Assim, assumimos que:
- se Prioridade(Proc. A) > Prioridade(Proc. B), A executa e B nao
- se Prioridade(Proc. A) = Prioridade(Proc. B), ambos rodam em Round Robin
Este processo funciona alterando a prioridade de cada processo no decorrer de sua execucao. Por exemplo, se um programa precisa acessar diretamente o teclado, a prioridade deve ser alta, portanto, ele precisa de mais tempo de processamento.
Neste sentido, nao temos um fila como heap para tratar prioridade, e sim varias filas que permitem troca entre os processos que estao nela, da mais alta a mais baixa.
Alterando prioridades
Para alterar as prioridades, precisamos de um novo conceito. Atribuicao/Allotment, que representa a quantidade de tempo que um processo pode passar em uma determinado nivel de prioridade ate que o scheduler altere-o.
- Quando um processo entra no sistema, ele eh colocado na maior prioridade.
- a: se um processo usa o Allotment completamente enquanto esta correndo, o processo perde prioridade (desce uma fila), inpedentemente de usar ou nao a CPU constantemente durante o Allotment
- Depois de um periodo S de tempo, movemos todos os trabalhos para a fila de mais alta prioridade. (Priority Boost)

