複製鏈接
請複製以下鏈接發送給好友

直接內存訪問

鎖定
直接內存訪問(DMA,Direct Memory Access)是一些計算機總線架構提供的功能,它能使數據從附加設備(如磁盤驅動器)直接發送到計算機主板的內存上。
中文名
直接內存訪問
外文名
Direct Memory Access
縮    寫
DMA
領    域
計算機

直接內存訪問簡介

通常會指定一個內存部分用於直接內存訪問。在ISA總線標準中,高達16兆字節的內存可用於DMA。EISA和微通道架構標準允許訪問全套內存地址(假設他們可以用32位尋址)。外圍設備互連通過使用一個總線主控器來完成直接內存訪問。
直接內存訪問的另一個選擇是程控輸入輸出(PIO)接口。在程控輸入輸出接口中,設備之間所有的數據傳輸都要通過處理器。ATA/IDE接口的新協議是Ultra DMA,它提供的突發數據傳輸速率可達33兆字節每秒。具有Ultra DMA/33的硬盤驅動器也支持PIO模式1、3、4和多字DMA模式2(每秒16.6兆字節)。 [1] 

直接內存訪問原理

外設與存儲器之間以及存儲器與存儲器之間的數據傳輸,通常採用程序中斷方式、程序查詢方式和DMA控制方式。程序中斷方式和程序查詢方式都需要CPU發出輸入/輸出(In/Out,I/O)的指令,然後等待I/O設備完成操作之後返回,期間CPU需要等待I/O設備完成操作。DMA在傳輸存儲器和I/O設備的數據時,無須CPU來控制數據的傳輸,直接通過DMA控制器(direct memory access controller,DMAC)完成外設與存儲器之間以及存儲器與存儲器之間的數據高速傳輸。 [3] 
DMA傳輸原理 DMA傳輸原理
一個完整的DMA傳輸包括DMA請求、DMA響應、DMA傳輸和DMA結束4個步驟。DMA傳輸原理如圖1所示,圖中I/O設備為源端設備,由I/O設備向目的端設備(存儲器)傳輸數據,其DMA的基本傳輸過程如下:①CPU對總線控制器進行初始化,制定工作內存空間,讀取DMAC中的寄存器信息,瞭解DMAC的傳輸狀態[1];②I/O設備向DMAC發送DMA請求(DMA request,DREQ),DMAC收到此信號後,向CPU發出總線保持信號(HOLD); ③CPU當前總線週期執行結束後發出總線響應信號保持確認(hold acknowledgment,HLDA); ④DMAC收到總線授權後,向I/O設備發送DMA響應信號DMA確認(DMA acknowledgment,DACK),表示允許I/O設備進行DMA傳送;⑤開始傳輸時,DMAC首先從源地址讀取數據並存入內部緩存中,再寫入目的地址,完成總線數據從源地址到目的地址的傳輸[1];⑥DMA傳輸完成後,DMAC向CPU發出結束信號,釋放總線,使CPU重新獲得總線控制權。一次DMA傳輸只需要執行一個DMA週期,相當於一個總線讀/寫週期,因而能夠滿足外設數據高速傳輸的需要。 [3] 
DMA是所有現代電腦的重要特色,它允許不同速度的硬件設備來溝通,而不需要依於中央處理器的大量中斷負載。否則,中央處理器需要從來源把每一片段的數據複製到寄存器,然後把它們再次寫回到新的地方。在這個時間中,中央處理器對於其他的工作來説就無法使用。
DMA傳輸常使用在將一個內存區從一個設備複製到另外一個。當中央處理器初始化這個傳輸動作,傳輸動作本身是由DMA控制器來實行和完成。典型的例子就是移動一個外部內存的區塊到芯片內部更快的內存去。像是這樣的操作並沒有讓處理器工作拖延,使其可以被重新調度去處理其他的工作。DMA傳輸對於高性能嵌入式系統算法和網絡是很重要的。 舉個例子,個人電腦的ISADMA控制器擁有8個DMA通道,其中的7個通道是可以讓計算機的中央處理器所利用。每一個DMA通道有一個16位地址寄存器和一個16位計數寄存器。要初始化數據傳輸時,設備驅動程序一起設置DMA通道的地址和計數寄存器,以及數據傳輸的方向,讀取或寫入。然後指示DMA硬件開始這個傳輸動作。當傳輸結束的時候,設備就會以中斷的方式通知中央處理器。
"分散-收集"(Scatter-gather)DMA允許在一次單一的DMA處理中傳輸數據到多個內存區域。相當於把多個簡單的DMA要求串在一起。同樣,這樣做的目的是要減輕中央處理器的多次輸出輸入中斷和數據複製任務。 DRQ意為DMA要求;DACK意為DMA確認。這些符號一般在有DMA功能的電腦系統硬件概要上可以看到。它們表示了介於中央處理器和DMA控制器之間的電子信號傳輸線路。 [1] 

直接內存訪問緩存一致性問題

DMA會導致緩存一致性問題。想像中央處理器帶有緩存與外部內存的情況,DMA的運作則是去訪問外部內存,當中央處理器訪問外部內存某個地址的時候,暫時先將新的值寫入緩存中,但並未將外部內存的數據更新,若在緩存中的數據尚未更新到外部內存前發生了DMA,則DMA過程將會讀取到未更新的數據。
相同的,如果外部設備寫入新的值到外部內存內,則中央處理器若訪問緩存時則會訪問到尚未更新的數據。
這些問題可以用兩種方法來解決:
  1. 緩存同調系統(Cache-coherent system):以硬件方法來完成,當外部設備寫入內存時以一個信號來通知緩存控制器某內存地址的值已經過期或是應該更新數據。
  2. 非同調系統(Non-coherent system):以軟件方法來完成,操作系統必須確認緩存讀取時,DMA程序已經開始或是禁止DMA發生。
第二種的方法會造成DMA的系統負擔。 [2] 

直接內存訪問DMA引擎

除了與硬件交互相關外,DMA也可為昂貴的內存耗費減負。比如大型的拷貝行為或scatter-gather操作,從中央處理器到專用的DMA引擎。Intel的高端服務器包含這種引擎,它被稱為I/O加速技術(IOAT)。 [2] 

直接內存訪問RDMA

在電腦運算領域,遠程直接內存訪問(英語:remote direct memory accessRDMA)是一種直接存儲器訪問技術,它將數據直接從一台計算機的內存傳輸到另一台計算機,無需雙方操作系統的介入。這允許高通量、低延遲的網絡通信,尤其適合在大規模並行計算機集羣中使用。
RDMA支持零複製網絡傳輸,通過使網絡適配器直接在應用程序內存間傳輸數據,不再需要在應用程序內存與操作系統緩衝區之間複製數據。這種傳輸不需要中央處理器CPU緩存或上下文交換參與,並且傳輸可與其他系統操作並行。當應用程序執行RDMA讀取或寫入請求時,應用程序數據直接傳輸到網絡,從而減少延遲並實現快速的消息傳輸。
但是,這種策略也表現出目標節點不會收到請求完成的通知(單向通信)等相關的若干問題。 [2] 
參考資料
  • 1.    Osborne, Adam (1980). An Introduction to Microcomputers: Volume 1: Basic Concepts (2nd ed.). Osborne McGraw Hill. pp. 5–64 through 5–93. ISBN 0931988349.
  • 2.    "Physical Address Extension — PAE Memory and Windows". Microsoft Windows Hardware Development Central. 2005. Retrieved 2008-04-07.
  • 3.    劉娟.DMA傳輸在二次雷達譯碼中的應用[J].電子產品世界,2023,30(9):9-12