Scheduler (Escalonador)

Definição

Scheduler (Escalonador) é o componente do sistema operacional responsável por decidir qual processo ou thread deve ser executado a seguir, e por quanto tempo.
Ele gerencia a distribuição da CPU entre múltiplas unidades de execução, garantindo que todos os processos recebam tempo adequado e que o sistema permaneça responsivo.

O escalonamento pode ocorrer entre processos independentes ou threads dentro de um mesmo processo, dependendo do modelo de concorrência da linguagem ou do sistema operacional.

Objetivos do Scheduler

  • Compartilhar a CPU de forma justa e eficiente entre tarefas ativas.
  • Maximizar o uso dos recursos do sistema (como núcleos e cache).
  • Manter a responsividade de tarefas interativas, como interfaces gráficas.
  • Evitar inanição (starvation) e garantir que todos os processos tenham chance de execução.
  • Suportar múltiplas estratégias de escalonamento, conforme o perfil da aplicação.

Estratégias comuns de escalonamento

  • Round Robin: alterna entre processos em intervalos fixos (time slices).
  • Prioridade: dá preferência a tarefas mais importantes.
  • First Come, First Served (FCFS): executa processos na ordem de chegada.
  • Shortest Job First (SJF): executa primeiro os processos mais curtos.
  • Multilevel Queue: separa processos por tipo (ex: sistema vs. usuário).

Exemplo prático (simulação simples)

Neste exemplo, usamos asyncio para simular tarefas com diferentes tempos e observar como o event loop alterna entre elas:

import asyncio

async def tarefa(nome, tempo):
    for i in range(3):
        print(f'{nome} - passo {i}')
        await asyncio.sleep(tempo)

async def main():
    await asyncio.gather(
        tarefa("Tarefa Curta", 0.1),
        tarefa("Tarefa Longa", 0.3)
    )

asyncio.run(main())

Saída esperada (parcial)

Tarefa Curta - passo 0
Tarefa Longa - passo 0
Tarefa Curta - passo 1
Tarefa Longa - passo 1
...

asyncio permita alternância entre tarefas, mas ele não implementa estratégias como prioridade ou preempção. É uma forma de escalonamento cooperativo, onde cada tarefa decide quando ceder o controle (com await).

Embora o escalonamento real seja feito pelo sistema operacional, o event loop simula um agendador cooperativo em aplicações assíncronas.

O ciclo do Scheduler

[Processos prontos]
     ↓
[Escalonador decide quem executa]
     ↓
[Processo em execução] → [interrompido ou finalizado]
     ↓
[Volta para fila de prontos]
  • O escalonador controla quando e como cada tarefa recebe tempo de CPU.

  • Em sistemas com múltiplos núcleos, o escalonador também define em qual núcleo cada tarefa será executada.

Em linguagens como Python, o escalonamento entre threads é gerenciado pelo sistema operacional, mas o asyncio também inclui um mini-escalonador cooperativo, controlado pelo event loop.

Exemplo: enquanto uma tarefa aguarda uma operação de disco, o escalonador pode colocar outra tarefa para usar a CPU nesse tempo.

Relacionados

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com