概念
直接存儲器存取方式,主要用於快速設備和主存儲器成批交換數據的場合。在這種套用中,處理問題的出發點集中到兩點:一是不能丟失快速設備提供出來的數據,二是進一步減少快速設備入出操作過程中對CPU的打擾。這可以通過把這批數據的傳輸過程交由一塊專用的接口卡(DMA接口)來控制,讓DMA卡代替CPU控制在快速設備與主存儲器之間直接傳輸數據,此時每傳輸一個數據只需一個匯流排周期即可。從共同使用匯流排的角度看,DMA和CPU成為競爭對手關係。當完成一批數據傳輸之後,快速設備還是要向CPU發一次中斷請求,報告本次傳輸結束的同時,"請示"下一步的操作要求。
特點
PIO模式下硬碟和記憶體之間的數據傳輸是由CPU來控制的;而在DMA模式下,CPU只須向DMA控制器下達指令,讓DMA控制器來處理數據的傳送,數據傳送完畢再把信息反饋給CPU,這樣就很大程度上減輕了CPU資源占有率。DMA模式與PIO模式的區別就在於,DMA模式不過分依賴CPU,可以大大節省系統資源,二者在傳輸速度上的差異並不十分明顯。DMA模式又可以分為Single-Word DMA(單位元組DMA)和Multi-Word DMA(多位元組DMA)兩種,其中所能達到的最大傳輸速率也只有16.6MB/s。
DMA 傳送方式的優先權高於程式中斷,兩者的區別主要表現在對CPU的干擾程度不同。程式中斷請求不但使CPU停下來,而且要CPU執行中斷服務程式為中斷請求服務,這個請求包括了對斷點和現場的處理以及CPU與外設的傳送,所以CPU付出了很多的代價;DMA請求僅僅使CPU暫停一下,不需要對斷點和現場的處理,並且是由DMA控制外設與主存之間的數據傳送,無需CPU的干預,DMA只是借用了一點CPU的時間而已。還有一個區別就是,CPU對這兩個請求的回響時間不同,對程式中斷請求一般都在執行完一條指令的時鐘周期末尾回響,而對DMA的請求,由於考慮它的高效性,CPU在每條指令執行的各個階段之中都可以讓給DMA使用,是立即回響。 DMA主要由硬體來實現,此時高速外設和記憶體之間進行數據交換不通過CPU的控制,而是利用系統匯流排。DMA方式是I/O系統與主機交換數據的主要方式之一,另外還有程式查詢方式和中斷方式。
DMA工作原理
DMA 是所有現代電腦的重要特色,他允許不同速度的硬體裝置來溝通,而不需要依於 CPU 的大量 中斷 負載。否則,CPU 需要從 來源 把每一片段的資料複製到 暫存器,然後把他們再次寫回到新的地方。在這個時間中,CPU 對於其他的工作來說就無法使用。
DMA 傳輸重要地將一個記憶體區從一個裝置複製到另外一個。當 CPU 初始化這個傳輸動作,傳輸動作本身是由 DMA 控制器 來實行和完成。典型的例子就是移動一個外部記憶體的區塊到晶片內部更快的記憶體去。像是這樣的操作並沒有讓處理器工作拖延,反而可以被重新排程去處理其他的工作。DMA 傳輸對於高效能 嵌入式系統 算法和網路是很重要的。
示例
舉個例子,PC ISA DMA 控制器擁有 8 個 DMA 通道,其中的 7 個通道是可以讓 PC 的 CPU 所利用。每一個 DMA 通道有一個 16位元 位址暫存器和一個 16 位元 計數暫存器。要初始化資料傳輸時,裝置驅動程式一起設定 DMA 通道的位址和計數暫存器,以及資料傳輸的方向,讀取或寫入。然後指示 DMA 硬體開始這個傳輸動作。當傳輸結束的時候,裝置就會以中斷的方式通知 CPU。
"分散-收集" (Scatter-gather) DMA 允許在一次單一的 DMA 處理中傳輸資料到多個記憶體區域。相當於把多個簡單的 DMA 要求串在一起。再一次,這個動機是要減輕 CPU 的多次輸出輸入中斷和資料複製任務。
DRQ 意為 DMA 要求;DACK 意為 DMA 確認。這些符號一般在有 DMA 功能的電腦系統硬體概要上可以看到。他們表示了介於 CPU 和 DMA 控制器之間的電子訊號傳輸線路。