Instituto Federal de Santa Catarina – Campus Chapecó Ensino Médio Integrado a Informática Sistemas Operacionais Professor: Bruno Crestani Calegaro Notas de Aula 03 Escalonamento de processos No sistema operacional, cada programa em execução constitui um processo. Este processo é definido como um conjunto necessário de informações para que o sistema operacional implemente a concorrência dos programas, ou seja, é constituído por: Contexto de hardware → armazena o conteúdo dos registradores gerais da CPU e registradores de uso específico; Contexto de software → especifica os limites e características dos recursos que podem ser alocados pelo processo; Espaço de endereçamento → determina a área de memória pertencente ao processo onde instruções e dados serão armazenados para execução. Um processo é classificado como CPU-bound ou I/0-bound, de acordo com a utilização do processador e dos dispositivos de E/S. Portanto: Processo CPU-bound → Passa a maior parte do tempo no estado de execução, utilizando o processador, ou no estado pronto; Processo I/O-bound → Passa a maior parte do tempo no estado de espera, pois realiza um elevado número de operações de E/S. Nos sistemas multiprogramáveis os processos são executados concorrentemente, compartilhando o uso do processador, memória principal e dispositivos de E/S, dentre outros recursos. A partir do momento em que diversos processos podem estar no estado de pronto, deve-se adotar uma política de escalonamento, ou seja, deve-se estabelecer critérios que determinarão qual processo será escolhido para fazer o uso do processador. Sendo assim, a gerência de processos é uma das principais funções de um sistema operacional, possibilitando aos programas alocar recursos, compartilhar dados, trocar informações e sincronizar suas execuções. A política de escalonamento é implementada por uma rotina do sistema operacional (denominada escalonador) e deve possuir as seguintes funções: Manter o processador ocupado a maior parte do tempo; Balancear o uso da CPU entre os processos; Privilegiar a execução de aplicações críticas; Maximizar a produtividade do sistema; Oferecer tempos de resposta razoáveis para usuários interativos. Uma política de escalonamento pode ser classificada de acordo com a sua preempção, ou seja, se o sistema operacional pode interromper o processo em execução e substituí-lo por outro: Escalonamento não-preemptivo → quando um processo está em execução nenhum evento externo pode ocasionar a perda do uso do processador; Escalonamento preemptivo → o sistema operacional pode interromper um processo em execução e passá-lo para o estado de pronto, para poder alocar outro processo na CPU. Este modelo permite que o sistema priorize a execução certos de processos além de balancear o uso da CPU entre os processos. Escalonamentos: FIFO, Shortest Job First, Shortest Remaining Time e Round-Robin Escalonamento FIFO Escalonamento First in First out (FIFO) adota a política de que o processo que chegar primeiro ao estado de pronto será selecionado para a execução. Possui as seguintes características: Estrutura → contém uma fila para armazenar os processos que estão no estado de pronto; Funcionamento → quando um processo passa para o estado de pronto, ele entrará no final da fila e será escalonado quando chegar ao seu início; Classificação → não preemptivo, pois um processo não pode ser interrompido quando está sendo executado; Deficiência → Impossibilidade de prever quando um processo terá a sua execução iniciada; falta de uma estrutura para melhorar o tempo médio de espera dos processos; processo CPUbound tem vantagem em relação ao processo I/0-bound. Esse método tem como desvantagem prejudicar os processos I/O Bound. Exercício 1: monte o diagrama do tempo dos processos abaixo, sabendo que o número informado na tabela corresponde ao tempo de execução de cada processo. Processo Tempo A 12 B 8 C 15 D 5 Exercício 2: calcule o tempo médio de espera na fila de execução. Escalonamento Shortest Job First Escalonamento Shortest Job First (SJN), também citado em algumas fontes de pesquisa como Shortest Job Next (SJN) ou Shortest Process Next (SPN), o algoritmo seleciona o processo que tiver o menor tempo de execução que resta para executar. Assim sendo, o processo que estiver no estado pronto e que necessitar de menor tempo de CPU, considerando um mesmo contexto, passa a possuir o estado de execução. Esta metodologia busca priorizar a uniformização do algoritmo de escalonamento Round-Robin, porém, considera o processo em estado de execução como não apropriativo. A implementação desse paradigma de escalonamento foi utilizada com sistemas operacionais exclusivos para processamento em lote. A cada novo processo admitido pelo sistema, um tempo de execução era associado ao contexto do software. Como não é possível determinar precisamente esse tempo de execução, uma estimativa era realizada considerando como base análises estatísticas de execuções passadas (heurística), podendo ser fornecidas pelo usuário ou incorporadas aos programas. Caso o tempo de execução informado fosse muito inferior ao tempo real, o sistema operacional poderia interromper a execução do processo. O principal problema dessa solução é a impossibilidade de estimar o tempo de execução de processos interativos, já que a entrada de dados é uma ação imprevisível. Em sua concepção inicial, o escalonamento SJF é um escalonamento não-preemptivo. Sua vantagem no escalonamento FIFO está na redução do tempo médio de turnaround dos processos, porém, no SJF é possível haver starvation para processos com tempo de processador muito longo, ou do tipo CPU-bound. Neste modelo, os processos prontos ficam organizados em uma lista em ordem crescente, baseado no tempo de execução e o momento de chegada. Em suma, esse paradigma de escalonamento pode ser classificador por: Mão apropriativa; Privilegia os processos I/O-bound; Possui desempenho médio melhor se comparado ao paradigma FIFO; Possui uma desvantagem de implementação, já que necessita um algoritmo de heurística eficiente; É pouco previsível; Não é justo com processos longos. Exercício 3: Refaça os exercícios 1 e 2 utilizando o algoritmo de escalonamento SJF. Escalonamento Shortest Remaining Time O algoritmo de escalonamento Shortest Remaining Time (SRT) ou Shortest Remaining First (SRF) é a variante preemptiva do escalonamento SJF. A fila de processos a serem executados pelo SRT é organizada conforme o tempo estimado de execução, ou seja, de forma semelhante ao SJF, sendo processados primeiro os menores jobs. Na entrada de um novo processo, o algoritmo de escalonamento avalia seu tempo de execução incluindo o job em execução, caso a estimativa de seu tempo de execução seja menor que o processo corrente em execução, ocorre a substituição do processo em execução pelo processo recém-chegado. A função de seleção pode ser representada simplificadamente por: A cada mudança de contexto, o processo suspenso pela CPU deve ser recolocado em uma posição correspondente apenas ao seu tempo restante de execução e não mais o tempo de execução total; As sobrecargas impostas pela manutenção dos registros de tempos decorridos e pela troca de contexto da CPU acabam sendo justificadas pelo fato de pequenos processos serem executados praticamente de imediato, minimizando o tempo médio de espera dentro de um cenário mais amplo e tornando-se útil para sistemas de tempo repartido. Este algoritmo também se baseia nas estimativas de tempo de execução dos processos, possuindo as mesmas deficiências do algoritmo SJF, sendo necessário considerar: Processos com tempo de execução curtos são priorizados; Processos de maior duração tem seus tempos de espera variáveis em função de jobs menores que venham a ser executados primeiramente; Possibilidade potencial de processos grandes sendo adiados por um tempo indeterminado (starvation) devido ao excessivo favorecimento de processos de curta duração; Deve-se incluir um mecanismo extra para evitar que um processo, prestes a ser finalizado, sofre alguma preempção. Exercício 4: Utilizando o algoritmo de escalonamento SRT, faça o diagrama do tempo da tabela abaixo. Processo Tempo de Execução Tempo de chegada A 5 0 B 3 0 C 1 1 D 3 5 Escalonamento Round-Robin Escalonamento Round-Robin (RR), cuja tradução é escalonamento circular, foi o primeiro modelo a propor uma implementação que simulasse a multitarefa em tempo real. Esta metodologia propõe que os processos revezem o uso da CPU através de uma unidade de tempo denominada quantum (“q”), cujo valor é determinado pela implementação do sistema operacional, podendo ter a duração de 10 a 100 milissegundos. Após se encerrar o quantum, o processo escalonado deve ceder o lugar na CPU a outro processo. Portanto, o comportamento da metodologia ocorrerá em função do valor do quantum: Elevado valor de quantum → funcionará semelhante ao FIFO, pois os processos poderão ser executados até o final; Baixo valor de quantum → haverá grande sobrecarga ao sistema, pois utilizará a maior parte do tempo para a troca de contexto. Neste modelo os processos prontos ficam organizados em uma fila circular do tipo FIFO (primeiro a chegar, é o primeiro a sair). O escalonador percorrerá a fila e revezará a execução dos processos até que todos acabem. Logo, este escalonamento obterá as seguintes características: Tempo de retorno e de resposta aumenta de acordo com o número de processos na fila; Maior complexidade de implementação; Aumento no custo operacional, devido à mudança constante de contexto de processos; Preemptivo, pois um processo pode ser interrompido quando está sendo executado; Menor quantidade de processos finalizados em um determinado intervalo de tempo (throughput); Melhor tempo de resposta. Exercício 5: Refaça os exercícios 1 e 2 utilizando o algoritmo de escalonamento Round-Robin considerando a fatia de tempo, quantum, de 3 u.t. e troca de contexto zero.