CPU SCHEDULING

O escalonamento de CPU é o ponto central de sistemas operacionais multiprogramáveis. Estes sistemas tornam o computador mais produtivo, na medida em que repartem o tempo de processamento da CPU entre diferentes processos.

Quando falarmos aqui de "processos" não estaremos fazendo distinção entre processos de usuários e processos internos do kernel, nem mesmo se estes são threads, lightweight process ou heavyweight process. Isto porque nossa intenção é criar um modelo genérico de escalonamento de CPU, podendo a CPU ser escalonada tanto para processos, tradicionalmente como são conhecidos, como para outros tipos de serviços que necessitem de tempo de processamento de CPU.

A "vida" de um processo (o tempo de sua execução) obedece a um comportamento cíclico. O processo alterna entre os estados de uso da CPU e de espera para I/O. Um processo que utilize mais a CPU do que faça serviços de I/O (CPU-bound) tem alguns poucos e longos períodos de uso de CPU. Já um processo que execute mais I/O do que cálculos na CPU (I/O-bound), contém vários e curtos períodos de utilização de CPU. A correta observação destas distribuições é muito importante na determinação do algoritmo de escalonamento apropriado.

Sempre que a CPU ficar ociosa, o sistema operacional deverá selecionar um processo na fila de processos prontos (ready queue) para serem executados na CPU. A Seleção deste processo é feita pelo escalonador da CPU (CPU Scheduler). O CPU Scheduler seleciona um processo na memória que esteja pronto para ser executado e aloca a CPU para um deles. Esta seleção irá obedecer a um critério de escalonamento, o qual irá determinar o algoritmo de escalonamento mais apropriado.

Outro componente presente no modelo é o Dispatcher. O Dispatcher irá dar o controle da CPU para o processo selecionado pelo CPU Scheduler. Para isso o Dispatcher deverá:

- Salvar o contexto do processo que está deixando a CPU (a menos que o processo esteja deixando a CPU porque tenha terminado sua tarefa);
- Carregar de volta o contexto do processo que está sendo alocado à CPU;
- Selecionar, ou seja, enviar para o CPU Scheduler um aviso de que a CPU está ociosa e que este deverá selecionar o próximo processo a ser alocado na CPU.

Critérios de Escalonamento

Diferentes algoritmos de escalonamento favorecem diferentes classes de processos, de acordo com os critérios que tal algoritmo venha a seguir. A escolha de algum critério de escalonamento irá fazer uma grande diferença na escolha do algoritmo de escalonamento. Os critérios seguintes são usados na determinação de que algoritmo usar para o escalonamento da CPU:

- Utilização da CPU: a intenção é manter a CPU ocupada o maior tempo possível;
- Throughput: a intenção é maximizar o throughput, ou seja, o número de processos completados por unidade de tempo;
- Turnaround Time: é o tempo que o processo leva para completar sua tarefa. Este tempo engloba o tempo gasto na fila de espera, o tempo para ser carregado na memória, o tempo em execução na CPU e o tempo fazendo I/O;
- Waiting Time: é a soma de todos os tempos gastos na fila de processos prontos para execução;
- Response Time: é o tempo que o processo leva para começar a produzir resultados.



Modelagem inicial:



Modelagem



Escalonador final:



Modelagem


Código fonte