O que você vai aprender
Descrever a organização em camadas do subsistema de E/S.
Comparar polling, interrupção e DMA quanto a custo de CPU e latência.
Explicar a estrutura, as funções e os riscos de um device driver.
Justificar a escolha da técnica de E/S conforme o dispositivo e o sistema.
Comparar máquinas virtuais e contêineres quanto a isolamento e custo.
Caracterizar um RTOS e o que o distingue de um SO de propósito geral.
O hardware é lento, caótico e diverso
A CPU executa bilhões de operações por segundo; um disco responde em milissegundos, um teclado em centenas de milissegundos entre teclas. Além disso, cada dispositivo fala um "dialeto" próprio de registradores e comandos. Se cada aplicação tivesse de conhecer cada controladora, programar seria um inferno.
O subsistema de E/S do SO esconde essa diversidade e essa lentidão. Ele oferece uma interface uniforme (open/read/write) e cuida de esperar o hardware sem desperdiçar a CPU. Como ele faz isso — polling, interrupção ou DMA — é o coração desta aula.
O que veremos nesta aula
de E/S→Controladora
(hardware)→Polling ·
Interrupção · DMA→Drivers
Subimos da controladora física até a abstração de arquivo, passando pelas três formas de mover dados e pela peça que conhece cada dispositivo: o driver.
Camadas do subsistema de E/S
Subsistema de E/S. Pilha de camadas do SO que vai da chamada de sistema da aplicação até a controladora, escondendo as diferenças entre dispositivos.
de dispositivo→Driver→Controladora
Como a CPU conversa com a controladora
A CPU acessa os registradores da controladora de dois modos. No I/O mapeado em memória (MMIO), os registradores aparecem como endereços de memória comuns — ler/escrever neles controla o dispositivo. No I/O por portas (x86), instruções especiais (in/out) acessam um espaço de endereçamento separado.
Em ambos, o diálogo é: a CPU escreve um comando no registrador de comando, consulta o registrador de status para saber quando terminou, e troca dados pelo registrador de dados. A pergunta central é: como a CPU descobre que o dispositivo terminou? É aí que entram polling, interrupção e DMA.
As três técnicas lado a lado
| Técnica | Como descobre o fim | Custo de CPU | Bom para |
|---|---|---|---|
| Polling | CPU lê o status em laço | Alto (espera ocupada) | Dispositivos rápidos; baixa latência |
| Interrupção | Dispositivo avisa a CPU | Médio (1 ISR por evento) | Dispositivos lentos/esporádicos |
| DMA | 1 interrupção ao fim do bloco | Baixo (CPU livre durante a transferência) | Alta vazão (disco, rede) |
Passo a passo: uma leitura de disco com DMA
DMA: Direct Memory Access
O preço escondido do polling
O polling parece simples — um laço que lê o status até o dispositivo ficar pronto. O problema é a espera ocupada (busy-wait): a CPU queima ciclos sem fazer nada útil enquanto espera. Para um disco lento, isso desperdiça milhões de ciclos por operação.
A interrupção resolve: o dispositivo avisa quando termina, liberando a CPU para outros processos no meio-tempo. Porém, cada interrupção tem custo (salvar contexto, executar a ISR, restaurar). Em rajadas de eventos muito frequentes — uma placa de rede de 10 Gb/s, por exemplo —, o excesso de interrupções (interrupt storm) pode sufocar a CPU; daí técnicas como coalescência de interrupções e polling adaptativo.
Esperando uma encomenda
Onde cada técnica brilha
| Dispositivo | Técnica recomendada | Por quê |
|---|---|---|
| Teclado | Interrupção | Eventos raros; não vale esperar |
| Sensor a 1 kHz em MCU | Polling/timer | Latência baixa e previsível; sem overhead de ISR |
| SSD NVMe | DMA + interrupção | Alta vazão; CPU livre durante a transferência |
| Rede 10 Gb/s | DMA + polling adaptativo | Evitar tempestade de interrupções |
Anatomia do tratamento de uma interrupção
sinaliza IRQ→CPU salva
contexto→Vetor → ISR
do driver→Trata e
confirma→Restaura e
retorna
Buffering, caching e spooling
Entre a aplicação e o dispositivo, o SO interpõe áreas de memória que melhoram desempenho e desacoplamento:
- Buffering: acumula dados para casar velocidades diferentes (a aplicação produz rápido, o disco grava devagar) e para transferir em blocos maiores e eficientes.
- Caching: mantém na RAM blocos de disco recentes (cache de páginas), evitando reler do dispositivo.
- Spooling: enfileira trabalhos para um dispositivo que não pode ser compartilhado simultaneamente, como a impressora.
Por isso, agrupar E/S em poucas operações grandes (com buffers) é muito mais eficiente que muitas operações pequenas, cada uma com seu custo de syscall e de troca de modo.
Verifique seu entendimento
Por que o DMA reduz o uso da CPU em transferências grandes?
Por que um RTOS às vezes prefere polling
Parece contraintuitivo: interrupção não é sempre melhor que polling? Em sistemas de tempo real, nem sempre. Uma interrupção introduz latência de entrada (tempo até a CPU atender) e, pior, jitter (variação dessa latência), pois pode chegar enquanto outra ISR roda ou enquanto interrupções estão desabilitadas.
Para um laço de controle que lê um sensor a 1 kHz com prazo apertado, fazer polling sincronizado por um timer dá latência fixa e previsível, sem o overhead de salvar/restaurar contexto de cada interrupção. Determinismo, de novo, vencendo a eficiência média.
Confusões frequentes
• Achar que DMA "elimina interrupções" — ele gera uma interrupção ao final, em vez de muitas.
• Confundir polling (CPU pergunta) com interrupção (dispositivo avisa).
• Pensar que interrupção é sempre superior — em tempo real, polling pode dar menor jitter.
• Esquecer que drivers rodam em modo núcleo: um bug derruba o sistema todo.
Como escolher a técnica de E/S
Revele a resposta
Por que drivers são a maior fonte de falhas em kernels monolíticos?
Revisão relâmpago
Para onde isso leva
A E/S costura várias aulas:
- As interrupções retomam o tema da Aula 2 (vetor, ISR) e sustentam a preempção (Aula 5).
- O DMA e o buffering apoiam o swap (Aula 9) e o sistema de arquivos (Aula 11).
- A latência de interrupção é métrica central do tempo real (Aula 12).
- Drivers em modo núcleo ligam-se ao isolamento e segurança (Aula 13).
Virtualização: máquinas virtuais e contêineres
Contêiner. Isolamento no nível do SO: vários contêineres compartilham o kernel do hospedeiro, isolando processos por namespaces e cgroups.
| Aspecto | VM | Contêiner |
|---|---|---|
| Isola | Hardware (via hipervisor) | Processos (mesmo kernel) |
| Peso | SO completo por VM | Leve (compartilha kernel) |
| Início | Segundos | Milissegundos |
| Isolamento | Forte (fronteira de hardware) | Mais fraco (mesmo kernel) |
Como a virtualização usa o hardware
Virtualizar com segurança exige apoio do hardware. Quando uma VM executa uma instrução privilegiada (acessar um dispositivo, alterar a tabela de páginas), ela não pode mexer no hardware real diretamente. O hardware de virtualização (Intel VT-x, AMD-V) faz a CPU "sair" para o hipervisor (VM exit), que emula a operação e devolve o controle.
Para a memória, há tabelas de páginas aninhadas (EPT/NPT): a MMU traduz duas vezes — endereço da VM → endereço "físico" da VM → endereço físico real —, isolando a memória de cada VM. É a MMU da Aula 8 elevada a outro nível. Contêineres, por não virtualizarem hardware, dispensam isso, mas por isso isolam menos.
Tipos de hipervisor
| Tipo | Onde roda | Exemplos | Uso típico |
|---|---|---|---|
| Tipo 1 (bare-metal) | Direto no hardware | ESXi, Xen, Hyper-V | Servidores, nuvem |
| Tipo 2 (hospedado) | Sobre um SO hospedeiro | VirtualBox, VMware Workstation | Desktop, testes |
Mecanismos de segurança de plataforma
| Mecanismo | O que faz | Apoio de hardware |
|---|---|---|
| Boot seguro | Verifica assinatura de cada estágio | Chaves na raiz de hardware |
| Raiz de confiança | Guarda chaves e mede o boot | TPM / enclave seguro |
| Isolamento | Separa processos e SO | Modos de CPU, MMU/MPU |
| Menor privilégio | Mínimo de permissões por componente | Anéis, capacidades |
Tempo real: quando a média não basta
Rígido (hard). Perder um prazo é falha catastrófica (airbag, controle de voo, marca-passo).
Flexível (soft). Perder um prazo degrada a qualidade, mas é tolerável (streaming, jogos).
Determinismo: o pior caso é tudo
O coração do tempo real é o determinismo: a garantia de que toda operação termina dentro de um limite de tempo conhecido. Para provar que um sistema cumpre seus prazos, o engenheiro precisa do WCET (Worst-Case Execution Time) de cada tarefa — quanto ela leva no pior cenário possível.
O problema é que muitos recursos que melhoram a média pioram o pior caso e tornam o WCET difícil de calcular: caches (acerto ou erro?), pipelines com predição de desvio, paginação para disco, coleta de lixo. Por isso, em tempo real rígido, esses recursos são desabilitados, controlados ou substituídos por alternativas previsíveis (memória fixa, sem swap, sem GC).
Latência, jitter e WCET
Jitter. Variação da latência entre ocorrências sucessivas. Em controle, o jitter pode ser pior que uma latência alta porém constante.
WCET. Tempo de execução no pior caso de uma tarefa — base para provar escalonabilidade.
RTOS × SO de propósito geral
| Aspecto | RTOS | SO de propósito geral |
|---|---|---|
| Objetivo | Cumprir prazos (determinismo) | Vazão e interatividade médias |
| Escalonador | Preemptivo por prioridade fixa | Justiça, time-sharing |
| Memória | Estática/fixa, sem swap | Virtual, com paginação |
| Tamanho | KB (FreeRTOS, Zephyr) | MB a GB (Linux, Windows) |
| Foco | Pior caso (WCET) | Caso médio |
FreeRTOS em um ESP32
O FreeRTOS é um kernel de tempo real minúsculo (poucos KB) muito usado em microcontroladores como ARM Cortex-M e ESP32. Oferece tarefas, escalonamento preemptivo por prioridade, filas, semáforos e mutex com herança de prioridade — tudo o que um sistema embarcado de tempo real precisa, sem MMU nem swap.
Em um robô ou drone, tarefas como ler IMU (alta frequência), estabilizar (controle) e telemetria (baixa frequência) coexistem com prioridades RM, comunicando-se por filas.
Resumo da aula
Atividade em grupo · Escolhendo a técnica de E/S
Em trios, decidam polling, interrupção ou DMA para cada dispositivo.
Roteiro
- Considerem: teclado, sensor lido a 1 kHz num microcontrolador, SSD NVMe e placa de rede 10 Gb.
- Para cada um, justifiquem a técnica de transferência mais adequada.
- Avaliem o impacto na latência e no uso de CPU.
- Discutam por que um RTOS pode preferir polling em certos casos.
Mini-quiz · Aula 13
20 questões sobre esta aula. Escolha e veja a explicação na hora.
📌 Resumo — leve isto para a prova
- A E/S é organizada em camadas para esconder a diversidade de hardware.
- Polling gasta CPU em espera; interrupção avisa o evento; DMA transfere blocos sozinho.
- DMA é essencial para dispositivos de alta vazão como disco e rede.
- Drivers dão interface uniforme, mas, em modo núcleo, são fonte crítica de falhas.
- Buffering, caching e spooling melhoram o desempenho; tempo real às vezes prefere polling.
- Máquina virtual isola um sistema inteiro; contêiner isola processos sobre o mesmo núcleo.
- Num RTOS o que importa é o pior caso: determinismo, latência limitada e jitter previsível.