1.DMA請求
CPU對DMA控制器初始化,並向I/O接口發出操作命令,I/O接口提出DMA請求。
2.DMA響應
DMA控制器對DMA請求判別優先級及屏蔽,向總線裁決邏輯提出總線請求。當CPU執行完當前總線周期即可釋放總線控制權。此時,總線裁決邏輯輸出總線應答,表示DMA已經響應,通過DMA控制器通知I/O接口開始DMA傳輸。
3.DMA傳輸
DMA控制器獲得總線控制權后,CPU即刻掛起或只執行內部操作,由DMA控制器輸出讀寫命令,直接控制RAM與I/O接口進行DMA傳輸。
在DMA控制器的控制下,在存儲器和外部設備之間直接進行數據傳送,在傳送過中不需要中央處理器的參與。開始時需提供要傳送的數據的起始位置和數據長度。
4.DMA結束
當完成規定的成批數據傳送后,DMA控制器即釋放總線控制權,並向I/O接口發出結束信號。當I/O接口收到結束信號后,一方面停 止I/O設備的工作,另一方面向CPU提出中斷請求,使CPU從不介入的狀態解脫,並執行一段檢查本次DMA傳輸操作正確性的代碼。最后,帶着本次操作結果及狀態繼續執行原來的程序。
由此可見,DMA傳輸方式無需CPU直接控制傳輸,也沒有中斷處理方式那樣保留現場和恢復現場的過程,通過硬件為RAM與I/O設備開辟一條直接傳送數據的通路,使CPU的效率大為提高。
DMA(Direct Memory Access,直接內存存取) 是所有現代電腦的重要特色,它允許不同速度的硬件裝置來溝通,而不需要依賴於 CPU 的大量中斷負載。否則,CPU 需要從來源把每一片段的資料復制到暫存器,然后把它們再次寫回到新的地方。在這個時間中,CPU 對於其他的工作來說就無法使用。
DMA技術的出現,使得外圍設備可以通過DMA控制器直接訪問內存,與此同時,CPU可以繼續執行程序。那么DMA控制器與CPU怎樣分時使用內存呢?通常采用以下三種方法:(1)停止CPU訪內存;(2)周期挪用;(3)DMA與CPU交替訪問內存。
- 此時CPU不需要訪內,如CPU正在執行乘法指令。由於乘法指令執行時間較長,此時I/O訪內與CPU訪內沒有沖突,即I/O設備挪用一二個內存周期對CPU執行程序沒有任何影響。
- I/O設備要求訪內時CPU也要求訪內,這就產生了訪內沖突,在這種情況下I/O設備訪內優先,因為I/O訪內有時間要求,前一個I/O數據必須在下一個訪問請求到來之前存取完畢。顯然,在這種情況下I/O 設備挪用一二個內存周期,意味着CPU延緩了對指令的執行,或者更明確地說,在CPU執行訪內指令的過程中插入DMA請求,挪用了一二個內存周期。 與停止CPU訪內的DMA方法比較,周期挪用的方法既實現了I/O傳送,又較好地發揮了內存和CPU的效率,是一種廣泛采用的方法。但是I/O設備每一次周期挪用都有申請總線控制權、建立線控制權和歸還總線控制權的過程,所以傳送一個字對內存來說要占用一個周期,但對DMA控制器來說一般要2—5個內存周期(視邏輯線路的延遲而定)。因此,周期挪用的方法適用於I/O設備讀寫周期大於內存存儲周期的情況。