Transcript P 1
Capítulo 5: Escalonamento de
CPU
Operating System Concepts – 8th Edition
Silberschatz, Galvin and Gagne ©2009
Conceitos básicos
Utilização máxima da CPU obtida com a multiprogramação
Execução de processos consiste de ciclos contendo rajadas
de requisições a CPU e tempo de espera por I/O
Operating System Concepts – 8th Edition
5.2
Silberschatz, Galvin and Gagne ©2009
Ciclo de uso da CPU
Operating System Concepts – 8th Edition
5.3
Silberschatz, Galvin and Gagne ©2009
Histograma do tempo da rajada de
requisições para a CPU
Operating System Concepts – 8th Edition
5.4
Silberschatz, Galvin and Gagne ©2009
Escalonador de CPU
O escalonador escolhe um processo na fila ready e aloca a CPU para ele
A fila pode ser ordenada de acordo com diferentes critérios
Fila de prontos (ready): Novos processos que ainda não
acessaram a CPU, processos em execução que foram retirados da
CPU devido a uma interrupção e processos que estavam
esperando uma resposta de I/O e receberam essa resposta
Operating System Concepts – 8th Edition
5.5
Silberschatz, Galvin and Gagne ©2009
Escalonador de CPU
Decisões de escalonamento de CPU são tomadas quando um processo:
1.
Sai do estado de execução (running) para o estado de espera (waiting)
2.
Sai do estado de execução (running) para o estado de pronto (ready)
3.
Ocorre quando acontece uma interrupção de clock
Sai do estado de espera (waiting) para o estado de pronto (ready)
4.
Ocorre quando existe uma solicitação de I/O
Ocorre quando acontece uma interrupção avisando o fim de uma
operação de I/O
Termina
O escalonamento nas condições 1 e 4 é não preemptivo ou colaborativo
O escalonamento nas condições 2 e 3 é preemptivo
Operating System Concepts – 8th Edition
5.6
Silberschatz, Galvin and Gagne ©2009
Escalonador de CPU
Preempção
Interrupção de clock
Interrupção de I/O
Troca de contexto irá depender do escalonador
Operating System Concepts – 8th Edition
5.7
Silberschatz, Galvin and Gagne ©2009
Escalonador de CPU – Acesso a dados
compartilhados
Processo 1
Processo 2
Variável A compartilhada
Variável A compartilhada
Leia do disco
Leia variável A
Escreve resultado em A
Escreve resultado na tela
Execução
•
SO escolhe P1
•
•
•
P1 lê do disco e começa a escrever o resultado em A
x x x
... x x x
1 0 1
... x x x
1 0 1
... 0 0 0
SO para P1 e dá a vez a P2
•
P2 lê valor inconsistente em A
•
P2 escreve valor inconsistente (1 0 1 1 x x x x) na tela
P2 termina e passa a vez a P1
•
P1 acaba de escrever resultado em A
Operating System Concepts – 8th Edition
5.8
Silberschatz, Galvin and Gagne ©2009
Escalonador de CPU – Preempção no
modo kernel
Se o sistema operacional aplicasse preempção sobre o seu próprio
funcionamento durante chamadas de sistema:
Processo 1
Processo 2
Leia do disco
Leia do disco
Escreve resultado em A
Escreve resultado na tela
Chamadas de sistema
Operating System Concepts – 8th Edition
5.9
Controle passa para o kernel
Silberschatz, Galvin and Gagne ©2009
Escalonador de CPU – Preempção no
modo kernel
Se o sistema operacional aplicasse preempção sobre o seu próprio
funcionamento durante chamadas de sistema:
Execução
•
SO escolhe P1
•
•
•
P1 faz chamada de sistema para leitura de disco
• geral,
PassagemSOs
para o não
modo kernel
e inicio
da atualização
do ponteiro de
leitura de
Em
fazem
troca
de contexto
durante
disco
chamadas de sistema!
SO para P1 e dá a vez a P2
•
P2 faz chamada de sistema para leitura de disco
•
Passagem para o modo kernel e inicio da atualização do ponteiro de
leitura de disco, sobrescrevendo dados de P1
SO para P2 e dá a vez a P1
•
Fim da atualização do ponteiro para P1
•
(...)
Operating System Concepts – 8th Edition
5.10
Valor inconsistente
no ponteiro
Silberschatz, Galvin and Gagne ©2009
Despachante
O despachante dá ao processo selecionado pelo escalonador o
acesso a CPU. Para tanto, ele realiza:
Troca de contexto
Comutação para o modo usuário
Direcionamento para a parte adequada do programa do usuário
para reiniciar o programa
Latência de despacho– tempo que o despachante gasta entre
parar um processo e iniciar outro
Operating System Concepts – 8th Edition
5.11
Silberschatz, Galvin and Gagne ©2009
Critérios de Escalonamento
Utilização de CPU
Vazão
Diminuir o tempo para executar um certo processo (tempo de execução +
tempo em filas)
Tempo de espera
Aumentar o número de processos que são terminados por unidade de
tempo
Tempo de Turnaround
Manter a CPU utilizada pelo maior tempo possível
Diminuir o tempo que o processo espera na fila de prontos (ready) (tempo
em filas)
Tempo de resposta
Diminuir o tempo entre a submissão de um pedido e a obtenção da
primeira resposta (não necessariamente a saída do processo) (tempo de
execução até primeira resposta + tempo em filas)
Operating System Concepts – 8th Edition
5.12
Silberschatz, Galvin and Gagne ©2009
Algoritmos de escalonamento
First-Come, First-Served (FCFS) Scheduling
Shortest-Job-First (SJF) Scheduling
Shortest-remaining-time-first
Escalonamento por prioridade
Round Robin (RR)
Filas multiníveis
Filas multiníveis com realimentação
Operating System Concepts – 8th Edition
5.13
Silberschatz, Galvin and Gagne ©2009
First-Come, First-Served (FCFS) Scheduling
Semelhante à fila FIFO, sem preempção
Processo Tempo de Rajada
P1
24
P2
3
P3
3
Assuma que os processos cheguem na ordem: P1 , P2 , P3
Então:
P1
0
P2
24
P3
27
30
Tempo de espera: P1 = 0; P2 = 24; P3 = 27
Tempo de espera médio: (0 + 24 + 27)/3 = 17
Operating System Concepts – 8th Edition
5.14
Silberschatz, Galvin and Gagne ©2009
FCFS Scheduling (Cont.)
Agora, assuma que os processo chegam na ordem: P2 , P3 , P1
Então:
P2
P3
P1
0
3
6
Tempo de espera: P1 = 6; P2 = 0; P3 = 3
30
Tempo de espera médio: (6 + 0 + 3)/3 = 3
Muito melhor que no exemplo anterior
Efeito comboio
Processo pequeno após processos longos pode causar uma baixa
utilização da CPU
Operating System Concepts – 8th Edition
5.15
Silberschatz, Galvin and Gagne ©2009
FCFS
Efeito comboio
P1
P2
P2
P3
Ocioso
P1
P2
P2
P3
Espera por I/O de P1
Espera por I/O de P2
Espera por I/O de P3
Desvantagens
Atrasos grandes
Baixa utilização da CPU
Operating System Concepts – 8th Edition
5.16
Silberschatz, Galvin and Gagne ©2009
Shortest-Job-First (SJF) Scheduling
Associar cada processo com o comprimento de sua próxima
rajada de uso de CPU
O próximo processo a acessar a CPU é aquele que apresentar
o menor tempo de uso de CPU
• Não está relacionado ao tamanho do job, mas ao
tamanho esperado até o próximo pedido de E/S
• Pode ter ou não preempção
Operating System Concepts – 8th Edition
5.17
Silberschatz, Galvin and Gagne ©2009
Shortest-Job-First (SJF) Scheduling
SJF é um algoritmo ótimo para garantir o tempo médio mínimo
Garante um tempo de espera médio mínimo dado um conjunto
de processos
Problema
Descobrir
qual o tempo da rajada de uso de CPU
Ideal apenas para garantir o tempo médio mínimo. Um
processo orientado a CPU em meio a inúmeros processos
orientados a I/O pode nunca conseguir o acesso à CPU
Operating System Concepts – 8th Edition
5.18
Silberschatz, Galvin and Gagne ©2009
Exemplo de SJF
Tempo de chegada do processo
Tempo de rajada
P1
0.0
6
P2
2.0
8
P3
4.0
7
P4
5.0
3
Então:
P4
0
P3
P1
3
9
P2
16
24
Tempo de espera médio = (3 + 16 + 9 + 0) / 4 = 7
Operating System Concepts – 8th Edition
5.19
Silberschatz, Galvin and Gagne ©2009
Determinando o tempo da próxima
rajada de CPU
Pode ser apenas estimado
Portanto, é escolhido o processo com menor tempo previsto
Estimativa pode ser feita utilizando o tempo das rajadas anteriores
daquele processo
1. tn
= duração da n-ésima rajada de uso de CPU
2.
n 1= valor previsto para a próxima rajada de uso de CPU
3.
α, 0 ≤ α ≤ 1
4.
Defina:
n1 tn 1 n .
Geralmente, α = ½
Operating System Concepts – 8th Edition
5.20
Silberschatz, Galvin and Gagne ©2009
Predição do comprimento da próxima
rajada de CPU
Operating System Concepts – 8th Edition
5.21
Silberschatz, Galvin and Gagne ©2009
Shortest-remaining-time-first
Versão do Menor Job Primeiro (SJF) com preempção
Exemplo:
Processo
P1
0
8
P2
1
4
P3
2
9
P4
3
5
Então:
1
P1
P4
P2
P1
0
Tempo de chegada Tempo de rajada
5
10
Ver no quadro o
funcionamento.
P3
17
26
Tempo de espera médio = [(10-1)+(1-1)+(17-2)+5-3)]/4 = 26/4 = 6.5 ms
Sem preempção: Tempo médio = 7,75 ms
Operating System Concepts – 8th Edition
5.22
Silberschatz, Galvin and Gagne ©2009
Escalonamento por Prioridade
Uma prioridade é associada com cada processo
A CPU é alocada ao processo com maior prioridade (menor inteiro maior
prioridade)
Preemptivo
Não-preemptivo
O SJF é um escalonamento por prioridade, no qual a prioridade vale o inverso
do tempo previsto para a próxima rajada de CPU
Problema Inanição – Processos com baixa prioridade podem não ser
executados nunca
Solução Envelhecimento – Prioridade de um processo aumenta com o
passar do tempo
Supondo uma prioridade variando de 0 a N, 0 pode representar
a mais alta ou a mais baixa prioridade. Daqui para frente, será
usada a notação de 0 como mais alta prioridade.
Operating System Concepts – 8th Edition
5.23
Silberschatz, Galvin and Gagne ©2009
Exemplo de escalonamento por prioridade
Processo
Prioridade
P1
10
3
P2
1
1
P3
2
4
P4
1
5
P5
5
2
Chegada de todos em
T0
Definida
internamente ou
externamente
Então:
0
P1
P5
P2
Tempo de rajada
1
P3
6
16
Tempo de espera médio = 8.2 ms
Operating System Concepts – 8th Edition
5.24
P4
18
19
Exemplo sem
preempção igual ao
mesmo exemplo com
preempção, pois
todos chegam ao
mesmo tempo
Silberschatz, Galvin and Gagne ©2009
Round Robin (RR)
Semelhante ao FCFS com preempção.
Cada processo recebe uma unidade de tempo pequena, chamada de quantum
de tempo (q), que usualmente vale entre 10-100 milissegundos.
Após o fim de um quantum, o processo é deixa a CPU por preempção e é
adicionado ao final da fila de prontos.
P1
P2
P3
P4
...
Pn
Fim do quantum ou espera por E/S
Operating System Concepts – 8th Edition
5.25
Silberschatz, Galvin and Gagne ©2009
Exemplo de RR com Quantum = 4
Processo
Tempo de rajada
P1
24
P2
P3
3
3
Então:
P1
0
P2
4
P3
7
P1
10
P1
14
P1
18
22
P1
P1
26
30
Tipicamente, apresenta um tempo de turnaround maior que o SJF, mas
com melhor tempo de resposta
q deve ser grande, quando comparado ao tempo de troca de contexto
(Usualmente, q ~ 10ms a 100ms, troca de contexto < 10 us)
Operating System Concepts – 8th Edition
5.26
Silberschatz, Galvin and Gagne ©2009
Round Robin (RR)
Se existem n processos na fila de prontos e o quantum de tempo vale q, então
cada processo recebe 1/n do tempo de CPU dividido em intervalos de tempo
com q unidades de tempo. Nenhum processo esperará mais do que (n-1)q
unidades de tempo.
Ex: 5 processos, quantum = 20 ms
-Cada processo recebe 20 ms de CPU a cada 5*20=100
ms
O temporizador gera uma interrupção a cada quantum para escalonar o
próximo processo
Desempenho
q grande FIFO
q pequeno s q não for grande com relação ao tempo de troca de
contexto, então a sobrecarga é muito alta
Operating System Concepts – 8th Edition
5.27
Silberschatz, Galvin and Gagne ©2009
Quantum e troca de contexto
Operating System Concepts – 8th Edition
5.28
Silberschatz, Galvin and Gagne ©2009
Variação do tempo de turnaround médio
de acordo com o quantum
80% das rajadas de CPU
devem ser menores que q
Operating System Concepts – 8th Edition
5.29
Silberschatz, Galvin and Gagne ©2009
Filas Multiníveis
Fila de prontos é particionada em diferentes filas. Ex:
foreground (processos interativos)
background (processos em batch)
Processos permanentemente em uma dada fila
Cada fila tem o seu próprio algoritmo de escalonamento:
Ex:
foreground – RR
background – FCFS
O escalonamento precisa ser realizado entre filas:
Escalonamento com prioridade fixa
Ex: Servir a todos os processos de foreground antes de servir os
processos de background (Possibilidade de inanição).
Porção de tempo – cada fila obtém uma certa quantidade de tempo de CPU
Exemplo: 80% para foreground em RR e 20% para background em
FCFS
Operating System Concepts – 8th Edition
5.30
Silberschatz, Galvin and Gagne ©2009
Escalonamento em filas multiníveis
Operating System Concepts – 8th Edition
5.31
Silberschatz, Galvin and Gagne ©2009
Filas multiníveis com realimentação
Um processo pode ser movido entre várias filas
Envelhecimento pode ser implementado dessa forma
Parâmetros do escalonador:
Número de filas
Algoritmo de escalonamento de cada fila
Método para determinar o processo de escalonamento entre
filas
Método para rebaixar um processo
Método para determinar a qual fila pertence um novo
processo
Operating System Concepts – 8th Edition
5.32
Silberschatz, Galvin and Gagne ©2009
Exemplo de Filas multiníveis com
realimentação
Três filas:
Q0 – RR com quantum de 8 ms
Q1 – RR com quantum de 16 ms
Q2 – FCFS
Escalonamento
Rebaixamento de jobs
Novos jobs na fila Q0
–
Quando o processo chega a CPU, pode ser processado por no
máximo 8 ms
–
Se precisar de mais tempo de CPU, o job é movido para a fila Q1
Na fila Q1 , o job recebe um máximo de 16 ms de tempo de CPU
–
Se não for suficiente para terminar ou fazer um pedido de I/O, ele
é posto em Q2
Entre filas: Q2 só é acessada quando não existem jobs em Q1, que por
sua vez só é acessada quando não existem jobs em Q0
Operating System Concepts – 8th Edition
5.33
Silberschatz, Galvin and Gagne ©2009
Filas multiníveis com realimentação
Sujeito a inanição!
Operating System Concepts – 8th Edition
5.34
Silberschatz, Galvin and Gagne ©2009
Escalonamento de Threads
Distinção entre threads de nível de usuário e de nível de kernel
Usuário – gerenciados por biblioteca, sem interferência do kernel
Biblioteca mapeia os threads de usuário em processos leves
Kernel – gerenciados pelo kernel
Operating System Concepts – 8th Edition
5.35
Silberschatz, Galvin and Gagne ©2009
Relembrando... Modelos multithreads
Operating System Concepts – 8th Edition
5.36
Silberschatz, Galvin and Gagne ©2009
Escalonamento de Threads
Distinção entre threads de nível de usuário e de nível de kernel
Usuário – gerenciados por biblioteca, sem interferência do kernel
Biblioteca mapeia os threads de usuário em processos leves
Kernel – gerenciados pelo kernel
Quando o sistema tem suporte a thread, threads são escalonados e não
processos
Cada processo é mapeado em um ou mais threads
Operating System Concepts – 8th Edition
5.37
Silberschatz, Galvin and Gagne ©2009
Relembrando....Processos e Threads
Operating System Concepts – 8th Edition
5.38
Silberschatz, Galvin and Gagne ©2009
Escalonamento com múltiplos
processadores
Escalonamento de CPU é mais complexo quando múltiplas CPUs estão em
uso
Multiprocessadores
Homogêneos
Todos os processadores tem capacidades iguais
Heterogêneos
Multiprocessamento
Assimétrico
Simples
–
Um processador (mestre) cuida do escalonamento, processamento
de I/O e outras atividades do sistema
–
Demais processadores executam código de usuários
Usado em
Simétrico
praticamente
todos os
Cada processador cuida do seu próprio escalonamento
sistemas
Fila de prontos pode ser única ou por processador
Silberschatz,operacionais
Galvin and Gagne ©2009
5.39
Operating System Concepts – 8 Edition
th
Escalonamento com múltiplos
processadores
Afinidade do processador
Processo tem afinidade com o seu processador corrente
Leve
–
Processo tende a ficar no mesmo processador, mas
eventualmente pode ser trocado
Forte
–
Processo especifica que não deve migrar para outros
processadores
Melhora a eficiência no uso do cache
do processador
Operating System Concepts – 8th Edition
5.40
Silberschatz, Galvin and Gagne ©2009
Exemplos de Sistemas Operacionais
Escalonamento no Solaris
Escalonamento no Linux
Operating System Concepts – 8th Edition
5.41
Silberschatz, Galvin and Gagne ©2009
Solaris
Escalonamento baseado em prioridade
Seis classes
Tempo compartilhado (padrão)
Interativo
Tempo real
Sistema
Compartilhamento justo
Prioridade fixa
Um thread só pode pertencer a uma classe de cada vez
Cada classe tem seu próprio algoritmo de escalonamento
A classe tempo compartilhado tem uma fila de múltiplos níveis com realimentação
Operating System Concepts – 8th Edition
5.42
Silberschatz, Galvin and Gagne ©2009
Tabela de despacho para classes padrão
e interativa
Próxima
prioridade
se quantum
de tempo
chegar ao
fim
Baixa
prioridade
Próxima
prioridade
de
processos
que foram
suspensos
antes de
usarem
todo o
quantum
(ex: pedido
de I/O)
Alta
prioridade
Operating System Concepts – 8th Edition
5.43
Silberschatz, Galvin and Gagne ©2009
Escalonamento do Solaris
Escalonamento entre filas
Escalonador converte prioridades específicas de cada classe em uma prioridade
global por thread
O thread com a maior prioridade é o próximo a ser executado
Threads com mesma prioridade são escolhidos via RR
Thread executa até que:
Seja bloqueado
Use a sua fatia de tempo
Seja movido por preempção por um thread de maior prioridade
Operating System Concepts – 8th Edition
5.44
Silberschatz, Galvin and Gagne ©2009
Escalonamento do Solaris
Operating System Concepts – 8th Edition
5.45
Silberschatz, Galvin and Gagne ©2009
Escalonamento do Linux
Escalonador é executado em tempo constante, independente da carga do
sistema
Melhora com relação à versão original, herdada do Unix
Preemptivo
Baseado em prioridade
Duas classes
Tempo compartilhado e tempo real
Quanto menor o valor, maior a prioridade
Jobs com prioridade maior ganham maior fatia de tempo
Diferentemente do Solaris
Operating System Concepts – 8th Edition
5.46
Silberschatz, Galvin and Gagne ©2009
Prioridades e tamanho da fatia de tempo
Operating System Concepts – 8th Edition
5.47
Silberschatz, Galvin and Gagne ©2009
Escalonamento do Linux
Tarefas organizadas em fila de execução (uma por processador)
Organizadas em dois arrays com prioridade (ativo, expirado)
Uma tarefa pode executar enquanto tiver tempo disponível em sua fatia
Ao terminar de usar sua fatia de tempo, a tarefa não pode ser executada
até que todas as outras tenham expirado o seu tempo
Movida do array de ativos para array de expirados
Quando o array de ativos fica vazio, os arrays são trocados
Operating System Concepts – 8th Edition
5.48
Silberschatz, Galvin and Gagne ©2009
Arrays de ativos e expirados
Operating System Concepts – 8th Edition
5.49
Silberschatz, Galvin and Gagne ©2009
Escalonamento do Linux
Escalonamento de tempo real de acordo com o POSIX.1b
Tarefas de tempo real tem prioridade estática
Demais tarefas com prioridade dinâmica
Escalonador favorece tarefas interativas
Tarefas interativas tem muito I/O e, consequentemente, grande tempo de
suspensão
Atualização de prioridade feita com base no tempo de suspensão (de -5 a +5)
–
Tempos de suspensão maiores levam a reduções maiores no valor da
prioridade (aumento da prioridade) – Processos limitados por I/O
–
Tempos de suspensão menores levam a aumentos maiores no valor da
prioridade (redução da prioridade) – Processos limitados por CPU
A atualização da prioridade é feita quando a tarefa expira
Operating System Concepts – 8th Edition
5.50
Silberschatz, Galvin and Gagne ©2009
Fim do capítulo 5
Operating System Concepts – 8th Edition
Silberschatz, Galvin and Gagne ©2009