直接記憶體存取(Direct Memory Access, DMA)
DMA是一種用於高效傳輸資料的技術,允許外部設備直接與記憶體進行資料交換,而無需CPU的介入。這種機制大幅減輕了CPU的負擔,並提高了資料傳輸的效率。以下是DMA的基本原理詳細解說:
- 在沒有DMA的情況下,CPU需要負責從I/O設備讀取資料並寫入記憶體,或從記憶體讀取資料並寫入I/O設備。
- 這種方式會消耗大量CPU時間,降低系統整體性能。
DMA 的核心思想
DMA控制器(DMAC)作為一個獨立的硬體模組,負責管理I/O設備與記憶體之間的資料傳輸。CPU只需初始化DMA控制器,設定傳輸參數(如起始地址、資料長度等),之後的傳輸過程由DMA控制器獨立完成。在DMA傳輸期間,CPU並不介入控制記憶體與匯流排,而是直接由DMA控制器管理匯流排、並管理記憶體與I/O之間的資料傳輸。
DMA 的工作流程
(1) CPU初始化DMA控制器
CPU設定DMA控制器的參數,包括:
- 來源地址:資料的起始位置(I/O設備或記憶體)。
- 目標地址:資料的目的位置(記憶體或I/O設備)。
- 傳輸長度:需要傳輸的資料量(通常以位元組為單位)。
- 傳輸模式:例如單次傳輸、區塊傳輸等。
(2) DMA控制器請求匯流排使用權
DMA控制器向CPU發送匯流排請求(Bus Request, BR)或者(HOLD),請求接管系統匯流排的控制權。
(3) CPU釋放匯流排控制權
CPU完成當前指令後,釋放匯流排控制權,並向DMA控制器發送匯流排授權(Bus Grant, BG)或者(HLDA)。
(4) DMA控制器執行資料傳輸
DMA控制器接管匯流排,直接從來源地址讀取資料並寫入目標地址。
傳輸過程中,CPU可以執行其他任務,無需參與資料傳輸。
(5) 傳輸完成後的通知
當傳輸完成時,DMA控制器會向CPU發送終止信號,通知CPU傳輸已完成。系統匯流排控制權交還給CPU。
DMA 的系統方塊圖

註: 常用的DMA控制器為 8237,是一顆40支接腳的直接記憶體存取控制晶片。
本頻道持續更新中(內容涵蓋前端程式設計入門、大學必備程式設計入門、電子系專業課程入門、數學微積分題解)如果身旁有相關科系的學生,不妨推薦一下喔~
相信這裡會是家教或線上課程之外,高中、大學生系統性綜合學習的好選擇。
最後感謝您的觀看!