DMA和內存映射IO之間有什麼區別?他們都和我很相似。DMA和內存映射IO之間有什麼區別?
回答
內存映射I/O允許CPU通過讀寫特定內存地址來控制硬件。通常這將用於低帶寬操作,例如更改控制位。
DMA允許硬件直接讀取和寫入內存沒有涉及CPU。通常這將用於高帶寬操作,如磁盤I/O或攝像機視頻輸入。
內存映射IO意味着設備寄存器映射到機器的內存空間 - 當這些內存區域被CPU讀取或寫入時,它從設備讀取或寫入設備,而不是實際內存。爲了將數據從設備傳輸到實際的內存緩衝區,CPU必須從內存映射設備寄存器讀取數據並將其寫入緩衝區(並將數據傳輸到設備)。
通過DMA傳輸,器件能夠直接向真實存儲器緩衝區本身傳輸數據或從其中傳輸數據。 CPU通知設備緩衝區的位置,然後可以在設備直接訪問內存時執行其他工作。
由於其他人已經回答了這個問題,我只是補充一點歷史。
回到過去,在x86(PC)硬件上,只有I/O空間和內存空間。這些是兩個不同的地址空間,通過不同的總線協議和不同的CPU指令訪問,但能夠通過相同的插卡槽進行通信。
大多數設備使用控制接口和批量數據傳輸接口的I/O空間。訪問數據的簡單方法是執行大量的CPU指令從一個I/O地址一次一個字地傳輸數據到一個內存地址(有時稱爲「位撞」)。
爲了移動從設備到主機內存的數據自主,ISA總線協議中不支持設備啓動傳輸。發明了一種折中解決方案:DMA控制器。這是一塊硬件,由CPU坐起來,發起傳輸以將數據從設備的I/O地址移動到內存,反之亦然。因爲I/O地址是相同的,所以DMA控制器完成與CPU相同的操作,但效率更高一些,並允許一些自由來保持在後臺運行(儘管可能不會持續很長時間與記憶交談)。
快速進入PCI時代,總線協議變得更加智能:任何設備都可以啓動傳輸。因此,例如,RAID控制卡可以在任何喜歡的時間移動喜歡的任何數據或從主機移動。這被稱爲「總線主控」模式,但由於沒有特殊原因,即使舊的DMA控制器早已不存在,人們仍將此模式稱爲「DMA」。與舊的DMA傳輸不同,通常根本不存在相應的I/O地址,並且總線主控模式通常是設備上唯一存在的接口,根本沒有CPU「比特砰擊」模式。
在Linux內核中'DMA'被超過5000個C文件提及,這可能是每個人都在談論DMA的原因。 – JohnnyFromBF 2015-06-17 16:35:20
直接內存訪問(DMA)是一種將數據從I/O傳輸到內存和從內存傳輸到I/O而無需CPU干預的技術。爲此,使用名爲DMA控制器的特殊芯片來控制數據的所有活動和同步。因此,與其他數據傳輸技術相比,DMA要快得多。
另一方面,虛擬內存充當主內存和輔助內存之間的緩存。預先將數據從輔助存儲器(硬盤)提取到主存儲器中,以便在需要時可以在主存儲器中使用數據。它允許我們在系統上運行更多的應用程序,而不是有足夠的物理內存來支持。
- 1. 寫入文件和映射內存之間有什麼區別?
- 2. DMA-Engine和DMA-Controller有什麼區別?
- 3. 用戶空間緩衝區和內存映射文件之間的DMA
- 4. 內存競技場和內存池之間有什麼區別?
- 5. str.format_map(映射)和str.format之間的區別是什麼
- 6. 彈簧請求映射和URL映射有什麼區別?
- 7. 哈希映射和併發哈希映射有什麼區別?
- 8. 鍵盤映射 - Mac OS X和Mac OS X 10.5+之間有什麼區別?
- 9. Perforce映射規則中的點和asterik之間有什麼區別?
- 10. 「層」和「層」之間有什麼區別?
- 11. Tableau和QlikView之間有什麼區別
- 12. Microsoft.CompilerServices.AsyncTargetingPack和Microsoft.Bcl.Async之間有什麼區別?
- 13. @Entity和@embeddable之間有什麼區別
- 14. ContentObservable和DataSetObservable之間有什麼區別?
- 15. touchmove和gesturechange之間有什麼區別?
- 16. :notification.flags和notification.defaults之間有什麼區別?
- 17. proc和lambda之間有什麼區別?
- 18. :: after和after之間有什麼區別?
- 19. read()和io.read()之間有什麼區別?
- 20. Request()和Request.Form()之間有什麼區別?
- 21. WebServiceBinding.EmitConformanceClaims和WebServiceBinding.ConformanceClaims之間有什麼區別?
- 22. getA()和this.getA()之間有什麼區別?
- 23. (int)和intval()之間有什麼區別?
- 24. set_value和= pandas之間有什麼區別
- 25. * zoom和zoom之間有什麼區別?
- 26. {0}和「」之間有什麼區別?
- 27. typedef和using之間有什麼區別?
- 28. 「」和「'之間有什麼區別?
- 29. STDIN和tty之間有什麼區別?
- 30. +和%之間有什麼區別?
也有關:[Linux設備驅動程序,第2版:第13章:mmap和DMA](http://www.xml.com/ldd/chapter/book/ch13.html);不過,首先閱讀這裏的答案幫助了我很多。 – sdaau 2014-01-22 12:29:18