Trilha 02 · Como funciona

O sistema operacional

Sem o SO, só um programa poderia rodar por vez. O SO é o gerente que divide os recursos entre todos.

① Intuição

O gerente da fábrica

Pense num gerente de fábrica que coordena vários operários (processos) compartilhando uma única máquina (CPU). Ele dá a cada operário um intervalo de tempo para trabalhar, salva o estado de cada um quando o tempo acaba, e chama o próximo. Ninguém monopoliza a máquina — todos têm a sensação de estar rodando simultaneamente.

O SO também protege os processos uns dos outros: um programa com bug não pode sobrescrever a memória de outro. Cada processo acredita que tem o computador inteiro para si — mas é ilusão gerenciada pelo SO.

A ideia central: o sistema operacional é uma camada de abstração. Ele esconde a complexidade do hardware e garante que múltiplos programas compartilhem recursos com segurança e justiça.
② Visualização interativa

Escalonamento Round-Robin

Veja como o SO divide o tempo de CPU entre 4 processos. Cada processo recebe um quantum de 2 ticks e depois cede a vez ao próximo. Clique em Iniciar e observe a linha do tempo.

Tick: 0 / 19
Spotifyexecutando (quantum 1/2)
LINHA DO TEMPO — ROUND-ROBIN (quantum=2 ticks)
Spotify0/5 ticks
Chrome0/8 ticks
VS Code0/4 ticks
Kernel0/2 ticks

Note que nenhum processo fica bloqueado por muito tempo — é isso que mantém a interface responsiva enquanto você tem vários programas abertos.

③ Explicação técnica

O que o SO gerencia

Algoritmos de escalonamento

# Round-Robin com quantum = 2
fila = [P1(burst=5), P2(burst=8), P3(burst=4), P4(burst=2)]
quantum = 2

enquanto fila não está vazia:
    processo = fila.remover_frente()
    executar(processo, min(quantum, processo.burst_restante))
    processo.burst_restante -= quantum
    se processo.burst_restante > 0:
        fila.inserir_atrás(processo)  # volta para o fim da fila
    senão:
        registrar_conclusão(processo)

Chamadas de sistema (syscalls)

Programas de usuário não acessam hardware diretamente — fazem requisições ao SO via syscalls:

# Programa de usuário faz chamada de sistema (syscall)
arquivo = abrir("dados.txt", "leitura")  # → syscall open()
dados = arquivo.ler(1024)               # → syscall read()
arquivo.fechar()                          # → syscall close()

# O SO verifica permissões e faz a operação real no hardware
# O programa não acessa o disco diretamente — passa sempre pelo SO
Troca de contexto (context switch): quando o SO troca de processo, salva todos os registradores do processo atual (PC, R1, R2…) na memória e restaura os do próximo. Custa ~1–10 µs — é barato, mas pode ser significativo com milhares de trocas por segundo.
④ Projeto para programar

Implemente um escalonador

Mini projeto: implemente Round-Robin em Python com uma lista de processos [{"id": 1, "burst": 5}, ...] e um quantum configurável. Imprima a linha do tempo de execução.

Projeto principal: adicione suporte a prioridades: processos de maior prioridade entram na frente da fila. Compare o tempo médio de espera de Round-Robin vs. FCFS (First-Come, First-Served) vs. SJF (Shortest Job First).

Desafio extra: implemente preempção por prioridade: se um processo de alta prioridade entra na fila enquanto outro roda, o atual é interrompido imediatamente.

⑤ Exercícios rápidos

Teste sua intuição

O que é escalonamento de processos?
No Round-Robin com quantum=2, três processos chegam ao mesmo tempo. Qual é a ordem de execução?
O que é uma troca de contexto (context switch)?
⑥ Aplicações no mundo real

Onde você encontra isso

🐌

PC lento com muitos apps

Mais processos = mais trocas de contexto + memória virtual com swap. O SO está gerenciando tudo isso nos bastidores.

🐳

Containers (Docker)

Containers compartilham o mesmo kernel do SO host, mas têm processos, redes e sistemas de arquivos isolados.

🔁

Event loop (Node.js)

Node.js usa um único processo com um loop de eventos — é escalonamento cooperativo em vez de preemptivo.

⏱️

Real-time OS

Sistemas em aviões e carros usam RTOS — precisam de garantia de que uma tarefa crítica roda dentro de um prazo fixo.

← Anterior: Memória e armazenamento Próxima: Linguagens e compiladores →