1. 程式人生 > >DMA-Direct Memory Access

DMA-Direct Memory Access

什麼是?

        DMA 首先它是一種資料的傳輸方式;其次傳輸斷點包括,從裝置到記憶體,記憶體到儲存,記憶體到記憶體等;最後,它是在不經過cpu情況下實現資料傳輸。、

        DAM主要有共享快取DMA,Scatter/Gather DMA,前者使用主記憶體的一塊共享記憶體區域,後者則是用多個不同地址的記憶體塊實現。

        DMA 控制器,一種特殊的硬體,負責執行DMA操作,包括資料傳輸及裁決訪問系統匯流排。DMA控制器連線著資料傳輸的兩端,負責監控,跟蹤傳輸的位元組數,傳輸設定(I/O型別、記憶體型別、CPU執行狀態和中斷)

        外部裝置的資料傳輸觸發DMA匯流排資料傳輸。例如鍵盤和滑鼠輸入。控制向cpu傳送一個使用系統匯流排的DMA的請求訊號,CPU在完成當前操作之後將匯流排的控制權通過DMA確認訊號交給DMA控制器,如此,DMA控制器就可以像cpu(此時閒置)一樣讀寫資料和控制訊號。當資料傳輸完成,DMA控制器傳送取消DMA傳輸的訊號,cpu移除DMA確認訊號並重新獲取匯流排的控制權。

        DMA整合在計算機匯流排架構上,用於加速計算機操作及支援多工環境。通常來說,CPU會被讀寫操作完全佔據,DMA使得讀寫資料只發生在內建儲存,外部儲存及外圍裝置不需要cpu參與,釋放了cpu能力。DMA使得計算機內部操作流化,因為資料的記憶體讀寫計算機內部最常見的操作,因此釋放與此相關的CPU處理,能夠在很大程度上提升計算機的效能。

        DMA主要應用在對實時操作完成要求比較高的實時計算任務應用上。流式處理是DM的另一重要應用,即資料的傳輸和處理同時進行。應用DMA的硬體主要包括:軟盤,磁碟驅動控制器,顯示卡,網絡卡,音效卡和GPU。

實現?

Synchronous DMA:一次在系統記憶體和外部裝置之間傳輸一個位元組或者一個單詞。每次傳輸完成,DMA要求IO埠在準備好下一次事務的時候進行通知,在這種設定下,這DMA和cpu共享匯流排時鐘,DMA在任何情況下都能獲取系統匯流排的控制權。

Burst Mode DMA:假定傳輸的兩端都能夠即時的收發資料。cpu設定控制器,當I/O訊號觸發,全部的資料就會被拷貝到目的地。DMA在資料傳輸時對系統匯流排具有唯一的控制權。Burst Mode 模式下DMA資料傳輸相對於同步DMA要快很多。

Flyby DMA(不是所有的controller都支援): 使用源和目的地地址,構造一個同時讀寫的環。因為讀環和寫環被壓縮到了同一個環,所以資料傳輸非常快。Flyby DMA也支援burst和同步型別的事務。