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.