Sistemas Operacionais GERÊNCIA DO PROCESSADOR MACHADO/MAIA: CAPÍTULO 08 Prof. Pedro Luís Antonelli Anhanguera Educacional Gerenciamento do Processador A gerência do processador pode ser considerada a atividade mais importante de um Sistema Operacional. Geralmente temos 2 ou mais processos aptos a utilizar o processador para serem executados. Nesse instante, o sistema operacional deve decidir qual dos processos aptos, armazenados em uma fila, será escolhido para rodar primeiro. Gerenciamento do Processador Essa tarefa e a tomada de decisão é feita pelo escalonador de processos (parte do sistema operacional) através da implementação de alguns algoritmos de seleção, denominados algoritmos de escalonamento. Escalonador de processos O escalonador é a entidade do sistema operacional responsável por selecionar um processo apto a executar no processador e dividir o tempo do processador de forma justa entre os processos que estão aptos. Em outras palavras, o objetivo dos escalonadores é implementar uma política de escalonamento de processos. Escalonador de processos O sistema operacional possui um módulo responsável por efetuar a troca de contexto entre a execução de processos distintos, chamado de Dispatcher ( expeditor). Já o escalonador está relacionado com a implementação e aplicação das políticas de seleção adotadas. Objetivos do escalonamento 1. Maximizar a utilização do processador ; 2. Privilegiar aplicações que são críticas; 3. Maximizar a produção do sistema ,com o maior número de processos executados por unidade de tempo; 4. Minimizar o tempo de execução, ou seja, o tempo que um processo gasta desde a sua criação até seu término; Objetivos do escalonamento 5. Minimizar o tempo de espera, ou seja, o tempo que um processo permance na lista de aptos ; 6. Minimizar o tempo de resposta, ou seja, o tempo decorrido entre uma requisição e a sua realização. Tipos de escalonadores Existem 2 tipos de escalonadores: 1. Não-preemptivo: escalonadores que permitem que os processos rodem até o fim de sua execução sem ser interrompidos por eventos externos; 2. Preemptivo: escalonadores que são capazes de suspender processos que poderiam continuar executando. Tipos de escalonadores Para cada um desses tipos, os processos poderão utilizar o processador até que: - No caso do tipo Não preemptivo: 1. Término de execução do processo; 2. Execução de uma requisição de entrada/saída ou sincronização; 3. Liberação voluntária do processador a outro processo. Tipos de escalonadores - No caso do tipo Preemptivo: 1. Término de execução do processo; 2. Execução de uma requisição de entrada/saída ou sincronização; 3. Liberação voluntária do processador a outro processo; 4. Interrupção de relógio; 5. Processo de mais alta prioridade esteja pronto para executar. Algoritmos de escalonamento Diversos mecanismos (algoritmos) foram sendo desenvolvidos ao longo dos anos. Cada um possui uma vantagem ou desvantagem, mas os escolhidos são aqueles que oferecem um bom desempenho, ou seja, evitam ao máximo o tempo de espera e mantém os recursos ocupados em ambientes de processos heterogêneos Algoritmos de escalonamento Alguns algoritmos de escalonamento: Algoritmos não preemptivos: 1. FIFO 2. SJF 3. Cooperativo Algoritmos preemptivos: 1. Round robin (circular) 2. Múltiplas filas ( e suas variações ) Algoritmo escalonamento FIFO O algoritmo FIFO (First in – First out) mais simples de implementar, onde o processador possui uma fila associada para armazenar os processos que estão aptos a executar. Funcionamento: 1. Processos que se tornam aptos são inseridos no final da fila; 2. Processo que está no início da fila é o próximo a executar; 3. Processo executa até que: a. Libere explicitamente o processador b. Realize uma chamada de sistema (bloqueado) c. Termine sua execução. Algoritmo escalonamento FIFO Não há preempção, ou seja, o próximo da fila só é atendido quando o atual tiver encerrado todas as suas operações. Algoritmo escalonamento FIFO Desvantagem:O tempo médio de espera na fila de execução depende a ordem: Ex. a. Ordem A-B-C-D = (0 + 12 + 20 + 35 ) / 4 = 16.75 u.t. b. Ordem D-A-B-C = (0 + 5 + 17 + 25 ) / 4 = 11.7 u.t. Algoritmo escalonamento SJF No algoritmo anterior (FIFO) os processos que levam menos tempo podem ser prejudicados se ficarem atrás dos que levam mais tempo. Neste caso, o tempo médio que um processo espera para processar pode ser muito grande. O algoritmo pode ser modificado de forma que estes (os menores) sejam processados antes, e com isto, o tempo de espera médio diminui. O Shortest Job First ou algoritmo do “Menor Processo Primeiro” busca resolver este problema. Algoritmo escalonamento SJF Para usar este algoritmo precisamos conhecer antecipadamente o tempo de execução de cada processo, o que é difícil. A idéia é alocar o processador para o menor job da fila. O fato é que o menor tempo médio é obtido quando se executa primeiro os processos de menor ciclo de processador (I/O bound). Algoritmo escalonamento Cooperativo Nos algoritmos anteriores, os processos não podiam ser preemptados por tempo máximo de processamento (timesharing). Com a evolução, os computadores passaram a ser multi-usuário ou multitarefa. Neste caso, uma maior interação com o usuário e uma melhor utilização da CPU pelos programas tornou-se necessária. O método cooperativo é uma forma de tornar isso possível. Neste caso, os processos cooperam uns com os outros, passando a CPU a um outro caso este seja necessário. Algoritmo escalonamento Cooperativo Uma forma de implementar este modelo é criando uma “fila ou caixa de mensagens”, onde informações sobre os eventos ocorridos são postadas. Os processos verificam continuamente a caixa de mensagens, retirando e processando as que são endereçadas a eles. Os processos ou eventos do sistema geram novas mensagens, que são colocadas no final da fila. Algoritmo escalonamento Cooperativo Se o processo perceber uma mensagem que não seja para ele, chama o programa adequado, passando assim a CPU ao próximo. Nas primeiras versões do Windows este sistema estava presente, e se chamava Multitarefa cooperativa! Algoritmo escalonamento RR O algoritmo anterior, apesar de cooperativo, não garantia a execução de todos os programas, já que eles não poderiam ser obrigatoriamente parados ( não preemptivos). Em sistemas de timesharing o tempo de CPU deve ser compartilhado, sendo dada uma parcela de tempo a cada programa (time-slice). Denominamos este intervalo de tempo de quantum. Algoritmo escalonamento RR Além disso, este algoritmo é similar ao algoritmo FIFO, pois também mantemos uma fila, agora circular, para armazenar os processos. Para a execução existe a necessidade de um relógio para delimitar as fatias de tempo. Algoritmo escalonamento RR O processo perde o processador quando: 1. Libera explicitamente o processador; 2. Realize uma chamada de sistema (bloqueado); 3. Termina sua execução; 4. Quando sua fatia de tempo é esgotada. Algoritmo escalonamento RR Problema 1: Dimensionar o quantum: 1. Compromisso entre overhead e tempo de resposta em função do número de usuários; 2. Compromisso entre tempo de chaveamento e tempo do ciclo de processador (quantum); Imagine que a cada 20 ms de processamento útil seja necessário gastar 5 ms com tarefas de troca de contexto para rodar processos de outro usuário, por exemplo. Com isso, 20% do tempo de processador será gasto com estes overheads. Algoritmo escalonamento RR Problema 1: Dimensionar o quantum: 1. Compromisso entre overhead e tempo de resposta em função do número de usuários; 2. Compromisso entre tempo de chaveamento e tempo do ciclo de processador (quantum); Imagine que a cada 20 ms de processamento útil seja necessário gastar 5 ms com tarefas de troca de contexto para rodar processos de outro usuário, por exemplo. Com isso, 20% do tempo de processador será gasto com estes overheads. Algoritmo escalonamento RR Problema 2: Processos I/O bound são prejudicados 1. Esperam da mesma forma que processos CPU bound porém muito provavelmente não utilizam todo o seu quantum; 2. Solução: Estabelecer prioridades para os porcessos. Escalonamento por Prioridades Neste caso, cada processo tem uma prioridade associada (FIFO por prioridade). Quando um processo de maior prioridade entra na fila, ele passa na frente, como num banco, onde os idosos tem a preferência. A princípio, só existe preempção por prioridade, ou seja, os processos não saem da CPU por sua fatia de tempo ter acabado. Escalonamento por Prioridades Este algoritmo é recomendado para sistemas de processamento em tempo real, onde determinadas atividades ou processos tem prioridade sobre os demais e devem ser tratados no momento em que ocorrem. Um problema que surge é o dos processos com menor prioridade não serem nunca processados se existirem processos de maior prioridade. Neste caso, o processo “morre de fome” (starvation). Em alguns casos o Sistema Operacional pode mudar a prioridade dos processos, minimizando este problema. Escalonamento por Prioridades 1. Associar prioridades a processos I/O bound para compensar o tempo gasto em estado de espera (apto); 2. Sempre que um processo de maior prioridade que o processo atualmente em execução entrar no estado apto deve ocorrer uma preempção; 3. Escalonamento com prioridades é inerente a preempção; 4. É possível haver prioridade não-preemptiva; 5. Escalonador deve sempre selecionar o processo de mais alta prioridade. Escalonamento por Prioridades Prioridade estática versus dinâmica Prioridade estática: Um processo é criado com uma determinada prioridade e esta prioridade é mantida durante todo o tempo de vida do processo; Prioridade dinâmica: A prioridade do processo é ajustada de acordo com o estado de execução do processo e/ou do sistema. Ex.: ajustar a prioridade em função da fração do quantum que foi realmente utilizada pelo processo q = 100 ms. Processo A utilizou 2ms !nova prioridade = 1/0.02 = 50 Processo B utilizou 50ms !nova prioridade = 1/0.5 = 2 Escalonamento por Prioridades Problemas com prioridades 1. Com prioridades um processo de baixa prioridade pode não executar (starvation); 2. Um processo que durante sua execução troca de comportamento (CPU bound a I/O bound) pode ficar mal classificado a nível de prioridades e ser penalizado; 3. Solução: Múltiplas filas de prioridades Escalonamento por Múltiplas Filas de Prioridades Neste modelo temos diversas filas de processos no estado pronto, cada qual com prioridades específicas e com sua própria política de escalonamento (FIFO, SJF, RR) . Escalonamento por Múltiplas Filas de Prioridades com Realimentação Este modelo é similar ao modelo de múltiplas Filas de Prioridades, porém os processos podem trocar de fila durante seu processamento. Um mecanismo adaptativo é implementado de forma a avaliar o comportamento do processo e alterar sua fila. Por exemplo, toda vez que um processo é “preemptado” por tempo ele muda de fila, diminuindo sua prioridade e aumentando sua fatia de tempo (time-slice). Características: 1. Baseado em prioridades dinâmicas; 2. Em função do tempo de uso da CPU a prioridade do processo aumenta e diminui; 3. Sistema de envelhecimento (aging) evita postergação indefinida. Escalonamento por Múltiplas Filas de Prioridades com Realimentação BIBLIOGRAFIA • MACHADO, F. B. & MAIA, L. P., Arquitetura de Sistemas Operacionais, 4 Edição, São Paulo, LTC, 2007. • TANENBAUM, A. S. Sistemas Operacionais Modernos: 2ª edição, São Paulo, editora Prentice Hall, 2003. • SILBERSCHATZ, A. Sistemas Operacionais – Conceitos: São Paulo, editora LTC, 2004.