Definição
Um **Controlador DMA (DMAC)** é uma unidade de hardware que permite dispositivos de E/S transferirem dados diretamente para/de memória do sistema **sem intervenção da CPU** — liberando o processador para outras tarefas.
Como Funciona
- Dispositivo requisita transferência DMA (asserta DRQ).
- DMAC ganha controle do barramento (via HOLD/HLDA ou árbitro de barramento).
- DMAC gera endereços de memória, sinais de leitura/escrita.
- Dados movem: Dispositivo ↔ Memória (bypass registradores CPU).
- DMAC sinaliza conclusão (interrupção ou flag de status).
- CPU retoma.
Principais Benefícios
- Descarrega CPU: Nenhum ciclo de instrução para movimento de dados.
- Maior throughput: Transferências em burst na velocidade do barramento.
- Concorrência: CPU computa enquanto E/S prossegue.
- Latência determinística: Crítico para áudio, vídeo, rede.
Usos Comuns
- E/S de disco (controladores SATA/NVMe têm DMA embutido)
- Pacotes de rede (NIC → RAM)
- Streaming áudio/vídeo (placa de som, GPU)
- Memória-para-memória (aceleração memcpy)
- Microcontroladores: UART/SPI/I2C/ADC → buffers RAM
Tipos
- Single-channel / Multi-channel (ex.: 8237: 4 canais; SoCs modernos: 16–64+)
- Cycle steal / Burst / Block / Demand / Cascade modes
- Scatter-gather — cadeias de descritores para buffers não contíguos.
Contexto Moderno
No x86, DMA gerenciado por chipset/PCIe root complex. Em ARM/MCUs, DMAC integrado (PL330, DMA2D, etc.). Drivers programam descritores; hardware executa. Essencial para performance.