O que você vai aprender
Descrever o ciclo de instrução e onde o SO se insere nele.
Explicar por que existem modos de operação e o que cada um permite.
Diferenciar interrupção, exceção e trap.
Avaliar o impacto de mascaramento e latência de interrupção em tempo real.
O SO também é só um programa
Se o sistema operacional é software, ele precisa da CPU para rodar. Mas se um programa de usuário está ocupando a CPU, como o SO retoma o controle? E o que impede esse programa de simplesmente ignorar o SO e mandar no hardware?
As duas respostas estão no hardware, não no software. Nesta aula descemos ao nível do processador para ver os mecanismos — modos de operação e interrupções — sem os quais nada do que veremos adiante se sustentaria.
Roteiro da aula
O ciclo de instrução
fetch→Decodifica
decode→Executa
execute→Verifica
interrupções
Onde o SO entra no ciclo
O SO não roda "em paralelo" à CPU: ele é apenas mais código que a CPU executa. A janela de oportunidade do SO é a etapa final do ciclo — a verificação de interrupções.
Quando o timer dispara uma interrupção, a CPU termina a instrução atual, salva o mínimo de contexto e desvia para o código do SO. É assim que o SO retoma o controle periodicamente mesmo enquanto um programa de usuário roda. Sem esse mecanismo de hardware, um programa que entrasse em laço infinito travaria a máquina para sempre.
Passo a passo: do interruptor ao hardware
Os dois modos de operação
| Aspecto | Modo usuário | Modo núcleo/supervisor |
|---|---|---|
| Privilégio | Restrito | Total |
| Instruções privilegiadas | Bloqueadas (geram exceção) | Permitidas |
| Acesso a dispositivos | Indireto (via syscall) | Direto |
| Quem roda aqui | Aplicações | O kernel |
Quem protege o SO dos programas?
instrução privilegiada→Hardware vê
modo usuário→Gera
exceção→SO assume
e trata
Por que dois modos não bastam às vezes
A arquitetura x86 oferece quatro rings de privilégio (0 a 3), mas a maioria dos SOs usa apenas o ring 0 (kernel) e o ring 3 (usuário). Os rings intermediários quase não são usados na prática.
A virtualização acrescentou outra camada: um hipervisor roda em um nível ainda mais privilegiado (ex.: VMX root na Intel), abaixo do kernel. Em ARM, há níveis de exceção EL0 (app), EL1 (kernel), EL2 (hipervisor) e EL3 (firmware seguro). Em microcontroladores simples, porém, pode haver um único modo — todo código roda privilegiado.
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").
Passo a passo: uma interrupção de teclado
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.
Verifique seu entendimento
Um programa de usuário tenta executar a instrução que desabilita interrupções. O que acontece?
Revele a resposta
Por que um RTOS embarcado às vezes dispensa o modo usuário?
Revisão relâmpago
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
- A CPU só executa o ciclo buscar-decodificar-executar; o SO só roda quando um evento lhe devolve a CPU.
- Os dois modos de operação são a base física da proteção: sem eles não há sistema operacional confiável.
- Interrupção é assíncrona e externa; exceção é síncrona e causada pela instrução; trap é deliberada.
- Mascarar interrupções protege regiões críticas, mas aumenta a latência do sistema.
- Em tempo real, o pior caso da latência de interrupção é requisito de projeto, não detalhe.