簡介
通常會指定一個記憶體部分用於直接記憶體訪問。在
ISA匯流排標準中,高達16兆位元組的記憶體可用於DMA。EISA和微通道架構標準允許訪問全套記憶體地址(假設他們可以用32位定址)。外圍設備互連通過使用一個匯流排主控器來完成直接記憶體訪問。
直接記憶體訪問(DMA)的另一個選擇是程控輸入輸出(
PIO)接口。在程控輸入輸出接口中,設備之間所有的數據傳輸都要通過處理器。ATA/IDE接口的新協定是
Ultra DMA,它提供的突發數據傳輸速率可達33兆位元組每秒。具有Ultra DMA/33的硬碟驅動器也支持PIO模式1、3、4和多字DMA模式2(每秒16.6兆位元組)。
直接記憶體訪問原理
DMA是所有現代電腦的重要特色,它允許不同速度的硬體設備來溝通,而不需要依於中央處理器的大量
中斷負載。否則,中央處理器需要從來源把每一片段的數據複製到
暫存器,然後把它們再次寫回到新的地方。在這個時間中,中央處理器對於其他的工作來說就無法使用。
DMA傳輸常使用在將一個記憶體區從一個設備複製到另外一個。當中央處理器初始化這個傳輸動作,傳輸動作本身是由
DMA控制器來實行和完成。典型的例子就是移動一個外部記憶體的區塊到晶片內部更快的記憶體去。像是這樣的操作並沒有讓處理器工作拖延,使其可以被重新調度去處理其他的工作。DMA傳輸對於高性能
嵌入式系統算法和網路是很重要的。 舉個例子,
個人電腦的
ISADMA控制器擁有8個DMA通道,其中的7個通道是可以讓計算機的中央處理器所利用。每一個DMA通道有一個16位地址暫存器和一個16位計數暫存器。要初始化數據傳輸時,設備驅動程式一起設定DMA通道的地址和計數暫存器,以及數據傳輸的方向,讀取或寫入。然後指示DMA硬體開始這個傳輸動作。當傳輸結束的時候,設備就會以中斷的方式通知中央處理器。
"分散-收集"(Scatter-gather)DMA允許在一次單一的DMA處理中傳輸數據到多個記憶體區域。相當於把多個簡單的DMA要求串在一起。同樣,這樣做的目的是要減輕中央處理器的多次輸出輸入中斷和數據複製任務。 DRQ意為DMA要求;DACK意為DMA確認。這些符號一般在有DMA功能的電腦系統硬體概要上可以看到。它們表示了介於中央處理器和DMA控制器之間的電子信號傳輸線路。
快取一致性問題
DMA會導致
快取一致性問題。想像中央處理器帶有快取與外部記憶體的情況,DMA的運作則是去訪問外部記憶體,當中央處理器訪問外部記憶體某個地址的時候,暫時先將新的值寫入快取中,但並未將外部記憶體的數據更新,若在快取中的數據尚未更新到外部記憶體前發生了DMA,則DMA過程將會讀取到未更新的數據。
相同的,如果外部設備寫入新的值到外部記憶體內,則中央處理器若訪問快取時則會訪問到尚未更新的數據。
這些問題可以用兩種方法來解決:
快取同調系統(Cache-coherent system):以硬體方法來完成,當外部設備寫入記憶體時以一個信號來通知快取控制器某記憶體地址的值已經過期或是應該更新數據。
非同調系統(Non-coherent system):以軟體方法來完成,
作業系統必須確認快取讀取時,DMA程式已經開始或是禁止DMA發生。
第二種的方法會造成DMA的系統負擔。
DMA引擎
除了與硬體互動相關外,DMA也可為昂貴的記憶體耗費減負。比如大型的拷貝行為或scatter-gather操作,從中央處理器到專用的DMA引擎。
Intel的高端伺服器包含這種引擎,它被稱為
I/O加速技術(IOAT)。
RDMA
在電腦運算領域,
遠程直接記憶體訪問(英語:
remote direct memory access,
RDMA)是一種直接存儲器訪問技術,它將數據直接從一台計算機的
記憶體傳輸到另一台計算機,無需雙方
作業系統的介入。這允許高通量、低
延遲的網路通信,尤其適合在大規模並行
計算機集群中使用。
RDMA支持
零複製網路傳輸,通過使
網路適配器直接在應用程式記憶體間傳輸數據,不再需要在應用程式記憶體與作業系統緩衝區之間複製數據。這種傳輸不需要
中央處理器、
CPU快取或上下文交換參與,並且傳輸可與其他系統操作並行。當應用程式執行RDMA讀取或寫入請求時,應用程式數據直接傳輸到網路,從而減少延遲並實現快速的訊息傳輸。
但是,這種策略也表現出目標節點不會收到請求完成的通知(單向通信)等相關的若干問題。