← Voltar ao Encontro 3
Sistemas Operacionais · ADS23
01 / 14
Encontro 3 de 17

Arquiteturas de SO
e Chamadas de Sistema

Como o sistema operacional é construído por dentro — e como ele conversa com os programas que rodam nele.

ADS23IFCE Campus HorizonteProf. José Stelio Sampaio Bastos Neto
↓ role pra avançar · use os pontos à direita pra navegar direto
De onde viemos

Duas aulas atrás abrimos o SO por fora. Hoje abrimos por dentro.

Encontro 1

As duas lentes do SO

Máquina estendida (esconde o hardware) + gerenciador de recursos (organiza a fila entre processos).

Encontro 2

Hardware essencial + /proc

CPU, memória, disco — e como o Linux expõe tudo isso em arquivos que você pode ler com cat.

Hoje: o SO não é uma caixa-preta única — existem jeitos diferentes de organizar essa caixa por dentro, e um protocolo fixo pra qualquer programa pedir ajuda a ela.

Pergunta pra turma

O gerenciador de recursos do Encontro 1 é um bloco só,
ou dá pra separar em pedaços?

Depende do sistema operacional. Existem pelo menos 4 respostas diferentes pra essa pergunta — e vocês vão descobrir cada uma em grupo.

Grupo 1
Monolítico
Grupo 2
Em camadas
Grupo 3
Micronúcleo
Grupo 4
Máquina virtual
⏱ cada grupo lê só o seu card (próximos 4 slides) — 6 min de leitura + 4 min preparando como vão explicar pros outros
Grupo 1 · seu card

Núcleo monolítico

Tudo — processos, memória, arquivos, drivers — roda dentro de um único bloco de código, no mesmo espaço de endereçamento e com privilégios máximos.

Aplicação
Aplicação
Núcleo (processos + memória + arquivos + drivers, tudo junto)
Hardware
A favor

Rápido: um módulo chama o outro direto, sem burocracia de mensagens entre processos separados.

Contra

Frágil: um driver de dispositivo com defeito roda com privilégio total e pode derrubar o sistema inteiro.

Exemplos: Linux e Windows são, na essência, monolíticos — mesmo sendo os SOs mais usados do planeta.

Grupo 2 · seu card

Sistema em camadas

O mesmo trabalho do monolítico, mas organizado em níveis empilhados: cada camada só enxerga e usa a camada logo abaixo dela.

Camada 4 — programas do usuário
Camada 3 — E/S de dispositivos
Camada 2 — comunicação entre processos
Camada 1 — memória e escalonamento
Camada 0 — hardware
A favor

Mais fácil de entender e depurar: cada camada tem uma responsabilidade clara e uma "fronteira" definida.

Contra

Definir onde cada função entra é difícil, e forçar tudo a passar camada por camada custa desempenho.

Pioneiro: o sistema THE de Dijkstra (1968) — a ideia inspirou como pensamos em SOs até hoje, mesmo quando o código real não é tão limpo assim.

Grupo 3 · seu card

Micronúcleo

Só o essencial fica dentro do núcleo (com privilégio total). Tudo o resto — driver de disco, sistema de arquivos, driver de rede — vira processo comum, rodando no espaço do usuário.

App
Driver de disco
Sist. de arquivos
micronúcleo
Hardware
A favor

Muito mais confiável: se o driver de áudio travar, ele derruba só o áudio — não o sistema inteiro.

Contra

Mais lento (processos precisam trocar mensagens entre si) e mais difícil de manter no dia a dia.

Onde importa de verdade: sistemas de missão crítica — controle industrial, aviônica, o QNX que roda em caças e usinas.

Grupo 4 · seu card

Máquina virtual

Em vez de dividir o núcleo, um programa especial (o monitor/hipervisor) finge, pra cada sistema operacional "convidado", que ele tem um hardware inteiro só pra si.

App
App
App
Núcleo convidado A
Núcleo convidado B
Monitor de máquina virtual (hipervisor)
Hardware
A favor

Isolamento forte entre sistemas — cada VM tem seu próprio núcleo completo, sem enxergar as outras.

Contra

Pesado: cada VM carrega um SO inteiro (o seu, e o de todo mundo do lado). Gasta RAM, disco e tempo de boot.

Exemplos: VirtualBox (o que vocês já usam desde a Semana 0) e VMware. Guardem esse "pesado" — ele volta em 3 slides.

Agora em plenária

As 4 arquiteturas, lado a lado

Cada grupo apresenta seu card em 1 minuto. Preencham juntos o que falta na tabela.

