ESCALONAMENTO

O escalonamento de processos ou escalonamento do processador é a atividade do SO responsável por escolher qual processo vai ser executado pelo processador (CPU) e por quanto tempo (alguns milissegundos) ele vai ficar executando. A parte do SO que faz esta escolha é chamada de escalonador e o algoritmo que ele usa para fazer essa escolha é o algoritmo de escalonamento (TANNENBAUM, 2016).

Todos os processos (programas em execução) que estão ativos ficam aguardando em uma fila até que o SO escolha um deles para utilizar a CPU por um período determinado, denominado fatia de tempo (time-slice), normalmente de 20 a 30 milissegundos, ou até que executem uma operação de entrada e saída antes do término da sua fatia de tempo. Ao terminar a fatia de tempo, o mesmo é colocado no final da fila e o processo que está na frente da fila passa a executar. Se durante a execução ele necessita de uma operação de entrada e saída, o mesmo é retirado da execução e colocado na fila de processos bloqueados, que estão aguardando uma operação de entrada e saída; quando a operação de entrada e saída está concluída, o processo é colocado na fila de processos que estão aguardando a execução.

Quando um processo faz uma requisição de uma operação de entrada e saída, imediatamente ele perde o processador e fica na fila de processos bloqueados, porque uma operação de entrada e saída demora mais do que a fatia de tempo restante que ele teria disponível para usar a CPU, e como ele depende da operação de E/S, não há motivo para ele ficar aguardando e deixar a CPU ociosa.

A forma como o escalonamento é realizado é responsável pela produtividade e eficiência atingidas por um sistema computacional e envolve política de tratamento dos processos que permita obter os melhores resultados possíveis. A política de um escalonador deve levar em conta os seguintes objetivos (TANNENBAUM, 2016):

a) Justiça: dar a cada processo uma porção justa da CPU;

b) Aplicação da política: verificar se a política estabelecida está sendo cumprida;

c) Equilíbrio: manter ocupadas todas as partes do sistema;

d) Vazão (throughput): maximizar o número de tarefas executadas;

e) Utilização de CPU: manter a CPU ocupada o tempo todo;

f) Tempo de resposta: responder rapidamente às requisições; 

g) Proporcionalidade: satisfazer às expectativas dos usuários;

h) Previsibilidade: evitar a degradação da qualidade.

Um algoritmo de escalonamento pode ser não preemptivo quando o processador designado para um certo processo não pode ser retirado deste até que o processo seja finalizado. Já um algoritmo de escalonamento é considerado preemptivo quando o processador designado para um processo pode ser retirado deste em favor de um outro processo. Os sistemas modernos utilizam algoritmo preemptivo, determinando uma fatia de tempo máximo de alguns milissegundos para cada processo utilizar a CPU.

Há diferentes tipos de algoritmos de escalonamento, mas o principal modelo utilizado nos SOs atuais é baseado em múltiplas filas, com prioridades. Neste modelo, os processos são classificados de acordo com sua característica, se são I/O Bound ou CPU Bound e colocados em diferentes filas com prioridades diferentes. Sempre que tiver um processo pronto para ser executado em uma fila com prioridade maior ele será executado. Não havendo processos nas filas de prioridades mais altas, os processos de menor prioridade são executados. Ao final de cada ciclo de execução, os processos são reavaliados para reenquadrá-los nas devidas filas e prioridades.

As prioridades de execução também podem ser ajustadas pelo usuário ou pelo programa. Por exemplo, um programa antivírus pode ser programado para executar com uma prioridade baixa, para que ele seja executado quando os recursos estiverem ociosos, em segundo plano, não atrapalhando e degradando a utilização do computador enquanto ele atua; mas também pode ser programado para executar com prioridade alta, exigindo todos os recursos para ele realizar a tarefa de verificação, praticamente inviabilizando o uso de outros programas enquanto ele não completa a tarefa.

O Windows, por exemplo, implementa 32 níveis de prioridades, em 7 classes de prioridades:

• Ociosa (Idle);

• Baixa (Lowest);

• Abaixo do Normal (Bellow Normal); 

• Normal;

• Acima do Normal (Above Normal); 

• Alta (Highest);

• Tempo crítico (Time Critical).

O escalonador Linux também provê a existência de prioridades dinâmicas, monitorando o comportamento de um processo e ajustando dinamicamente sua prioridade. Os processos que ocuparam o processador durante um período de tempo maior têm sua prioridade reduzida. De forma análoga, aqueles que estão há mais tempo sem executar recebem um aumento na sua prioridade. O escalonador possui 140 níveis de prioridade (quanto menor o número, maior é a prioridade). Prioridades de 1 a 100 são para processos de tempo real; de 101 a 140 para os demais processos de usuário (interativos ou não interativos). Nos níveis de prioridade 101 a 140, os processos recebem fatias de tempo de 20 milissegundos. 

Se quiser saber mais sobre o processo de escalonamento veja o vídeo



ATIVIDADE DE FIXAÇÃO (TURMA 01)

ATIVIDADE DE FIXAÇÃO (TURMA 02)

Comentários

Postagens mais visitadas deste blog

Transferência de arquivo por FTP

TIPOS DE PROCESSOS

Tipos de Servidores