2010-10-03 16 views
20

Qual è la differenza tra DMA e IO mappato in memoria? Sembrano entrambi simili a me.Qual è la differenza tra DMA e IO mappato in memoria?

+0

Relazionato anche: [Driver di dispositivo Linux, Seconda edizione: Capitolo 13: mmap e DMA] (http://www.xml.com/ldd/chapter/book/ch13.html); la prima lettura delle risposte qui mi ha aiutato molto, però. – sdaau

risposta

31

I/O mappati in memoria consentono alla CPU di controllare l'hardware leggendo e scrivendo specifici indirizzi di memoria. Di solito questo sarebbe usato per operazioni a bassa larghezza di banda come cambiare i bit di controllo.

DMA consente all'hardware di leggere e scrivere direttamente la memoria senza che coinvolge la CPU. Di solito questo sarebbe usato per operazioni con larghezza di banda elevata come l'I/O del disco o l'ingresso video della telecamera.

+0

Quindi sono praticamente la stessa cosa ma in direzioni opposte? – f126ck

+0

Non esattamente. DMA è quando due dispositivi che non sono la CPU usano il bus di memoria per comunicare (con un dispositivo di solito è la memoria principale e il processo che viene orchestrato dalla CPU). L'IO mappato in memoria è la CPU che comunica con il dispositivo sul bus di memoria che non è la memoria principale. – jdizzle

+0

perché è necessario mappare il buffer dma anche se il motore dma è nel dispositivo? – ransh

10

IO mappato in memoria significa che i registri del dispositivo sono mappati nello spazio di memoria della macchina - quando quelle regioni di memoria sono lette o scritte dalla CPU, stanno leggendo o scrivendo sul dispositivo, piuttosto che con la memoria reale. Per trasferire i dati dal dispositivo a un buffer di memoria effettivo, la CPU deve leggere i dati dai registri dei dispositivi mappati in memoria e scriverli sul buffer (e viceversa per il trasferimento dei dati sul dispositivo).

Con un trasferimento DMA, il dispositivo è in grado di trasferire direttamente i dati da o verso un buffer di memoria reale. La CPU indica al dispositivo la posizione del buffer e quindi può eseguire altri lavori mentre il dispositivo accede direttamente alla memoria.

17

Poiché altri hanno già risposto alla domanda, aggiungerò solo un po 'di storia.

Indietro ai vecchi tempi, su hardware x86 (PC), c'era solo spazio di I/O e spazio di memoria. Si trattava di due diversi spazi di indirizzamento, accessibili con protocollo bus diverso e istruzioni CPU diverse, ma in grado di parlare sullo stesso slot per schede plug-in.

La maggior parte dei dispositivi utilizzava lo spazio di I/O sia per l'interfaccia di controllo che per l'interfaccia di trasferimento dati di massa. Il modo semplice per accedere ai dati era eseguire molte istruzioni della CPU per trasferire i dati una parola alla volta da un indirizzo I/O a un indirizzo di memoria (noto anche come "bit-banging".)

Per spostare dati dai dispositivi alla memoria host autonomamente, non c'era supporto nel protocollo bus ISA per i dispositivi per avviare i trasferimenti. È stata inventata una soluzione di compromesso: il controller DMA. Si trattava di un componente hardware montato dalla CPU e avviato i trasferimenti per spostare i dati dall'indirizzo I/O di un dispositivo alla memoria o viceversa. Poiché l'indirizzo I/O è lo stesso, il controller DMA sta eseguendo esattamente le stesse operazioni di una CPU, ma in modo un po 'più efficiente e consente una certa libertà di continuare a funzionare in background (anche se probabilmente non a lungo, perché non può parla alla memoria).

Avanti veloce ai giorni di PCI, e i protocolli bus sono diventati molto più intelligenti: qualsiasi dispositivo può avviare un trasferimento. Quindi è possibile, per esempio, una scheda controller RAID per spostare qualsiasi dato a cui piace o dall'host in qualsiasi momento a suo piacimento. Si chiama modalità "master bus", ma per nessun motivo particolare le persone continuano a riferirsi a questa modalità come "DMA" anche se il vecchio controller DMA è da tempo scomparso. A differenza dei vecchi trasferimenti DMA, spesso non esiste alcun indirizzo I/O corrispondente e la modalità Master bus è spesso l'unica interfaccia presente sul dispositivo, senza alcuna modalità "bit-banging" della CPU.

+3

Nel Kernel Linux 'DMA' è menzionato in oltre 5000 file C, questo potrebbe essere un motivo per cui tutti parlano ancora di DMA. – JohnnyFromBF

0

L'accesso diretto alla memoria (DMA) è una tecnica per trasferire i dati dall'I/O alla memoria e dalla memoria agli I/O senza l'intervento della CPU. A tale scopo, viene utilizzato un chip speciale, denominato controller DMA, per controllare tutte le attività e la sincronizzazione dei dati. Come risultato, confronta con altre tecniche di trasferimento dati, DMA è molto più veloce.

D'altra parte, la memoria virtuale funge da cache tra la memoria principale e la memoria secondaria.I dati vengono recuperati in anticipo dalla memoria secondaria (disco rigido) nella memoria principale in modo che i dati siano già disponibili nella memoria principale quando necessario. Ci consente di eseguire più applicazioni sul sistema di quante ne abbiamo abbastanza di memoria fisica da supportare.

Problemi correlati