Direct Memory Access: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
JAnDbot (discussione | contributi)
m markup
Riga 2:
Il DMA ha quindi il compito di gestire i dati passanti nel BUS, permettendo a periferiche che lavorano a velocità diverse di comunicare senza assoggettare la [[CPU]] a un enorme carico di [[interrupt]].
 
Essenzialmente, in un trasferimento DMA un blocco di memoria viene copiato da una periferica a un'altra. La [[CPU]] si limita a dare avvio al trasferimento, mentre il trasferimento vero e proprio è svolto dal '''controller DMA'''. Un caso tipico è lo spostamento di un blocco di memoria da unità di memoria esterna alla memoria principale. Se questa operazione, come avviene grazie al DMA, non blocca il processore, esso può continuare a svolgere altre operazioni.
 
Il '''DMA''' gestisce i trasferimenti tra [[CPU]] e periferiche tramite l'utilizzo di diverse linee (Acknowledge, richiesta, controllo) e di due registri ('''DC''' e '''IOAR'''). Nel momento in cui la [[CPU]] necessita di dati presenti in memoria carica in IOAR l'indirizzo dal quale iniziare l’operazione e in DC il numero di dati consecutivi da trattare, informando il DMA su un ulteriore bit se si tratta di un’operazione di lettura o scrittura. A questo punto il DMA invia la richiesta alla periferica e nel momento in cui riceve il segnale di acknowledge inizia il trasferimento. Ad ogni passo viene incrementato IOAR e decrementato DC finchèfinché DC non è uguale a 0.
 
Il '''trasferimento tra DMA e I/O''' può avvenire in diversi modi:
*''' A blocchi''' (burst transfer): Prevede che una volta che inizia il trasferimento il DMA non lascia il controllo del BUS alla [[CPU]], finchè esso non è terminato: La [[CPU]] rimane bloccata per tutto il trasferimento;
*''' Cycle stealing''': I blocchi sono di piccole dimensioni, in questo modo il tempo nel quale la [[CPU]] è bloccata è più frammentato;
*''' Transparent DMA''': Il DMA occupa il BUS solo quando la [[CPU]] non ne ha bisogno.
 
La tecnica del DMA "scatter-gather" permette il trasferimento di dati verso più regioni di memoria nel corso di una singola transazione DMA. Il risultato è equivalente a quello che si avrebbe con una catena di normali richieste DMA, ma in questo modo si alleggerisce ulteriormente la [[CPU]] da [[interrupt]] e operazioni di copia di dati.
 
La sigla '''"DRQ'''" sta per ''DMA Request'' (richiesta di DMA); la duale '''"DACK'''" sta per ''DMA Acknowledge'' (accettazione di DMA).
 
== Voci correlate ==
* [[Input/Output|I/O]]
* [[Remote Direct Memory Access]]
 
== Collegamenti esterni ==
* [http://www.xml.com/ldd/chapter/book/ch13.html mmap() and DMA], da ''Linux Device Drivers, 2nd Edition'', Alessandro Rubini & Jonathan Corbet
* [http://www.eventhelix.com/RealtimeMantra/FaultHandling/dma_interrupt_handling.htm DMA and Interrupt Handling]
 
{{Portale|informatica}}
 
[[Categoria:Memorie informatiche]]