ESCALONAMENTO COM PRIORIDADES
Por
Vinícius Reinecke e Luiz Felipe Conrado
·
O que é Escalonamento?
O escalonamento
é a realização da distribuição do acesso aos recursos presentes no sistema
entre os processos ativos, de uma maneira onde todos os processos que estejam
na fila possam utilizar a CPU. Dentro do Sistema Operacional existe o
escalonador, que tem a função de decidir qual dos processos está pronto e qual
será o próximo a ser executado, dividindo o uso de memória e do processador.
Existem
três tipos de escalonadores, os de longo prazo (controla o grau de
multiprogramação e administra o número de processos sendo executados
simultaneamente), os de médio prazo (controla os processos que serão removidos
de forma parcial ou total da memória para serem suspensos), e os de curto prazo
(controla os processos que estão na memória e os aloca na CPU).
·
Como funciona essa cadeia de ações?
A cadeia de processos do escalonamento funciona desta forma
fazendo com que todos os processos consigam passar sobre a execução a partir de
uma sequencia de prioridade, se tratando de quem pode esperar mais, sendo longo
prazo, e quem pode esperar menos, sendo o curto prazo.
·
Como funciona a troca de processos?
A finalização dentro do processo de escalonamento só e dada
quando o processo adquire o recurso que necessita do sistema e então ocorre a
troca de processos. Os recursos necessários são as informações vindo da CPU,
sendo processos como CPU bound, I/O bound, sendo que os processos CPU Bound,
que gastam todo o seu tempo em processo de CPU, ocorrem sequencialmente e de
maneira rápida dentro do processador, pois estão prontas dentro do sistema
esperando apenas o SPINLOCK para poder realizar o swap de tarefas. o tempo de spinlock é um adiamento indefinido até o que o bloqueio do
thread seja quebrado, podendo assim iniciar um novo processo. Quando um thread
tem em espera execuções de mesma prioridade ele provavelmente irá desperdiçar o
tempo de quantum, que é o tempo de alocação em que o thread pode ser executado,
esperando até que o thread seja liberado de seu bloqueio.
·
Como funciona um Escalonamento com
Prioridades?
A prioridade, quando estamos abordando escalonamento serve para
os processos receberem um tratamento próprio. Logo após a criação de um
processo, o mesmo recebe um grau de prioridade, e no momento onde o escalonador
precisar escolher um processo pra ser executado, apontará para o que tiver
maior prioridade. Para cada vez que este processo é executado, o escalonador
decrementa a sua prioridade, até que seu grau de prioridade se torne inferior a
outro processo, quando isso ocorre, ele é interrompido e o próximo processo
será executado.
Existe duas maneiras de ligar uma prioridade a um processo:
· Prioridade
estática: Possui simples implementação, é associado no
momento da criação do processo, e não é alterada durante sua existência. O seu
principal problema é que pode gerar tempos de respostas elevados.
· Prioridade
dinâmica: A prioridade pode ser modificada pelo
escalonador, durante a execução do processo, e o grau de sua prioridade é dado
de acordo com estatísticas geradas da execução deste processo anteriormente.
Os processos I/O-bounds (ligado à E/S – Entrada e Saída) terão sua
prioridade aumentada, para compensar o tempo no estado de espera. São
realizados sem o uso da CPU.
Os processos CPU-bounds
(ligado à CPU) podem ser executados enquanto os mesmos aguardam a realização de
alguma ação.
Toda programação tem de ser pensada para executar
corretamente as tarefas, para evitar a condição de corrida dentro das
execuções, ou seja, o comportamento do sistema depende da sequência ou do tempo
dos outros eventos, e no caso de uma condição de corrida incontrolável, pode acabar
se tornando um bug no sistema de execução, como podemos observar no SOSIM, que
se corretamente aplicado a execução de tarefas, veremos sua inicialização e
finalização rapidamente.
A principal desvantagem de um spinlock é que enquanto espera adquirir um bloqueio, ou
seja, uma tarefa que consuma um período de tempo, ele pode perder o tempo que
poderia ser gasto em um outro lugar e assim tendo uma produtividade aumentada
no sistema.
Aqui vemos o SOSIM demonstrando os
logs de execução de processos e depois suas prioridades demonstradas:
Dentro do Escalonamento com Prioridade, encontramos o Escalonamento
Circular com Prioridade, que no seu cerne é implementado o conceito de fatia de
tempo e de grau de prioridade de execução ligados em cada processo. Neste caso,
um processo só entrará em estado de espera, ou sofrerá uma preempção por tempo
ou prioridade (causar mudança de uma aplicação para outra).
A sua vantagem está atrelada a otimização do balanceamento
no uso do processador em sistemas tempo compartilhado.
·
Pode haver problemas com o escalonamento
com prioridades?
Há
como problema os processos que possuem baixa prioridade, pois podem não ser executados,
criando assim uma postergação indefinida.
Os processos com prioridade estática podem estar mal analisados, e assim sendo
favorecidos ou penalizados em relação aos outros processos. Bem comum em
processos que durante sua execução mudam de padrão de comportamento (I/O bound para CPU bound e vice
versa).
A
solução para estes, seria o uso de múltiplas filas com realimentação, que é
baseado em prioridade dinâmicas, o sistema de envelhecimento evita a
postergação indefinida.
·
Vamos ver como funciona os logs dentro do
SOSIM para compreender como é:
O tempo de espera
I/O é o tempo em que é necessário aguardar por uma entrada e saída da
tarefa e no final ele entra na fila de processos para ser executado pelo
thread, ou seja, os processos I/O não possuem o mesmo tempo de processamento do
que os processos CPU, pois demandam mais eventos para sua execução. O processo
I/O fica dentro do arquivo de paginação esperando para ser executado seu I/O,
após concluído o I/O, ele entra na fila de execução até ser executado, e
posteriormente seus dados na memória de paginação são realocados e ele passa a
ficar no gerenciamento de memória, até ser realocado novamente na paginação e
ocorrer um novo processo I/O.
Assim havendo um processo de realocação:
Processo em amarelo como exemplo de
I/O, onde ele está em memória esperando sua nova chamada de I/O para ser
realocado em paginação e entrar na fila até ser executado pelo thread,
esperando o spinlock do thread acabar no processo de
CPU Bound.
Ao diminuir o tempo de espera I/O, os
arquivos I/O irão para a fila geral de processos, criando uma fila de processos
I/O com maior prioridade, e quando se inicia a execução de um processo I/O,
todos os processos de maior prioridade serão executados, fazendo com que os
processos CPU Bound de menor prioridade parem de ser
executados.
REFERÊNCIAS
https://slideplayer.com.br/slide/3082027/.
Acessado em: 14 out. 2020.
https://alexcoletta.eng.br/artigos/escalonamento-de-processos/.
Acessado em: 14 out. 2020.
https://www.gsigma.ufsc.br/~popov/aulas/so1/cap8so.html.
Acessado em: 14 out. 2020.
http://www.univasf.edu.br/~andreza.leite/aulas/SO/ProcessosEscalonamento.pdf.
Acessado em: 14 out. 2020.
https://sites.google.com/site/proffernandosiqueiraso/aulas/8-gerencia-do-processador?tmpl=%2Fsystem%2Fapp%2Ftemplates%2Fprint%2F&showPrintDialog=1.
Acessado em: 14 out. 2020.