Sistemas operacionais - Tanenbaum, Seção 2.5
Escalonamento em 3 Níveis, Alternância Circular, Prioridades e Filas Múltiplas
Por que não carregar todos os jobs diretamente na memória RAM?
Olha a fila de entrada no disco. Decide quais jobs entram no sistema, dosando uma mistura equilibrada de processos de computação e de E/S.
Controla quantos processos ficam na RAM. Os que não cabem vão para a área de troca no disco (swapped out), liberando espaço.
Seleciona qual processo pronto na memória vai executar a seguir. É o escalonador de milissegundos que decide a cada quantum.
Se centenas de programas fossem jogados para disputar a CPU de uma vez, a RAM esgotaria. O sistema entraria em colapso de paginação (thrashing) e o processador ficaria quase ocioso esperando leituras lentas do disco.
A cada processo é atribuído um intervalo de tempo chamado quantum
CPU gasta tempo demais salvando registradores e recarregando cache.
Troca consome ~1 ms (~2% a 5%), resposta na tela parece imediata.
Vários usuários esperariam segundos por um eco na tela.
Observe o quantum expirando e cada processo voltando ao final da fila
Troca de contexto
Ao expirar o quantum, veja as 3 etapas: salvar PCB, atualizar MMU/cache e despachar o próximo processo.
Overhead real
Se a troca leva ~1 ms e o quantum é 20 ms, a CPU perde 5% do tempo só alternando processos.
E se bloquear antes?
Se o processo solicitar E/S antes do fim do quantum, a CPU é liberada na hora e o próximo da fila entra.
O processo executável com a prioridade mais alta sempre será o escolhido
O sistema atribui prioridade 1/f, sendo f a fração do último quantum que o processo usou:
f = 1/50). Prioridade sobe para 50. Ele será atendido rápido quando o disco responder.
f = 1). Prioridade cai para 1. Ele não pode monopolizar.
Se as prioridades forem fixas, processos com prioridade baixa podem nunca executar. O escalonador pode reduzir a prioridade a cada tique do relógio ou atribuir um quantum máximo para evitar que processos de alta prioridade executem indefinidamente.
A combinação mais usada: prioridades entre classes, round-robin dentro de cada classe
Se as prioridades não forem ocasionalmente ajustadas, as classes mais baixas podem morrer de fome - nunca receberem a CPU.
O caso histórico do CTSS e o truque dos quanta que dobram
O computador IBM 7094 só mantinha um processo na memória por vez. Cada troca significava enviar o processo para o disco e ler outro. Trocar muitas vezes era extremamente caro.
Solução: dar quanta maiores para processos que já rodaram bastante, reduzindo as trocas com o disco.
Cada vez que o processo consumia todo o seu quantum, descia uma fila e o quantum dobrava:
Um processo de 100 quanta precisava de apenas 7 trocas em vez de 100 para um round-robin simples!
O CTSS movia o processo para a classe mais alta se o usuário apertasse <Entra> no terminal (achando que ele era interativo). Alunos com programas pesados de cálculo ficavam apertando <Entra> direto para furar a fila! Moral: conseguir acertar na prática é muito mais difícil que acertar na teoria.
Perguntas de análise sobre os 4 temas abordados
Se o escalonador de admissão carregar na memória apenas processos orientados à CPU, o que acontece com o desempenho geral do sistema?
Por que não é uma boa ideia escolher um quantum de 2 ms nem de 500 ms?
O que é inanição (starvation) e como o escalonamento por prioridades pode causar esse problema?
Por que no CTSS o quantum dobrava a cada nível em vez de permanecer fixo?
Os quatro mecanismos que estudamos se complementam: os três níveis organizam a admissão, o round-robin garante justiça, as prioridades favorecem quem mais precisa, e as filas múltiplas reduzem o custo das trocas.
3 Níveis + Filas Múltiplas
Sistemas em lote usam admissão controlada e filas com quanta progressivos para otimizar vazão e reduzir trocas de contexto com o disco.
Round-Robin + Prioridades
Sistemas interativos combinam alternância circular com prioridades dinâmicas (1/f) para garantir resposta rápida e evitar inanição.
Apresentação acadêmica - Sistemas Operacionais - ADS 1º Semestre