ArquiteturaOnde vive o códigoSe um driver quebrar…Exemplo
MonolíticoTudo no núcleoSistema inteiro pode cairLinux, Windows
Em camadasNúcleo organizado em níveisDepende da camada, mas ainda é núcleoTHE (histórico)
MicronúcleoSó o essencial no núcleoSó aquele serviço caiQNX, MINIX 3
Máquina virtualUm núcleo inteiro por convidadoSó aquela VM é afetadaVirtualBox, VMware

Percebam o padrão: menos coisa dentro do núcleo = mais seguro, mas geralmente mais lento. Não existe arquitetura perfeita — existe a escolha certa pro problema.

Eixo do curso

Onde entra o Docker nessa história?

Pegadinha: um container não é uma 5ª arquitetura. Ele não tem núcleo próprio — todos os containers de uma máquina compartilham o mesmo núcleo Linux (normalmente monolítico) por baixo.

Máquina virtual

Núcleo completo por convidado

VirtualBox roda um Linux inteiro (kernel, drivers, tudo) dentro de outro Linux. Pesado, mas isolado por completo.

Container

Um núcleo, processos isolados

Docker usa namespaces e cgroups do próprio núcleo Linux pra fazer um processo achar que está sozinho na máquina — sem carregar um SO novo.

É por isso que um container sobe em milissegundos e uma VM leva segundos ou minutos: o container não faz boot de núcleo nenhum — o núcleo já está rodando, ele só empresta um pedaço isolado dele.

Segunda metade do encontro

Como um programa pede ajuda ao SO

Não importa a arquitetura escolhida: todo SO precisa de um jeito controlado de deixar um programa comum acessar recursos protegidos (disco, rede, outros processos). Esse jeito se chama chamada de sistema (system call).

Modo usuário
  • Onde seu programa roda normalmente
  • Acesso restrito — não pode mexer direto no disco ou na rede
  • Se travar, não derruba o sistema
syscall
→
trap
Modo privilegiado (núcleo)
  • Acesso irrestrito a todo o hardware
  • Só o núcleo do SO roda aqui
  • Executa a chamada e devolve o controle

Pense na chamada de sistema como uma campainha: seu programa toca a campainha (a syscall), o núcleo atende, faz o trabalho perigoso por você, e devolve a resposta.

Do abstrato pro concreto

Chamadas de sistema que você já usa sem saber

Toda vez que um programa abre um arquivo, lê teclado ou cria outro processo, ele está, por baixo dos panos, chamando uma dessas.

ChamadaO que fazGrupo
forkCria um processo novo, cópia do atualprocessos
execSubstitui o programa do processo atual por outroprocessos
waitEspera um processo filho terminarprocessos
openAbre um arquivo e devolve um descritor pra usá-loarquivos
readLê bytes de um arquivo ou dispositivo já abertoarquivos
writeEscreve bytes em um arquivo ou dispositivo já abertoarquivos
closeLibera o descritor de um arquivo abertoarquivos

O conjunto de chamadas que um núcleo oferece define sua API. No Linux/Unix, esse padrão se chama POSIX. No Windows, é o Win32.

Prévia da prática

Dá pra ver uma chamada de sistema acontecendo

Existe um comando que "escuta" toda vez que um programa toca a campainha do núcleo, e imprime cada chamada na tela: strace.

Cada linha acima é uma chamada de sistema de verdade, na ordem em que o programa ls as executou. Vocês vão rodar isso — com programas diferentes — na prática de hoje.

Mão na massa

Duas paradas no terminal hoje

PARTE 1

Chamadas de sistema com strace

Rodar strace em comandos simples, identificar syscalls conhecidas, comparar programas diferentes.

PARTE 2

Contêiner x máquina virtual

Comparar na prática o tempo de subida e o consumo de um container Docker contra a VM que vocês já usam.

O roteiro de laboratório detalha os dois passo a passo, com dicas se algo travar. Todas as observações vão pro instrumento semanal (quiz) no fim.

Para ler

Leitura da semana

🟢

Laureano — Arquitetura de Sistemas Operacionais

Monolítico, micronúcleo e máquina virtual, com os mesmos diagramas que vimos hoje. p. 12–13

🟢

Laureano — Chamada de Sistema (System Call)

Modo usuário x privilegiado e o conceito de API, explicado de forma direta. p. 16–17

🔵

Tanenbaum — Chamadas de sistema (processos e arquivos)

As chamadas com nome de verdade (fork, exec, open, read...) — a base do que vocês vão ver no strace. p. 37–40

O quiz da semana verifica essa leitura e recolhe suas observações da prática — tudo no mesmo instrumento.