一、簡介
DMA(Direct Memory Access,直接存儲器訪問)。在DMA出現之前,CPU與外設之間的數據傳送方式有程序傳送方式、中斷傳送方式。CPU是通過系統總線與其他部件連接並進行數據傳輸。DMA的出現就是為了解決批量數據的輸入/輸出問題。DMA是指外部設備不通過CPU而直接與系統內存交換數據的接口技術。這樣數據的傳送速度就取決於存儲器和外設的工作速度。
1、能向CPU發出系統保持(HOLD)信號,提出總線接管請求;
2、當CPU發出允許接管信號后,負責對總線的控制,進入DMA方式;
3、能對存儲器尋址及能修改地址指針,實現對內存的讀寫;
4、能決定本次DMA傳送的字節數,判斷DMA傳送是否借宿。
5、發出DMA結束信號,使CPU恢復正常工作狀態。
DMA的數據傳送分為預處理、數據傳送和后處理3個階段。
(1)預處理
由CPU完成一些必要的准備工作。首先,CPU執行幾條I/O指令,用以測試I/O設備狀態,向DMA控制器的有關寄存器置初值,設置傳送方向、啟動該設備等。然后,CPU繼續執行原來的程序,直到I/O設備准備好發送的數據(輸入情況)或接受的數據(輸出情況)時,I/O設備向DMA控制器發送DMA請求,再由DMA控制器向CPU發送總線請求(統稱為DMA請求),用以傳輸數據。
(2)數據傳送
DMA的數據傳輸可以以單字節(或字)為基本單位,對於以數據塊為單位的傳送(如硬盤),DMA占用總線后的數據輸入和輸出操作都是通過循環來實現。需要特別之處的是,這一循 環也是由DMA控制器(而不是通過CPU執行程序)實現的,即數據傳送階段是完全由DMA(硬件)來控制的。
(3)后處理
DMA控制器向CPU發送中斷請求,CPU執行中斷服務程序做DMA結束處理,包括檢驗送入主存的數據是否正確,測試傳送過程中是否出錯(錯誤則轉入診斷程序)和決定是否繼續使用DMA傳送其他數據塊等