LRM Prof. Mantovani ← Aulas da disciplina
Semana 10 · Aula 10 de 14

Entrada/saída, interrupções e drivers

O subsistema de E/S, as três formas de transferência (polling, interrupção e DMA) e a estrutura de um driver de dispositivo — o elo do SO com o mundo físico.

📚 Sistemas Operacionais📝 mini-quiz ao final
Objetivos da aula

O que você vai aprender

1

Descrever a organização em camadas do subsistema de E/S.

2

Comparar polling, interrupção e DMA quanto a custo de CPU e latência.

3

Explicar a estrutura, as funções e os riscos de um device driver.

4

Justificar a escolha da técnica de E/S conforme o dispositivo e o sistema.

1 · Motivação

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.

2 · Mapa

O que veremos nesta aula

Camadas
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.

3 · Conceito

Camadas do subsistema de E/S

Controladora. Hardware que interfaceia um dispositivo, com registradores de comando, status e dados que a CPU lê e escreve.
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.
AplicaçãoE/S independente
de dispositivo
DriverControladora
4 · Explicação

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.

5 · Exemplo

As três técnicas lado a lado

TécnicaComo descobre o fimCusto de CPUBom para
PollingCPU lê o status em laçoAlto (espera ocupada)Dispositivos rápidos; baixa latência
InterrupçãoDispositivo avisa a CPUMédio (1 ISR por evento)Dispositivos lentos/esporádicos
DMA1 interrupção ao fim do blocoBaixo (CPU livre durante a transferência)Alta vazão (disco, rede)
6 · Interativo

Passo a passo: uma leitura de disco com DMA

Passo 1
O driver programa a controladora de DMA: endereço de destino na RAM, número de bytes e a operação.
Passo 2
O SO bloqueia o processo que pediu a E/S e escalona outro — a CPU não fica esperando.
Passo 3
A controladora de DMA transfere os dados do disco direto para a RAM, byte a byte, sem a CPU.
Passo 4
Concluída a transferência do bloco, a controladora dispara uma única interrupção.
Passo 5
A ISR do driver confirma o término e o SO desbloqueia o processo, que recebe os dados.
7 · Conceito

DMA: Direct Memory Access

DMA (Direct Memory Access). Mecanismo em que uma controladora dedicada transfere blocos de dados diretamente entre o dispositivo e a RAM, sem a CPU copiar byte a byte; ela só é interrompida ao final.
🔑
Sem DMA, mover 1 MB de disco para a RAM consumiria milhões de operações da CPU só para copiar. Com DMA, a CPU programa a transferência, vai fazer outra coisa e recebe uma única interrupção ao fim. É indispensável para disco, rede e vídeo de alta vazão.
8 · Explicação

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.

9 · Analogia

Esperando uma encomenda

📦 Analogia
Polling é ficar na janela checando a rua a cada segundo se o carteiro chegou — você não faz mais nada. Interrupção é a campainha: você trabalha normalmente e atende quando ela toca. DMA é combinar com o porteiro que ele recebe a encomenda, guarda na sua sala e só te liga uma vez, quando tudo estiver lá. Quanto mais autônomo o mecanismo, menos a CPU desperdiça tempo.
10 · Comparação

Onde cada técnica brilha

DispositivoTécnica recomendadaPor quê
TecladoInterrupçãoEventos raros; não vale esperar
Sensor a 1 kHz em MCUPolling/timerLatência baixa e previsível; sem overhead de ISR
SSD NVMeDMA + interrupçãoAlta vazão; CPU livre durante a transferência
Rede 10 Gb/sDMA + polling adaptativoEvitar tempestade de interrupções
11 · Fluxo

Anatomia do tratamento de uma interrupção

Dispositivo
sinaliza IRQ
CPU salva
contexto
Vetor → ISR
do driver
Trata e
confirma
Restaura e
retorna
💡
Muitos SOs dividem a ISR em duas metades: a parte superior (top half), curtíssima, só reconhece a interrupção; a parte inferior (bottom half/tasklet) faz o trabalho pesado depois, com interrupções reabilitadas. Isso reduz o tempo com interrupções desligadas.
12 · Aprofundamento

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.

13 · Interativo

Verifique seu entendimento

Por que o DMA reduz o uso da CPU em transferências grandes?

No DMA, a controladora dedicada faz a cópia byte a byte. A CPU programa a transferência e fica livre, recebendo uma única interrupção quando o bloco termina — em vez de copiar tudo ela mesma.
14 · Caso prático

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.

15 · Erros comuns

Confusões frequentes

⚠️
Erros comuns nesta aula:
• 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.
16 · Dicas

Como escolher a técnica de E/S

Decida pela tríade vazão × frequência × previsibilidade: muita vazão pede DMA; eventos raros pedem interrupção; latência fixa e crítica pode pedir polling por timer. Para drivers, mantenha a ISR curta (top half) e empurre o trabalho pesado para depois (bottom half). E sempre prefira E/S em blocos grandes com buffer a muitas operações minúsculas.
17 · Interativo

Revele a resposta

Por que drivers são a maior fonte de falhas em kernels monolíticos?
Num kernel monolítico, os drivers executam em modo núcleo, com acesso direto ao hardware e à memória do kernel. Um ponteiro inválido ou um deadlock dentro de um driver não fica isolado: corrompe estruturas do kernel ou trava o sistema inteiro. Como há muitos drivers, escritos por muitos fabricantes e com qualidade variável, eles concentram a maioria dos crashes. Microkernels mitigam isso rodando drivers em modo usuário, isolados — ao custo de overhead de troca de mensagens.
18 · Flashcards

Revisão relâmpago

Pollingvirar
CPU consulta o status do dispositivo em laço (espera ocupada). Alto custo de CPU.
Interrupçãovirar
O dispositivo avisa a CPU quando termina; libera a CPU, mas custa uma ISR por evento.
DMAvirar
Controladora transfere blocos direto à RAM; uma única interrupção ao fim.
Device drivervirar
Módulo que conhece a controladora e oferece interface uniforme (open/read/write/ioctl).
Top/bottom halfvirar
ISR dividida: parte curta reconhece o IRQ; parte adiada faz o trabalho pesado.
19 · Conexões

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).
20 · Síntese

Resumo da aula

🔑
O SO organiza a E/S em camadas para esconder a diversidade do hardware. A CPU descobre o fim de uma operação por polling (pergunta em laço, caro), interrupção (o dispositivo avisa) ou DMA (a controladora transfere blocos sozinha e avisa uma vez). Drivers dão interface uniforme, mas, em modo núcleo, concentram falhas. A técnica certa depende de vazão, frequência e previsibilidade — e o tempo real às vezes prefere polling.
Mão na massa · colaborativo

Atividade em grupo · Escolhendo a técnica de E/S

Em trios, decidam polling, interrupção ou DMA para cada dispositivo.

⏱️ 25 min👥 trios🧩 projeto de sistema

Roteiro

  1. Considerem: teclado, sensor lido a 1 kHz num microcontrolador, SSD NVMe e placa de rede 10 Gb.
  2. Para cada um, justifiquem a técnica de transferência mais adequada.
  3. Avaliem o impacto na latência e no uso de CPU.
  4. Discutam por que um RTOS pode preferir polling em certos casos.
Engenheiro de E/Sescolhe a técnica
Analista de latênciaavalia o tempo de resposta
Relatorjustifica as escolhas
📤 Entrega: Tabela dispositivo→técnica de E/S com justificativa.
Teste seu conhecimento

Mini-quiz · Aula 10

20 questões sobre esta aula. Escolha e veja a explicação na hora.

0/20

📌 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.