Cos'è un Controller DMA? Accesso Diretto alla Memoria Spiegato
Definizione
Un **DMA Controller (DMAC)** è un'unità hardware che permette ai dispositivi I/O di trasferire dati direttamente da/verso la memoria di sistema **senza l'intervento della CPU** — liberando il processore per altre attività.
Come Funziona
- Il dispositivo richiede un trasferimento DMA (attiva DRQ).
- Il DMAC ottiene il controllo del bus (tramite HOLD/HLDA o bus arbiter).
- Il DMAC genera indirizzi di memoria, segnali di lettura/scrittura.
- I dati si muovono: Dispositivo ↔ Memoria (bypassando i registri della CPU).
- Il DMAC segnala il completamento (interrupt o flag di stato).
- La CPU riprende.
Vantaggi Chiave
- Scarico CPU: Nessun ciclo di istruzione per il movimento dei dati.
- Maggiore capacità di trasmissione: Trasferimenti burst alla velocità del bus.
- Concorrenza: La CPU calcola mentre l'I/O procede.
- Latenza deterministica: Critico per audio, video, networking.
Usi Comuni
- I/O su disco (controller SATA/NVMe hanno DMA integrato)
- Pacchetti di rete (NIC → RAM)
- Streaming audio/video (scheda audio, GPU)
- Memoria-memoria (accelerazione memcpy)
- Microcontrollori: UART/SPI/I2C/ADC → buffer RAM
Tipi
- Single-channel / Multi-channel (es. 8237: 4 canali; SoC moderni: 16–64+)
- Modalità Cycle steal / Burst / Block / Demand / Cascade
- Scatter-gather — catene di descrittori per buffer non contigui.
Contesto Moderno
In x86, il DMA è gestito dal chipset/PCIe root complex. In ARM/MCU, DMAC integrato (PL330, DMA2D, ecc.). I driver programmano i descrittori; l'hardware esegue. Fondamentale per le prestazioni.