O que você vai aprender
Descrever a estrutura do kernel e o significado do modo privilegiado.
Diferenciar interrupções, exceções e traps.
Explicar o fluxo de uma chamada de sistema (syscall).
Avaliar o custo da troca de modo e formas de reduzi-lo.
Como um app pede ajuda ao SO?
Um programa em modo usuário não pode tocar no disco, na rede ou no timer. Mesmo assim, ele precisa de tudo isso. Como pedir, sem violar a proteção que o hardware impõe?
A resposta é um conjunto de pontes controladas entre os dois mundos: interrupções (o hardware fala com o SO), exceções (a instrução fala com o SO) e chamadas de sistema (o programa fala com o SO). Esta aula é o mapa dessas pontes.
Estrutura desta aula
estruturas→Interrupções
e exceções→Vetor e
ISR→Syscalls
Veremos primeiro onde o SO vive (o kernel), depois como ele é acionado (interrupções/exceções/traps) e finalmente como o programa o invoca (syscalls).
O kernel
Tudo o que exige privilégio passa pelo kernel: programar o controlador de disco, alterar a tabela de páginas, mascarar interrupções. Bibliotecas e aplicativos ficam em modo usuário e dependem do kernel para essas operações.
Estruturas de kernel
Há várias formas de organizar o código do kernel, com diferentes trade-offs entre desempenho e robustez:
| Estrutura | Ideia | Trade-off |
|---|---|---|
| Monolítico | Tudo em um grande kernel | Rápido, porém menos isolado (Linux) |
| Microkernel | Mínimo no núcleo; serviços em modo usuário | Robusto, porém com overhead de mensagens |
| Híbrido | Mistura dos dois | Equilíbrio (Windows NT, macOS) |
Monolítico vs. microkernel na falha de um driver
| Cenário | Monolítico | Microkernel |
|---|---|---|
| Driver de rede trava | Pode derrubar o kernel inteiro | É só um processo de usuário: pode reiniciar isolado |
| Chamar o driver | Função direta (rápido) | Troca de mensagens (mais lento) |
| Adicionar driver | Módulo no kernel | Novo servidor em modo usuário |
É por isso que sistemas críticos (aviônica, automotivo) frequentemente preferem microkernels: o isolamento contém falhas.
Passo a passo: uma interrupção de teclado
Interrupções, exceções e traps
Exceção/falta. Evento síncrono causado pela própria instrução (divisão por zero, falta de página).
Trap. Interrupção de software intencional, usada para chamadas de sistema.
Síncrono vs. assíncrono
A distinção-chave é quando o evento ocorre em relação à instrução:
- Assíncrono (interrupção): chega "de fora", a qualquer momento, sem relação com a instrução em curso. Ex.: pacote de rede.
- Síncrono (exceção): é causado pela própria instrução e ocorre sempre no mesmo ponto se a executarmos de novo. Ex.: divisão por zero, acesso a página ausente.
- Trap: exceção provocada de propósito pelo software para entrar no kernel — a base das syscalls.
Campainha, alarme e pedido
Os três eventos lado a lado
| Aspecto | Interrupção | Exceção | Trap |
|---|---|---|---|
| Origem | Dispositivo externo | A própria instrução | Software (intencional) |
| Tempo | Assíncrono | Síncrono | Síncrono |
| Exemplo | Timer, rede | Divisão por zero, falta de página | read(), write() |
| Reprodutível? | Não (depende do ambiente) | Sim (mesma instrução) | Sim |
O caminho de qualquer evento ao SO
interrupção→Trata (ISR)→Restaura
e retorna
IRQs, mascaramento e latência
Cada fonte de interrupção tem um número (IRQ). O controlador de interrupções (ex.: APIC no x86, NVIC no ARM Cortex-M) prioriza e entrega as IRQs à CPU. O SO pode mascarar (adiar) interrupções de menor prioridade enquanto trata uma crítica.
A latência de interrupção — tempo entre o sinal e o início da ISR — é métrica vital em tempo real. ISRs longas que mantêm interrupções desabilitadas aumentam essa latência; por isso o padrão é ISR curta que apenas sinaliza uma tarefa para o trabalho pesado (esquema "top half / bottom half").
Verifique seu entendimento
Um programa acessa um endereço de memória cuja página não está na RAM. Que tipo de evento ocorre?
NVIC no ARM Cortex-M
Microcontroladores ARM Cortex-M, onipresentes em embarcados, trazem o NVIC (Nested Vectored Interrupt Controller) integrado ao núcleo. Ele suporta interrupções aninhadas com prioridades configuráveis e salva automaticamente parte do contexto na pilha em hardware, reduzindo a latência.
O vetor de interrupções fica em endereço fixo no início da memória: cada entrada é o endereço da ISR. Programar firmware nessas peças é, em grande parte, escrever ISRs eficientes — exatamente o conteúdo desta aula aplicado ao metal.
Onde os alunos tropeçam
• Chamar toda falha de "interrupção" — divisão por zero é exceção, não interrupção.
• Achar que a syscall é "uma função normal" — ela cruza a fronteira de privilégio via trap, com custo real.
• Escrever ISRs longas que bloqueiam outras interrupções e arruínam a latência de tempo real.
Boas práticas de E/S
Revele a resposta
Por que microkernels podem ser mais lentos que monolíticos?
Revisão relâmpago
Como isto se liga ao curso
Esta aula é a engrenagem central:
- O timer que vimos na Aula 1 é a interrupção que viabiliza a preempção do escalonador (Aula 5).
- A falta de página (exceção) é a base da memória virtual (Aulas 8–9).
- As ISRs reaparecem nos drivers e na E/S por interrupção (Aula 10).
Resumo da aula
Atividade em grupo · Anatomia de uma syscall
Em duplas, rastreiem o caminho de uma chamada de sistema do programa ao hardware.
Roteiro
- Escolham uma syscall (read, write, fork ou nanosleep).
- Descrevam o que está em modo usuário e o que está em modo núcleo.
- Identifiquem o instante exato da troca de modo e o que a dispara.
- Apontem o custo dessa troca e como minimizá-lo.
Mini-quiz · Aula 2
20 questões sobre esta aula. Escolha e veja a explicação na hora.
📌 Resumo — leve isto para a prova
- O kernel roda em modo privilegiado; estruturas variam (monolítico, micro, híbrido).
- Interrupções são assíncronas; exceções são síncronas; traps disparam syscalls.
- O vetor de interrupções direciona cada evento à sua ISR.
- Syscalls comutam para o modo núcleo de forma controlada, com custo de troca.
- A latência de interrupção e ISRs curtas são vitais em tempo real.