de processos Carlos Gustavo A. da Rocha
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)
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
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
(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
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 de processo deve ter prioridade no 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
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
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
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...
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
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
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
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
Escalonamento em sistemas interativos Escalonamento com prioridades Entre processos com uma mesma prioridade pode-se utilizar o algoritmo Round-Robin
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
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
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
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
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
Escalonamento de threads