Cosa significa Direct Memory Access?
Il Direct Memory Access (DMA) è un metodo che consente a un dispositivo di input/output (I/O) di inviare o ricevere dati direttamente alla o dalla memoria principale, bypassando la CPU per accelerare le operazioni di memoria.
Il processo è gestito da un chip noto come controller DMA (DMAC).
Techopedia spiega il Direct Memory Access (Accesso diretto alla memoria)
Il DMA è una componente fondamentale di tutti i computer moderni perché consente a periferiche che lavorano a velocità diverse di comunicare senza coinvolgere l’unità di controllo (CPU) per ogni byte trasferito, interferendo con il funzionamento generale del sistema.
Nei computer più vecchi, i canali DMA erano quattro, numerati 0, 1, 2 e 3. Con l’introduzione del bus parallelo ISA (Industry Standard Architecture) a 16 bit, sono stati aggiunti anche i canali 5, 6 e 7.
L’ISA era una specifica standard dei computer IBM compatibili, che consentiva a un dispositivo di avviare transazioni (bus mastering) a una velocità superiore. Il controller DMA ISA dispone di 8 canali DMA, ciascuno dei quali associato a un indirizzo a 16 bit e a registri di conteggio.
Successivamente, l’ISA è stato sostituito dalle schede di espansione AGP (accelerated graphics port) e PCI (peripheral component interconnect), che sono molto più veloci e permettono a ogni DMA di trasferire circa 2 MB di dati al secondo.
Le risorse di sistema di un computer che vengono utilizzate per la comunicazione tra hardware e software sono di quattro tipi:
- Indirizzi di I/O
- Indirizzi di memoria
- Interrupt request (IRQ)
- Canali di Direct memory access (DMA)
I canali DMA vengono utilizzati per trasmettere i dati tra la periferica e la memoria di sistema. Tutte e quattro le risorse di sistema si basano su determinate linee bus (linee di comunicazione tra il microprocessore e i dispositivi di supporto), con alcune che vengono utilizzate per gli IRQ, altre per gli indirizzi I/O o di memoria, e altre ancora per i canali DMA.
Un canale DMA consente a un dispositivo di trasferire dati senza esporre la CPU a un sovraccarico di lavoro. Senza i canali DMA, la CPU andrebbe a copiare ogni dato utilizzando un bus periferico dal dispositivo di I/O, occupa spazio di memoria. Inoltre, l’utilizzo di un bus periferico andrebbe a occupare la CPU durante il processo di lettura/scrittura, impedendogli di eseguire altre operazioni fino al completamento dell’operazione.
Con il DMA, la CPU può tranquillamente eseguire altre operazioni durante il trasferimento dei dati. Il trasferimento dei dati viene avviato dalla CPU, mentre il blocco di dati può essere trasferito da e verso la memoria dal DMAC in tre modi.
- In modalità burst: il bus di sistema viene rilasciato solo al termine del trasferimento dei dati.
- In modalità cycle stealing: durante il trasferimento dei dati tra il canale DMA e il dispositivo di I/O, il bus di sistema viene ceduto per alcuni cicli di clock in modo che la CPU possa eseguire altre operazioni. Al termine del trasferimento dei dati, la CPU riceve una richiesta di interrupt dal controller DMA.
- In modalità trasparente: il DMAC può occupare il bus di sistema solo quando non è richiesto dal processore.
Tuttavia, l’uso di un controller DMA può causare problemi di coerenza della cache. I dati memorizzati nella RAM a cui accede il controller DMA potrebbero non essere aggiornati con i dati corretti della cache se la CPU utilizza una memoria esterna.
Le soluzioni comprendono il flushing delle linee della cache prima di avviare i trasferimenti DMA in uscita, oppure l’esecuzione di un’invalidazione della cache sui trasferimenti DMA in entrata quando le scritture esterne vengono segnalate al controller della cache.