2. Conceitos Básicos
Escalonamento de Processador
Critérios de Escalonamento
Escalonamento Não Preemptivo
Escalonamento Preemptivo
Mecanismos de Interrupção em Intervalos de Tempo
Prioridades
Algoritmos de Escalonamento
Escalonamento para Vários Processadores
Escalonamento em Tempo Real
Estudo de Casos: Escalonamento no Unix, Windows XP,
Linux e de Threads
Eduardo Nicola F. Zagari
2
Escalonamento de CPU
3. Multiprogramação: corresponde a diversos programas distintos
executando em um mesmo processador
maximiza utilização da CPU
No entanto, somente um processo é executado a cada instante
em um processador
Toda vez que um processo tiver que esperar (evento ou E/S)
outro processo usa a CPU (“ciclo de vida” de um processo)
A execução de um processo consiste de um ciclo de execução de
CPU e espera de I/O
escalonado
pronto execução
interrupção
Escalonador
espera
E/S ou evento bloqueado por E/S
ou evento
Eduardo Nicola F. Zagari
3
Escalonamento de CPU
5. Conhecido como Escalonador de Processsos
Determina/Escolhe, dentre os processos que estão em memória,
qual processo será associado a uma CPU, quando esta estiver
disponível
Age sobre os processos prontos para executar (processos do
estado de pronto)
Segue uma política de escolha
Executado várias vezes por segundo
Reside permanentemente na memória
Eduardo Nicola F. Zagari
5
Escalonamento de CPU
6. Situação para escalonamento:
processo passa do estado em execução para pronto
processo passa de em execução para espera/bloqueado
processo passa de espera/bloqueado para pronto
processo termina
Preempção: é quando um processo em estado de pronto tem
precedência sobre o que está usando a CPU.
Escalonamenteo Não-Preemptivo: não contempla as
preempções, isto é, o escalonador não interrompe os processos
que estão em execução.
Escalonamento Preemptivo: que contempla a preempção das
tarefas, isto é, provoca uma interrupção forçada de um processo
para que outro, com a preempção, possa usar a CPU.
Eduardo Nicola F. Zagari
6
Escalonamento de CPU
7. Determina qual processo no estado pronto para executar será
associado a uma CPU, quando esta estiver disponível
É executado várias vezes por segundo
Reside permanentemente na memória
Eduardo Nicola F. Zagari
7
Escalonamento de CPU
8. Determina quais os processos que poderão competir pela CPU
Responsável pela suspensão e ativação de processos, o que
significa flutuações na carga do sistema visando um melhor
balanceamento
Atua como um buffer entre a admissão de jobs e a associação
da CPU aos processos que constituem os jobs admitidos
Job: é um conjunto de atividades necessárias para a realização
do trabalho computacional requerido por um usuário (divide-se
em diversos steps (passos) )
Eduardo Nicola F. Zagari
8
Escalonamento de CPU
9. Determina quais jobs serão admitidos e poderão competir pelos
recursos do sistema (admission scheduling)
Permite que não existam jobs em demasia no sistema, o que
acarretaria uma eterna competição pelos recursos
Todo job, uma vez admitido, acarreta na criação de um ou mais
processos
Eduardo Nicola F. Zagari
9
Escalonamento de CPU
10. O módulo Dispatcher dá o controle da CPU para o processo
selecionado pelo escalonador de curto prazo. Isto envolve:
Troca de contexto
Mudança do processador para o Modo Usuário
Salto para a localização adequada no programa do usuário para o
seu reinício
Latência de Despacho – tempo que leva para o dispatcher parar
um processo e reiniciar a execução de outro
Eduardo Nicola F. Zagari
10
Escalonamento de CPU
11. Utilização da CPU: % do tempo que a CPU fica ocupada (0 -
100%)
Throughput: número de processos completados por unidade de
tempo
Turnaround: intervalo de tempo entre a submissão de um
processo e sua finalização (soma dos intervalos esperando
para ser carregado na memória, fila de pronto, em execução e
em espera)
Tempo de espera: tempo que cada processo fica na fila de
pronto
Tempo de resposta: tempo que o processo demora para
produzir alguma resposta à uma requisição (importante para
processos interativos)
É desejável maximizar os 2 primeiros e minimizar os 3 últimos
Para sistemas interativos, é importante minimizar a variância do
tempo de resposta (previsibilidade)
Eduardo Nicola F. Zagari
11
Escalonamento de CPU
12. Objetivos das políticas de escalonamento:
maximizar a utilização da CPU
maximizar o throughput
minimizar o turnaround
minimizar o tempo de espera
minimizar o tempo de resposta
ser justa
maximizar o número de usuários interativos
ser previsível
minimizar o uso de recursos
balancear o uso de recursos
balancear usuários interativos com os demais
priorizar processo que segurem recursos chave
não degradar o sistema
etc
Eduardo Nicola F. Zagari
12
Escalonamento de CPU
13. Não permite a retirada da CPU de um processo após este tê-la
conseguido
Tempo de resposta é mais previsível
É mais justo?
Processos curtos precisam esperar pelos longos
Permite monopolização da CPU
Eduardo Nicola F. Zagari
13
Escalonamento de CPU
14. Permite que a CPU seja retirada de um processo para ser
entregue a outro
Garante que os processos possam progredir uniformemente
Não permite a monopolização da CPU
Usado para:
atendimento rápido de processos mais importantes
tratamento de interrupções em sistemas de tempo real
atender os usuários em sistemas de tempo compartilhado
A mudança de contexto envolve sobrecarga
Eduardo Nicola F. Zagari
14
Escalonamento de CPU
15. Para prevenir processos do usuário de monopolizar o sistema
(CPU), por acidente ou de propósito, uma interrupção por tempo
é usada
quantum ou time-slice
é o tempo limite para uso da CPU, após o qual ocorre a
interrupção por tempo
Um processo do usuário, uma vez interrompido por término do
seu quantum, volta à fila de pronto para executar e permite o
escalonamento de outro processo
Um processo em execução mantém controle sobre a CPU até:
voluntariamente liberá-la
quantum time expirado
outra interrupção exija atenção da CPU para que seja tratada
erro de execução
Eduardo Nicola F. Zagari
15
Escalonamento de CPU
16. Podem ser fixas (estáticas) durante a vida do processo ou
modificáveis (dinâmicas)
Podem ser associadas externamente ou de maneira automática
Podem ser calculadas e associadas de forma racional ou
arbitrária
Eduardo Nicola F. Zagari
16
Escalonamento de CPU
17. FIFO (First-In First-Out) (também conhecido por FCFS (First-
Come First-Served))
SJF (Shortest Job First)
Round-Robin
SRT (Shortest Remaining Time)
Prioridade
Múltiplas Filas
Múltiplas Filas com Realimentação
Escalonamento para Vários Processadores
Escalonamento de Tempo Real
Earliest Deadline
Eduardo Nicola F. Zagari
17
Escalonamento de CPU
18. Não preemptivo (Uma vez em execução, é executado até o
término)
O processo que chegar primeiro (first-in) é o primeiro a ser
selecionado para execução (first-out)
Implementado através de fila
Inicialmente criado para sistemas batch
Injusto com jobs curtos (veja exemplos!)
Ineficiente para sistemas de tempo compartilhado
Combinado com outros esquemas
Eduardo Nicola F. Zagari
18
Escalonamento de CPU
19. Suponha que os processos cheguem na ordem P1, P2 e P3
Turnaround médio = ( 10 + 12 + 14 ) / 3 = 12 u.t.
Tempo de espera médio = ( 0 + 10 + 12) / 3 = 7,33 u.t.
Eduardo Nicola F. Zagari
19
Escalonamento de CPU
20. Suponha que os processos cheguem na ordem P2, P3 e P1
Turnaround médio: ( 14 + 2 + 4 ) / 3 = 6,67 u.t.
Tempo de espera médio = ( 4 + 0 + 2) / 3 = 2 u.t.
Eduardo Nicola F. Zagari
20
Escalonamento de CPU
21. Não preemptivo
O processo com o menor tempo para ser completado é
escolhido
quando a informação sobre o tempo de execução não se encontra
disponível deve ser estimado ou usa-se o da última vez
desempate pode ser, por exemplo, por FIFO
Reduz tempo médio de espera mais do que isto: SJF é
ótimo, pois dá o tempo de espera mínimo para um dado
conjunto de processos
No entanto, apresenta uma grande variância no tempo de
espera
Eduardo Nicola F. Zagari
21
Escalonamento de CPU
22. Turnaround médio FIFO: (6+14+21+24)/4 = 16,25 u.t.
Tempo de espera médio: (0 + 6 + 14 + 21)/4 = 10,25 u.t.
Turnaround médio SJF: (3 + 9 + 16 + 24) / 4 = 13 u.t.
Tempo de espera médio: (3 + 16 + 9 + 0) / 4 = 7 u.t.
Eduardo Nicola F. Zagari
22
Escalonamento de CPU
23. O processo em execução libera voluntariamente a CPU
retornando para a fila de pronto sem a interrupção do sistema
operacional (não preemptivo)
Um programa mal escrito pode monopolizar a CPU
Fila de mensagem é verificada periodicamente (Win 3.11)
Eduardo Nicola F. Zagari
23
Escalonamento de CPU
24. Define-se uma unidade de tempo denominada quantum ou time-
slice (usualmente de 10 a 100ms) que corresponde ao tempo
limite para uso da CPU por cada processo
Após este tempo ter sido passado, o processo sofre preempção
e é colocado no final da fila de pronto
A fila de pronto é tratada como uma fila circular (FIFO)
O escalonador “pega” o primeiro processo da fila de pronto para
ser executado e define um timer para o tempo de 1 quantum
Se o tempo de execução for maior que 1 quantum, o timer gera
uma interrupção e o SO faz o chaveamento de contexto
Projetado para sistemas de tempo compartilhado
Se houver n processos na fila de pronto e o tempo do quantum for
q, então cada processo obtém 1/n do tempo da CPU e fatias de no
máximo q unidades de tempo por vez. Nenhum processo espera
por mais que (n-1)q unidades de tempo.
Eduardo Nicola F. Zagari
24
Escalonamento de CPU
25. Claramente preemptivo
O tempo médio de espera é alto
O desempenho depende do tamanho do quantum
se for muito grande (infinito) tende a FIFO
se for muito pequeno, o overhead com ochaveamento de
contexto se torna alto demais...
Eduardo Nicola F. Zagari
25
Escalonamento de CPU
26. Quantum = 1 u.t.
Turnaround médio RR: (16 + 8 + 9) /3 = 11 u.t.
Tipicamente, o turnaround médio é maior que o do SJF, mas o
tempo de resposta é melhor
Eduardo Nicola F. Zagari
26
Escalonamento de CPU
27. É a contra-partida preemptiva do SJF
O processo com menor tempo para ser completado é escolhido
Um processo em execução é interrompido se um novo processo,
com menor tempo para ser completado aparece na fila de pronto
Apresenta sobrecarga maior que o SJF
Variações:
Tempo para ser completado pequeno
Tempo para ser completado do processo que chega é pouco
menor
Eduardo Nicola F. Zagari
27
Escalonamento de CPU
28. Turnaround médio SRT: ((17-0)+(5-1)+(26-2)+(10-3))/4 = 13 u.t.
E qual é o turnaround médio se fosse escalonado segundo SJF?
Resp.: 14,25 u.t.
Eduardo Nicola F. Zagari
28
Escalonamento de CPU
29. Uma prioridade é associada a cada processo e a CPU é alocada
ao processo de maior prioridade
SJF é um caso de escalonamento por prioridade em que a
prioridade é maior para os processos de menor tempo de
execução
A prioridade é geralmente representada por um número (entre
0-7 ou 0-255), mas não existe uma convenção de qual número
(o maior ou o menor) é o de maior prioridade
Pode ser preemptivo ou não
SJF é um Escalonamento por Prioridade onde a prioridade é
definida de acordo com o tempo de CPU estimado do processo
Eduardo Nicola F. Zagari
29
Escalonamento de CPU
30. Turnaround médio: (16+1+6+18+19)/4 = 15 u.t.
Eduardo Nicola F. Zagari
30
Escalonamento de CPU
31. Prioridade definida:
internamente: usa alguma quantidade mensurável para computar a
prioridade.
(dinâmica)
Ex.: memória, arq. abertos, razão I/O por CPU usada
externamente: importância do processo, departamento de origem,
fatores políticos, hierarquia.
(estática)
Problema: starvation - processos de baixa prioridade podem
ficar indefinidamente no estado de pronto (IBM 7094 no MIT
processo rodando por 6 anos)
Solução: aumentar progressivamente a prioridade dos
processos que estão aguardando
Eduardo Nicola F. Zagari
31
Escalonamento de CPU
32. Os processos são previamente divididos em grupos em função do
tipo de processamento realizado
Interativo (foreground)
Batch (background)
A cada grupo é aplicado um mecanismo de escalonamento
adequado
Alta
Fila de processos
Interativo – RR
prioridade do sistema
Batch – FIFO
Fila de processos
Possibilidade de
interativos
starvation
Baixa Fila de processos
prioridade batch
utra alternativa: time-slices entre filas (ex.: 80% para os interativos
O
em RR e 20% para os batch em FIFO)
Eduardo Nicola F. Zagari
32
Escalonamento de CPU
33. Os processos não permanecem em uma mesma fila até o término
do processamento
O SO faz um ajuste dinâmico (mecanismo adaptativo) para ajustar
os processos em função do comportamento do sistema
Os processos não são previamente associados às filas, mas
direcionados pelo sistema entre as diversas filas com base no seu
comportamento
Parâmetros:
número de filas,
algoritmo de escalonamento para cada fila,
método para mudar (promover ou rebaixar) o processo de fila,
método para determinar em que fila um processo entra
Método mais complexo
Eduardo Nicola F. Zagari
33
Escalonamento de CPU
34. Um exemplo (existem outras variações):
Processos novos entram no fim da primeira fila
Nas filas, os processos são escalonados segundo Round Robin
O quantum varia de uma fila para outra (aumenta em direção às
últimas, quantum 1 para a primeira, 2 para a segunda, etc)
Os processos das primeiras filas têm maior prioridade (um processo
não pode ser escolhido, a menos que, as filas anteriores estejam
vazias)
Um processo em execução é interrompido, caso apareça um processo
em uma das filas anteriores à sua
Sempre que um processo esgotar seu quantum , ele é suspenso na fila
da próxima classe de prioridade
Se o processo liberar a CPU, sem preempção, sai da estrutura de filas
Quando um processo volta à estrutura, é colocado em uma fila de
prioridade mais alta do que estava antes de sair
Eduardo Nicola F. Zagari
34
Escalonamento de CPU
35. Alta Menor
prioridade Fila 1 quantum
Fila 2
Fila 3
...
Baixa Fila N Maior
prioridade quantum
Eduardo Nicola F. Zagari
35
Escalonamento de CPU
36. Vantagens de uma política como esta:
Processos CPU-bound vão caindo em filas de prioridade mais baixas,
sendo escolhidos para rodar com menos freqüência; no entanto, eles
recebem quanta maiores, necessitando receber a CPU por um número
menor de vezes, o que reduz a quantidade trocas de contexto
Processos interativos (I/O-bound), normalmente pequenos, são
favorecidos, reduzindo-se o tempo de resposta médio do sistema
Processos interativos grandes, após interação com usuários, retornam
em filas de prioridade mais alta
Problema: pressionar <ENTER> em terminais processando longos
jobs não interativos (CPU-bound)
Moral da história: implementar uma boa política na prática é
muitíssimo mais difícil do que idealizá-la
Eduardo Nicola F. Zagari
36
Escalonamento de CPU
37. Escalonamento mais complexo
Processadores idênticos (homogêneos)
Compartilhamento de carga (load sharing)
Fila por processador: processador pode ficar ocioso
Fila única: compartilhamento de dados (problemas!)
Abordagens:
Processamento simétrico
Cada processador faz seu próprio escalonamento (exclusão
mútua!)
Mestre-Escravo: processamento assimétrico
um algoritmo, executado em um processador reservado para
esse fim, é o escalonador dos outros processadores (alivia a
necessidade de compartilhamento de dados)
Eduardo Nicola F. Zagari
37
Escalonamento de CPU
38. Sistemas de tempo real: requisitos temporais
Tempo compartilhado puro não funciona
Hard real-time: requisitos temporais rígidos requer que uma tarefa
crítica seja completada dentro de um tempo garantido
Ex.: tráfego aéreo, armas, sistemas médicos, controle industrial,
etc
Soft real-time: requisitos temporais flexíveis requer que um processo
crítico receba prioridade sobre outros menos importantes
Ex.: multimídia, realidade virtual, etc
Sistemas de TR rígidos: processadores dedicados
Sistemas de TR flexíveis:
Implementados com outros esquemas
Processos críticos devem ter prioridade sobre outros
Implica na degradação do serviço dos outros usuários
Eduardo Nicola F. Zagari
38
Escalonamento de CPU
39. Escalonamento baseado em prioridades dinâmicas
A idéia básica é atribuir sempre a maior prioridade ao processo que
apresentar o prazo mais próximo a expirar (earliest deadline)
Sempre que um novo processo chega na fila de pronto, são
calculadas e atribuídas novas prioridades a todos
O Earliest Deadline é um algoritmo ótimo, isto é, o fator de
utilização da CPU é 100%
Se os processos não forem independentes:
Problema da Inversão de Prioridades
Solução: Protocolo de Herança de Prioridade
– Conseqüência: queda no fator de utilização da CPU
Eduardo Nicola F. Zagari
39
Escalonamento de CPU
41. Unix Sistema de Tempo Compartilhado
Meta: bom tempo de resposta aos processos interativos
Escalonamento de 2 níveis
Escalonador de baixo nível: Filas Múltiplas (prioridade) com
realimentação
Processos executando em modo kernel: prioridade negativa (que são as
maiores)
Processos executando em modo usuário: prioridade positiva
Roda primeiro processo da fila prioritária não vazia interrupções de
tempo: incremento do contador de utilização da CPU (que aumentará o
valor da prioridade do processo)
Round-Robin dentro de cada fila
A cada segundo as prioridades são recalculadas:
Contadores de uso da CPU divididos por 2
Nova prioridade = base + nice + contador de uso da CPU
Processos interativos voltam do bloqueio com prioridade negativa.
Eduardo Nicola F. Zagari
41
Escalonamento de CPU
43. Dois algoritmos: time-sharing e real-time
Time-sharing
Prioridades baseadas em créditos – processo com mais créditos é o
próximo a ser escalonado
Crédito subtraído quando ocorre uma interrupção por tempo
Quando crédito = 0, outro processo é escolhido
Quando todos os processos têm crédito = 0, ocorre
“recarregamento” de créditos
Baseado em alguns fatores como prioridade e histórico
Real-time
Soft real-time (TR Flexível)
Aderente ao Posix.1b – duas classes
FIFO e RR
Processos de maior prioridade sempre executam primeiro
Eduardo Nicola F. Zagari
43
Escalonamento de CPU
44. Escalonamento Local – Como a biblioteca de threads decide
qual thread do usuário executar quando há um LWP disponível
Escalonamento Global – Como o kernel decide qual kernel
thread deve ser a próxima a ser executada
Eduardo Nicola F. Zagari
44
Escalonamento de CPU
45. #include <pthread.h>
#include <stdio.h>
#define NUM THREADS 5
int main(int argc, char *argv[])
{
int i;
pthread t tid[NUM THREADS];
pthread attr t attr;
/* get the default attributes */
pthread attr init(&attr);
/* set the scheduling algorithm to PROCESS or
SYSTEM */
pthread attr setscope(&attr, PTHREAD SCOPE SYSTEM);
/* set the scheduling policy - FIFO, RT, or OTHER */
pthread attr setschedpolicy(&attr, SCHED OTHER);
/* create the threads */
for (i = 0; i < NUM THREADS; i++)
pthread create(&tid[i],&attr,runner,NULL);
Eduardo Nicola F. Zagari
45
Escalonamento de CPU
46. /* now join on each thread */
for (i = 0; i < NUM THREADS; i++)
pthread join(tid[i], NULL);
}
/* Each thread will begin control in
this function */
void *runner(void *param)
{
printf("I am a threadn");
pthread exit(0);
}
Eduardo Nicola F. Zagari
46
Escalonamento de CPU
47. JVM usa um algoritmo de escalonamento baseado em
prioridades e preemptivo
Uma fila FIFO é usada se houver múltiplas threads com a
mesma prioridade
JVM escalona uma thread para executar quando:
1. A thread “em execução” sai do estado de “executável”
2. Uma thread de maior prioridade entra no estado “executável”
* Nota – a JVM não especifica se threads são “Time-Sliced” ou não
Eduardo Nicola F. Zagari
47
Escalonamento de CPU
48. Uma vez que a JVM não assegura Time-Slicing, o método yield()
pode ser usado:
while (true) {
// perform CPU-intensive task
. . .
Thread.yield();
}
Isto passa o controle a uma outra thread de igual prioridade
Eduardo Nicola F. Zagari
48
Escalonamento de CPU
49. Prioridade
Comentário
Thread.MIN_PRIORITY
Prioridade Mínima de Thread
Thread.MAX_PRIORITY
Prioridade Máxima de Thread
Thread.NORM_PRIORITY
Prioridade Default de Thread
As prioridades podem ser ajustadas usando-se o método
setPriority():
setPriority(Thread.NORM_PRIORITY + 2);
Eduardo Nicola F. Zagari
49
Escalonamento de CPU