Post on 19-Jun-2018
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Nos computadores atuais frequentemente temos vários processos (threads) “competindo” por um pequeno número de CPUs● Nestes casos uma escolha deve ser feita de qual
processo será o próximo a executar● A parte do sistema operacional que realiza esta
escolha é chamada de escalonador (scheduler)● O algoritmo usado na escolha é chamado de
algoritmo de escalonamento (scheduling algorithm)
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Introdução● O escalonamento, e seus algoritmos, evoluíram
junto com a computação– De inexistentes a essenciais ao funcionamento do SO
● As CPUs (também) evoluíram e se tornaram extremamente rápidas– Diminui o problema do escalonamento, principalmente
em computadores pessoais
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Introdução● Um bom algoritmo de escalonamento deve ter duas
metas principais a alcançar– (1) Escolher o processo certo na hora certa
● Se um usuário inicia um compilador e um codificador de arquivos mp3 simultaneamente, a escolha de qual terá prioridade não é tão importante
● Contudo, se ao invés de um codificador, for iniciado um player de arquivos mp3, a situação muda
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
– (2) Utilizar de forma eficiente as CPUs● O escalonamento é um procedimento complexo,
envolvendo: alternar de modo usuário para núcleo; salvar o status do processo atual; salvar o mapa de memória do processo atual; selecionar um novo processo, executando o algoritmo de escalonamento; carregar o mapa de memória do novo processo; carregar o estado do novo processo; alternar de modo núcleo para usuário e reiniciar a execução
Realizar todo este procedimento um números exagerado de vezes irácomprometer boa parte das CPUs com o próprio escalonamento
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Comportamento de processos● Processos sempre alternam entre “surtos” de
computação e requisições de E/S– Parte dos processos passam a maior parte do tempo
computando enquanto outros passam a maior parte do tempo realizando E/S
Qual tipo deprocesso deveter prioridade noescalonamento ?
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Quando escalonar?● Existem uma variedade de situações onde é
necessário realizar um escalonamento, entre elas– Quando um novo processo é criado deve-se decidir entre
continuar executando o pai, ou iniciar a execução do filho– Quando um processo termina, “liberando” uma CPU,
outro processo deve ser escolhido para ocupa-la– Quando um processo bloqueia devido a E/S, na entrada
de uma região crítica, ou por qualquer outro motivo, outro precisa ser escolhido para executar
● O motivo do bloqueio pode ser relevante para a escolha
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Quando escalonar?● Existem uma variedade de situações onde é
necessário realizar um escalonamento, entre elas– Quando ocorre uma interrupção de E/S (um dispositivo
terminou de ler ou escrever alguma informação), um processo irá passar do estado bloqueado para pronto. O escalonador pode então por o mesmo em execução
– Se o hardware oferece interrupções de relógio periódicas, uma decisão de escalonamento deve ser tomada, pelo menos, a cada interrupção
– …
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Categorias de algoritmos de escalonamento● Podem ser classificados em relação a diversos
aspectos– Não preemptivos
● Seleciona um processo e o deixa em execução por um tempo indefinido, até o mesmo bloquear ou deixar a CPU voluntariamente
– Preemptivos● Seleciona um processo e o deixa em execução até o
mesmo bloquear ou atingir a próxima interrupção de relógio
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Categorias de algoritmos de escalonamento● Em relação ao tipo de sistema, eles possuem
necessidades, objetivos e algoritmos de escalonamento diferentes– Sistemas para mainframes ou de lote
● Não preemptivos são aceitáveis– Sistemas interativos
● Preemptivos são essenciais– Sistemas de tempo real– ...
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Objetivos de algoritmos de escalonamento● Todos os sistemas
– Justiça: dar a cada processo uma fração justa da CPU– Aplicação de políticas: Garantir que políticas
administrativas estejam sendo respeitadas– Equilíbrio: Manter todas as partes do sistema ocupadas
● Sistemas de lote– Vasão: maximizar os jobs por unidade de tempo– Tempo de retorno: minimizar o tempo entre submissão e
término de cada job– Uso de CPU: Manter as CPUs sempre ocupadas
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Objetivos de algoritmos de escalonamento● Sistemas interativos
– Tempo de resposta: responder rapidamente às requisições do usuário
– Proporcionalidade: Satisfazer as expectativas dos usuários
● Sistemas de tempo real– Cumprimento de prazos: Garantir o processamento nos
limites estabelecidos, evitando a perda de dados– Previsibilidade: Evita a degradação de qualidade
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Escalonamento em sistemas interativos● Escalonamento Round-Robin
– Algoritmo simples, antigo, justo (e bastante usado)– Cada processo “recebe” um intervalo de tempo máximo
durante o qual pode executar (T)● Se ao final deste período ele ainda estiver
executando, será escalonado– O SO mantem uma fila de processos prontos, quando
um processo é escalonado, ele é posto no final da fila● E recebe outro intervalo de tempo (T) para executar
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Escalonamento em sistemas interativos● Escalonamento com prioridades
– Mantém a ideia de um tempo máximo (T) de execução por processo, adicionando a cada um deles uma prioridade
● No momento do escalonamento, o processo com maior prioridade é posto para executar
– Existem diversas técnicas que ajustam a prioridade de cada processo de forma dinâmica
● Evitam que processos com maior prioridade monopolizem a CPU
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Escalonamento em sistemas interativos● Escalonamento com prioridades
– Entre processos com uma mesma prioridade pode-se utilizar o algoritmo Round-Robin
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Escalonamento em sistemas interativos● Escalonamento garantido
– Neste método, se houverem N usuários conectados em uma máquina, cada um deles receberá 1/N da CPU
– De forma semelhante, se houverem N processos, cada uma deles receberá 1/N da CPU
● O SO mantem um controle do tempo de CPU que cada processo recebeu desde sua criação
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Escalonamento em sistemas interativos● Escalonamento por loteria
– Baseia-se na ideia de distribuir “bilhetes” aos processos– Em cada escalonamento um bilhete é sorteado, e o
processo que o detêm ganha acesso à CPU– Processos podem receber diferentes quantidades de
bilhetes, de forma a se implementar prioridades
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Escalonamento em sistemas interativos● Escalonamento por fração justa (fair share)
– Existem uma série de outras propriedades que devem ser levadas em conta
– Se temos dois usuários conectados a uma máquina, um executando 9 processos e outro executando 1 processo, não é justo que o primeiro obtenha 90% da CPU
Sistemas reais sempre irão utilizar várias destas técnicas ao mesmo tempo
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Escalonamento em sistemas de tempo real● O tempo sempre será o fator preponderante
– Um ou mais dispositivos geram dados e o computador deve processa-los em um intervalo de tempo garantido
– Uma resposta tardia é tão ruim como nenhuma resposta– O escalonador de processos deve garantir que todos os
prazos sejam cumpridos
Sistemas Operacionaiscarlos.rocha@ifrn.edu.br
Escalonamento
● Escalonamento de threads● A diferença está basicamente no fato do SO ter ou
não conhecimento da existência das threads– Caso o SO saiba de sua existência, ele na verdade,
sempre escalona diretamente threads de processos– Caso contrário, o SO irá escolher um processo para
executar. Este processo será responsável por escolher qual de suas threads deve executar