Quando vários Processos estão na fila de pronto e a CPU está livre, o Sistema Operacional deve selecionar um Processo para ocupar a CPU naquele exato momento.
Essa escolha é baseada em um critério de seleção. Cada Sistema Operacional tem um critério para determinar qual a ordem na escolha dos Processos para execução.
A parte do S. O. a quem cabe tomar essa decisão é denominada Escalonador (Scheduler).
A política de escolha de Processos da fila de pronto para ocupar a CPU é realizada por um critério de seleção.
A partir desse critério de seleção é criado um Algoritmo de Escalonamento.
Escalonamento não Preemptivo
Preempção é a capacidade de o Sistema Operacional intervir no fluxo de execução dos Processos. Portanto, um Sistema Operacional que utiliza um Algoritmo Não Preemptivo não terá a capacidade de intervir no fluxo de execução de um Processo.
Sendo assim, nesse tipo de Escalonamento, um Processo que assume o controle da CPU, mantém o controle até que:
- O Processo termine: dessa forma, o Processo sinaliza para o S. O. que executou sua última instrução;
- O Processo necessite de uma operação de I/O (Input/Output de dados, entrada e saída de dados): quando o Processo sinaliza para o S. O. que precisa de uma operação de E/S.
Note que as duas situações citadas partem do Processo. Não é o Sistema Operacional que determina quando o Processo precisa de I/O ou quando termina.
Escalonamento FIFO (First In First Out)
Neste Escalonamento, o Processo que chegar primeiro (first in) é o primeiro a ser selecionado para execução (first out), ou seja, é uma fila tradicional.
Quando um Processo é criado, o Sistema o coloca no final da fila de prontos.
Como qualquer outro Algoritmo Não Preemptivo, o Processo detém o controle até terminar, ou necessitar de I/O.
Escalonamento SJF (Shortest Job First)
Esse algoritmo de Escalonamento associa a cada Processo o seu tempo de execução, organizando a fila de prontos por esse critério.
A fila é ordenada, portanto, do menor para o maior Processo.
O Escalonamento SJF favorece os Processos que executam Programas menores, além de reduzir o tempo médio de espera em relação ao FIFO.
Escalonamento Cooperativo
No Escalonamento cooperativo, um Processo que está em execução, pode voluntariamente liberar a CPU.
- Vantagens:
- A simplicidade para ordenar a fila de prontos (ordem de chegada);
- O fato de não monopolizar a CPU.
- Desvantagem: A principal desvantagem é que depende da colaboração do Processo, não tem garantia que o Processo vá deixar a CPU, pois não depende do S. O.
Escalonamento Preemptivo
No Escalonamento preemptivo, um Processo não pode ficar no controle da CPU indefinidamente.
O Sistema Operacional pode interromper um Processo em execução para que outro Processo utilize a CPU.
Em geral, o Sistema Operacional pode tomar o controle da CPU de um Processo em execução por várias razões, de acordo com a lógica do algoritmo de Escalonamento utilizado.
- O Processo termine;
- O Processo necessite de uma operação de I/O.
(Observação: até aqui, igual ao não preemptivo); - Por critério do S. O.: O Sistema Operacional pode decidir tirar o Processo em execução da CPU, seguindo um critério pré-estabelecido.
Nesse caso, o Sistema salva os dados que o Processo estava executando antes de o interromper para que ele possa retomar a execução do Processo mais tarde, sem perda de informação.
O Sistema Operacional, pode, por exemplo:
- Dar atenção imediata a Processos mais prioritários;
- Proporcionar melhor tempo de resposta aos usuários;
- Compartilhar o uso do processador de maneira mais uniforme entre os Processos.
Por outro lado, a troca de um Processo por outro na CPU gera sobrecarga no Sistema.
Para isso não se tornar crítico, o Sistema Operacional deve estabelecer corretamente os critérios de Escalonamento.
Como você deve ter notado, as 3 transições que estudamos no Escalonamento não preemptivo, continuam ocorrendo:
- bulletPronto → Execução;
- bulletExecução → Bloqueado;
- bulletBloqueado → Pronto.
Veremos os principais algoritmos de Escalonamento a seguir.
Escalonamento Round Robin
Também denominado Escalonamento Circular ou Escalonamento por Revezamento.
Inicialmente, esse algoritmo é semelhante ao FIFO, pois usa a ordem de chegada para organizar a fila de prontos.
Porém, quando um Processo assume a CPU e passa para o estado de execução, existe um tempo-limite para a sua utilização, ou seja, nesse algoritmo, o critério do S. O. é o tempo.
Esse tempo limite é também denominado quantum (nome mais usual), ou ainda time-slice (fatia-de-tempo)
Escalonamento por Prioridade
A necessidade de se considerar alguns fatores para a escolha do próximo Processo que vai para a CPU é denominada Escalonamento por Prioridade.
A ideia básica é muito simples: cada Processo é associado a uma prioridade de acordo com a sua importância.
A fila de prontos é organizada pelo valor da prioridade, em ordem decrescente: da maior para a menor prioridade.
Assim, o Processo pronto com maior prioridade é aquele que vai rodar primeiro.
Toda vez que um Processo for para a fila de prontos com prioridade superior à do Processo em execução, ocorrerá preempção por prioridade:
- O Processo em execução voltará à fila de prontos (de acordo com sua prioridade;
- O Processo com prioridade superior assumirá o processador.