DMA模式
直接存取數據的數據交換模式
DMA的英文拼寫是“Direct Memory Access”,漢語的意思就是直接內存訪問,是一種不經過CPU而直接從內存存取數據的數據交換模式。
直接存儲器存取方式,主要用於快速設備和主存儲器成批交換數據的場合。在這種應用中,處理問題的出發點集中到兩點:一是不能丟失快速設備提供出來的數據,二是進一步減少快速設備入出操作過程中對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 是所有現代電腦的重要特色,他允許不同速度的硬體裝置來溝通,而不需要依於 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 控制器之間的電子訊號傳輸線路。