💻 Escalonamento de Processos (CPU Scheduling) 🎶
🎯Objetivo: Entender por que o sistema operacional deve escolher qual processo usar a CPU e quando, conhecer os principais algoritmos de escalonamento e simular seu funcionamento.
escalonamento
substantivo masculino
Ato ou efeito de escalonar; organização de elementos ou tarefas em “escalões” (níveis ou etapas) segundo determinada ordem ou critério.
Em computação, processo de alocação de tempo da CPU entre vários processos ou threads, visando otimizar o uso do processador e garantir justiça e eficiência.
Etimologia: do verbo escalonar, derivado de escala + sufixo -ar; “escala” do latim scala, “escada”.
Sinônimos: ordenação, programação, priorização.
Em um computador, vários programas (processos) competem pelos mesmos recursos — especialmente a CPU. Se não houver um “maestro”, um único processo pesado poderia travar toda a interface, deixando o usuário sem resposta. O escalonador do sistema operacional tem três metas:
Compartilhamento justo 🤝: cada programa recebe uma fatia de tempo (quantum) para executar, evitando que um monopolize a CPU.
Eficiência ⚡: manter a CPU sempre ocupada (alto throughput) e reduzir tanto o tempo de espera (quanto tempo um processo aguarda para ser atendido) quanto o tempo de resposta (quanto demora até uma ação gerar resultado).
Evitar inanição 🚫: políticas como “aging” (envelhecimento) elevam gradualmente a prioridade de processos que aguardam há muito tempo, garantindo que nenhum fique eternamente na fila.
Imagine uma fila de atendimento num banco: sem ordem, clientes importantes poderiam demorar demais; com escalonamento, cada um avança na fila seguindo regras que equilibram rapidez e justiça.
▶️ FCFS (First‑Come, First‑Served)
Como funciona: processa na ordem de chegada, sem preempção.
Vantagem: simples de implementar.
Desvantagem: “convoy effect” — um processo longo atrasa todos os seguintes.
⚡ SJF (Shortest‑Job‑First)
Como funciona: prioriza o processo com menor tempo de execução estimado.
Vantagem: minimiza o tempo médio de espera.
Desvantagem: difícil saber duração exata; pode causar inanição de processos longos.
🔄 Round‑Robin (RR)
Como funciona: atribui um quantum fixo de tempo a cada processo, depois passa ao próximo.
Vantagem: ótimo para sistemas interativos; tempo de resposta previsível.
Desvantagem: quantum muito curto gera overhead de trocas; muito longo vira FCFS.
⭐ Prioridade
Como funciona: cada processo recebe uma prioridade; o escalonador executa sempre o de maior prioridade, com ou sem preempção.
Vantagem: permite diferenciar processos críticos.
Desvantagem: processos de baixa prioridade podem sofrer inanição — usa‑se aging para mitigar.
Throughput: quantidade de processos concluídos por unidade de tempo.
Turnaround Time: tempo total desde a chegada até a conclusão de um processo.
Waiting Time: tempo total que um processo passa na fila de pronto, aguardando CPU.
Response Time: tempo entre a submissão de um comando e o início de sua execução — importante em interatividade.
Na prática, os algoritmos de escalonamento são parte integrante do kernel de qualquer sistema operacional e determinam como as tarefas da CPU são organizadas em ambientes reais. Veja como cada um deles (ou suas variações) costuma ser aplicado:
First-Come, First-Served (FCFS)
🎥 Filas de impressão e batch: Em muitos spoolers de impressão e sistemas de processamento em lote (batch), jobs chegam, entram em fila e são atendidos exatamente na ordem de chegada, sem preempção, porque não há interface interativa esperando resposta imediata.
🖥️ JBOD (Just a Bunch Of Disks): Em controladores de disco simples, leituras/gravações podem ser agendadas em ordem de chegada para garantir previsibilidade.
Shortest-Job-First (SJF)
🎞️ Transcodificação de vídeos: Em servidores dedicados, pode-se estimar o tempo de cada tarefa (vídeo curto vs. longo) e priorizar as mais curtas para aumentar o número de tarefas concluídas por hora.
📦 Sistemas de build (compilação): Jobs de compilação rápida (um único arquivo) são disparados antes de builds grandes (todo o projeto), reduzindo tempo médio até o programa ficar disponível.
Round-Robin (RR)
💻 Sistemas multitarefa interativos: Quase todos os sistemas operacionais modernos de desktop (Windows, macOS, antigas versões do UNIX) usam RR ou variações com múltiplas filas de prioridades: cada processo recebe um “time slice” curto (ex: 10 ms) de CPU, passando rapidamente ao próximo, garantindo resposta ágil ao usuário.
🕹️ Jogos e aplicações gráficas: Threads de renderização e input se alternam para manter animações fluidas sem travamentos perceptíveis.
Escalonamento por Prioridade (com Aging)
📊 Servidores de banco de dados: Consultas críticas recebem prioridade alta para garantir baixa latência, enquanto tarefas de manutenção (indexação, backups) rodam em segundo plano com prioridade menor, mas sem jamais ficarem bloqueadas indefinidamente graças ao aging.
🛠️ Sistemas embarcados: Em sistemas de tempo real (RTOS), threads de controle de hardware têm prioridade máxima, enquanto outras funcionalidades, como registros de logs, rodam apenas quando sobra tempo de CPU.
Algoritmos híbridos (Multilevel Feedback Queue)
⚙️ Linux CFS (Completely Fair Scheduler): Não é puro RR nem puro prioridade, mas uma fila com fatias proporcionais ao peso de cada processo, ajustando dinamicamente o “quantum” conforme uso de CPU recente. Garante tanto justiça quanto eficiência.
🪟 Windows: Usa um escalonador por prioridades em múltiplas filas, rebaixando temporariamente a prioridade de processos CPU-intensivos para favorecer interatividade (aging inverso).