Sistemas Operacionais Escalonamento Gerência do Processador • Com o surgimento dos sistemas multiprogramáveis, nos quais múltiplos processos poderiam permanecer na memória principal compartilhando o uso da CPU, a gerência do processador tornou-se uma das atividades mais importantes em um sistema operacional. • A partir do momento em que diversos processos podem estar no estado de pronto, critérios devem ser estabelecidos para determinar qual processo será escolhido para fazer uso do processador. Execução Espera Pronto Gerência do Processador Critérios de Escalonamento • Utilização do Processador (CPU) É o tempo gasto pela CPU na execução dos processos do usuário. Na maioria dos sistemas é desejável que o processador permaneça a maior parte do seu tempo ocupado. Uma utilização na faixa de 30% indica um sistema com uma carga de processamento baixa, enquanto na faixa de 90% indica um sistema bastante carregado, próximo da sua capacidade máxima. • Throughput (Vazão) Throughput representa o número de processos executados em um determinado intervalo de tempo. Quanto maior o throughput, maior o número de tarefas executadas em função do tempo. A maximização do throughput é desejada na maioria dos sistemas. Gerência do Processador Critérios de Escalonamento • Tempo de Processador (CPU) É o tempo que um processo leva no estado de execução durante seu processamento. As políticas de escalonamento não influenciam no tempo de processador de um processo, sendo este tempo função apenas do código da aplicação e da entrada de dados. • Tempo de Espera É o tempo total que um processo permanece na fila de pronto durante seu processamento, aguardando para ser executado. A redução do tempo de espera dos processos é desejada pela maioria das políticas de escalonamento. Gerência do Processador Critérios de Escalonamento • Tempo de Turnaround É o tempo que um processo leva desde a sua criação até seu término. As políticas de escalonamento buscam minimizar o tempo de turnaround. • Tempo de Resposta É o tempo decorrido entre uma requisição ao sistema ou à aplicação e o instante em que a resposta é exibida. Em sistemas interativos, podemos entender como o tempo decorrido entre a última tecla digitada pelo usuário e o início da exibição do resultado no monitor. Gerência do Processador Escalonamento Não-Preemptivo e Preemptivo • Não-Preemptivo Neste tipo de escalonamento, quando um processo está em execução, nenhum evento externo pode ocasionar a perda do uso da CPU. O processo somente sai do estado de execução caso termine seu processamento ou execute instruções do próprio código que ocasionem uma mudança para o estado de espera. • Preemptivo Neste tipo de escalonamento o sistema operacional pode interromper um processo em execução e passá-lo para o estado de pronto, com o objetivo de alocar outro processo na CPU. Gerência do Processador FIFO ou FCFS • No escalonamento FIFO (first in, first out) também conhecido como FCFS (first come, first served), o processo que chegar primeiro ao estado de pronto é selecionado para execução. • Sempre que chega um processo no estado de pronto, ele é colocado no final da fila. • Se um processo for para o estado de espera, o próximo da fila é escalonado. • Quando um processo do estado de espera volta para o estado de pronto, este vai para o final da fila. Gerência do Processador FIFO ou FCFS Término Fila dos processos no estado de Pronto Criação Execução Espera Gerência do Processador SJF • No escalonamento SJF (shortest job first), o algoritmo de escalonamento seleciona o processo que tiver o menor tempo de processador (burst) ainda por executar. • Dessa forma, o processo em estado de pronto que necessitar de menos tempo de CPU para terminar seu processamento é selecionado para execução. • Uma implementação do escalonamento SJF com preempção é conhecida como escalonamento SRT (Shortest Remaining Time). • Nesta política, toda vez que um processo no estado de pronto tem um tempo de processador estimado menor do que o processo em execução, o sistema operacional realiza uma preempção substituindo-o pelo novo processo. • De modo semelhante ao SJF, o sistema operacional deve ser o responsável por estimar os tempos de processador dos processos, e o risco de starvation continua presente. Gerência do Processador Cooperativo • O escalonamento cooperativo é uma implementação que busca aumentar o grau de multiprogramação em políticas de escalonamento que não possuam mecanismos de preempção. • Neste caso, um processo em execução pode voluntariamente liberar o processador, retornando à fila de pronto e possibilitando que um novo processo seja escalonado, permitindo assim uma melhor distribuição no uso da CPU. • A principal característica do escalonamento cooperativo está no fato de a liberação do processador ser uma tarefa realizada exclusivamente pelo processo em execução, que de uma maneira cooperativa libera a CPU. Gerência do Processador Fila Circular ou Round Robin Término Fila dos processos no estado de Pronto Criação Execução Preempção por tempo Espera Gerência do Processador Fila Circular ou Round Robin • O escalonamento circular (round robin scheduling), é um escalonamento do tipo preemptivo, projetado especialmente para sistemas de tempo compartilhado. • Esse algoritmo é bastante semelhante ao FIFO, porém quando um processo passa para o estado de execução existe um tempo limite para o uso contínuo do processador denominado fatia de tempo (time slice) ou quantum. • No escalonamento circular, toda vez que um processo é escalonado para execução uma nova fatia de tempo é concedida. • Caso a fatia de tempo expire, o sistema operacional interrompe o processo em execução, salva seu contexto e direciona-o para o final da fila de pronto. • Este mecanismo é conhecido como preempção por tempo. Gerência do Processador Fila Circular ou Round Robin • A figura anterior ilustra o escalonamento circular, onde a fila de processos em estado de pronto é tratada como uma fila circular. • O escalonamento é realizado alocando a CPU ao primeiro processo da fila de pronto. • O processo permanecerá no estado de execução até que termine seu processamento, voluntariamente passe para o estado de espera ou que sua fatia de tempo expire, sofrendo, neste caso, uma preempção pelo sistema operacional. • Após isso, um novo processo é escalonado com base na política de FIFO. Gerência do Processador Fila Circular ou Round Robin • O valor da fatia de tempo depende da arquitetura de cada sistema operacional e, em geral, varia entre 10 e 100 milissegundos. • Este valor afeta diretamente o desempenho da política de escalonamento circular. • Caso a quantum tenha um valor muito alto, este escalonamento tenderá a ter o mesmo comportamento do escalonamento FIFO. • Caso o valor do quantum seja pequeno, a tendência é que haja um grande número de preempções, o que ocasionaria excessivas mudanças de contexto, prejudicando o desempenho do sistema e afetando o tempo de turnaround dos processos. • A principal vantagem do escalonamento circular é não permitir que um processo monopolize a CPU, sendo o tempo máximo alocado continuamente igual ao quantum definido no sistema. • No caso de sistemas de tempo compartilhado, onde existem diversos processos interativos concorrendo pelo uso do processador, o escalonamento circular é adequado. Gerência do Processador Fila Circular ou Round Robin • O valor da fatia de tempo depende da arquitetura de cada sistema operacional e, em geral, varia entre 10 e 100 milissegundos. • Este valor afeta diretamente o desempenho da política de escalonamento circular. • Caso a quantum tenha um valor muito alto, este escalonamento tenderá a ter o mesmo comportamento do escalonamento FIFO. • Caso o valor do quantum seja pequeno, a tendência é que haja um grande número de preempções, o que ocasionaria excessivas mudanças de contexto, prejudicando o desempenho do sistema e afetando o tempo de turnaround dos processos. • A principal vantagem do escalonamento circular é não permitir que um processo monopolize a CPU, sendo o tempo máximo alocado continuamente igual ao quantum definido no sistema. • No caso de sistemas de tempo compartilhado, onde existem diversos processos interativos concorrendo pelo uso do processador, o escalonamento circular é adequado. Gerência do Processador Fila Circular ou Round Robin • Um problema presente nesta política é que processos CPU-bound são beneficiados no uso do processador em relação aos processos I/Obound. • Devido às suas características, os processos CPU-bound tendem a utilizar por completo a fatia de tempo, enquanto os processos I/O-bound têm mais chances de passar para o estado de espera antes de sofrerem preempção por tempo. • Estas características distintas ocasionam um balanceamento desigual no uso do processador entre os processos. Gerência do Processador Fila Circular Virtual • Um refinamento do escalonamento circular, que busca reduzir este problema, é conhecido como escalonamento circular virtual, ilustrado seguir. • Neste esquema, processos que saem do estado de espera vão para uma fila de pronto auxiliar. • Os processos da fila auxiliar possuem preferência no escalonamento em relação à fila de pronto, e o escalonador só seleciona processos na fila de pronto quando a fila auxiliar estiver vazia. • Quando um processo é escalonado a partir da fila auxiliar, sua fatia de tempo é calculada como sendo o valor da fatia de tempo do sistema menos o tempo de processador que o processo utilizou na última vez em que foi escalonado a partir da fila de pronto. • Estudos comprovam que, apesar da maior complexidade na implementação, o balanceamento do uso do processador neste escalonamento é mais equilibrado. Gerência do Processador Fila Circular Virtual Término Fila dos processos no estado de Pronto Criação Execução Preempção por tempo Fila auxiliar Espera Gerência do Processador Escalonamento por Prioridades Fila dos processos no estado de Pronto Prioridade P1 Término Prioridade P2 Criação Execução Prioridade Pn Preempção por Prioridade Espera Gerência do Processador Escalonamento por Prioridades • O escalonamento por prioridades é um escalonamento do tipo preemptivo realizado com base em um valor associado a cada processo denomidado prioridade de execução. • O processo com maior prioridade no estado de pronto é sempre o escolhido para execução, e processos com valores iguais são escalonados seguindo o critério de FIPO. • Neste escalonamento, o conceito de fatia de tempo não existe, conseqüentemente um processo em execução não pode sofrer preempção por tempo. • No escalonamento por prioridades, a perda do uso do processador só ocorrerá no caso de uma mudança voluntária para o estado de espera ou quando um processo de prioridade maior passa para o estado de pronto. Gerência do Processador Escalonamento por Prioridades • Neste caso, o sistema operacional deverá interromper o processo corrente, salvar seu contexto e colocá-Io no estado de pronto. • Esse mecanismo é conhecido como preempção por prioridade. • Após isso, o processo de maior prioridade é escalonado. • Um dos principais problemas no escalonamento por prioridades é o starvation. • Processos de baixa prioridade podem não ser escalonados, permanecendo indefinidamente na fila de pronto. • Uma solução para este problema, possível em sistemas que implementam prioridade dinâmica, é a técnica de aging. • Este mecanismo incrementa gradualmente a prioridade de processos que permanecem por muito tempo na fila de pronto. Gerência do Processador Escalonamento Circular com Prioridades Fila dos processos no estado de Pronto Prioridade P1 Término Prioridade P2 Criação Execução Prioridade Pn Preempção por Tempo ou Prioridade Espera Gerência do Processador Escalonamento Circular com Prioridades • • • • • • O escalonamento circular com prioridades implementa o conceito de quantum e de prioridade de execução associada a cada processo. Neste tipo de escalonamento, um processo permanece no estado de execução até que termine seu processamento, voluntariamente passe para o estado de espera ou sofra uma preempção por tempo ou prioridade. A principal vantagem deste escalonamento é permitir o melhor balanceamento no uso do processador em sistemas de tempo compartilhado. Processos com o perfil I/O-bound devem receber do administrador do sistema prioridades com valores maiores que as dos processos CPU-bound. Isso permite ao sistema operacional praticar uma política compensatória entre processos de perfis distintos, compartilhando o processador de forma mais igualitária. Este tipo de escalonamento é amplamente utilizado em sistemas de tempo compartilhado, como o Windows e o Unix. Gerência do Processador Escalonamento por Múltiplas Filas com Realimentação Fila dos processos no estado de Pronto Criação Quantum Execução Espera Pronto Maior Prioridade Prioridade P1 Menor Quantum Execução Pronto Execução Espera Pronto Prioridade P2 Execução Pronto Execução Espera Pronto Prioridade P3 Execução Pronto Fila Circular ou Round robin Menor Prioridade Prioridade Pn Maior Quantum Gerência do Processador Escalonamento por Múltiplas Filas com Realimentação • Um mecanismo FIFO adaptado com quantum é implementado para escalonamento em todas as filas, com exceção da fila de menor prioridade, que utiliza o escalonamento circular. • O escalonamento de um processo em uma fila ocorre apenas quando todas as outras filas de prioridades mais altas estiverem vazias. • O quantum em cada fila varia em função da sua prioridade, ou seja, quanto maior a prioridade da fila, menor o seu quantum. • Sendo assim, o quantum concedido aos processos varia em função da fila de pronto na qual ele se encontra. • Um processo, quando criado, entra no final da fila de maior prioridade, porém, durante sua execução, a cada preempção por tempo, o processo é redirecionado para uma fila de menor prioridade. Gerência do Processador Escalonamento por Múltiplas Filas com Realimentação • O escalonamento por múltiplas filas com realimentação (multilevel feedback queues scheduling) os processos podem trocar de filas durante seu processamento. • Sua grande vantagem é permitir ao sistema operacional identificar dinamicamente o comportamento de cada processo, direcionando-o para filas com prioridades de execução mais adequados ao longo de seu processamento. • Esse esquema permite que os processos sejam redirecionados entre as diversas filas, fazendo com que o sistema operacional implemente um mecanismo adaptativo. • Os processos não são previamente associados às filas de pronto, e, sim, direcionados pelo sistema para as filas existentes com base no seu comportamento. Gerência do Processador Escalonamento por Múltiplas Filas com Realimentação • Esse escalonamento atende às necessidades dos diversos tipos de processos. • No caso de processos I/O-bound, um tempo de resposta adequado é obtido, já que esses processos têm prioridades mais altas por permanecerem a maior parte do tempo nas filas de maior prioridade, pois dificilmente sofrerão preempção por tempo. • Por outro lado, em processos CPU-bound a tendência é de que, ao entrar na fila de mais alta prioridade, o processo ganhe o processador, gaste seu quantum e seja direcionado para uma fila de menor prioridade. • Dessa forma, quanto mais tempo do processador um processo utiliza, mais ele vai caindo para filas de menor prioridade. Gerência do Processador Escalonamento por Múltiplas Filas com Realimentação • O escalonamento por múltiplas filas com realimentação é um algoritmo de escalonamento generalista, podendo ser implementado em qualquer tipo de sistema operacional. • Um dos problemas encontrados nesta política é que a mudança de comportamento de um processo CPU-bound para I/O-bound pode comprometer seu tempo de resposta. • Outro aspecto a ser considerado é sua complexidade de implementação, ocasionando um grande overhead (sobrecarga) ao sistema. Gerência do Processador Escalonamento em Sistema de Tempo Real • • • • • • Diferentemente dos sistemas de tempo compartilhado, nos quais a aplicação não é prejudicada pela variação no tempo de resposta, algumas aplicações específicas exigem respostas imediatas para a execução de determinadas tarefas. Neste caso, a aplicação deve ser executada em sistemas operacionais de tempo real, onde é garantida a execução de processos dentro de limites rígidos de tempo, sem o risco de a aplicação ficar comprometida. Aplicações de controle de processos, como sistemas de controle de produção de bens industriais e controle de tráfego aéreo, são exemplos de aplicação de tempo real. O escalonamento em sistemas de tempo real deve levar em consideração a importância relativa de cada tarefa na aplicação. Em função disso, o escalonamento por prioridades é o mais adequado, já que para cada processo uma prioridade é associada em função da importância do processo dentro da aplicação. No escalonamento para sistemas de tempo real não deve existir o conceito de quantum, e a prioridade de cada processo deve ser estática.