DMA

読み:でぃーえむえー / 英語表記:Direct Memory Access

主記憶と入出力装置の間で、CPUを介さずにデータを転送する方式。転送の間、CPUはほかの処理を進められる。

イマシルちゃんの解説

ディスクからメモリへ、大量のデータを運ぶとき、
CPUが1つずつ手で運んでいたら、ほかの仕事が何もできなくなっちゃうよね。

DMAは、データ運びの専門スタッフ(DMAコントローラ)にお願いする仕組みなんだ。
CPUは「ここからここまで運んでおいて」って頼むだけで、あとは自分の仕事に戻れる。
運び終わったら、スタッフが「終わったよ!」って知らせてくれるんだよ!

より深い解説

定義

DMA(Direct Memory Access)は、DMAコントローラ(または入出力装置自身)が、CPUに代わって、主記憶と入出力装置(ディスク、ネットワークカードなど)の間のデータ転送を行う方式である。

DMAの流れ

  1. CPUが、DMAコントローラに、転送元、転送先、データの量を設定する
  2. DMAコントローラが、バスの使用権を得て、主記憶と入出力装置の間で直接データを転送する
  3. 転送が終わると、DMAコントローラがCPUに割込みで完了を知らせる

プログラム制御方式との比較

プログラム制御方式(PIO)DMA方式
データの転送CPUが1語ずつ読み書きするDMAコントローラが行う
転送中のCPU転送にかかりきりになるほかの処理ができる
向いている場面少量のデータ大量のデータ(ディスク、ネットワーク、音声・映像)

DMAの転送中は、DMAコントローラとCPUがバスを取り合うことがあり、CPUのメモリアクセスが一時的に待たされること(サイクルスチール)がある。

ネットワークでの利用

ネットワークインタフェースカード(NIC)は、受信したフレームをDMAで主記憶に書き込み、送信するフレームをDMAで主記憶から読み出す。高速なネットワークでは、さらに、ネットワーク越しに相手のコンピュータの主記憶へ直接データを読み書きするRDMA(Remote DMA)も使われ、データセンターでの高速な通信に役立っている。

似た仕組みとの区別

仕組み内容
DMA主記憶と入出力装置の間で、CPUを介さずにデータを転送する
メモリインタリーブ主記憶を複数のバンクに分け、CPUからのアクセスを並列に処理する
ディスクキャッシュ主記憶と磁気ディスクの間にバッファメモリを置き、速度差を補う
仮想記憶外部記憶装置を使い、主記憶の容量を超えるメモリ空間を使えるようにする

実際の試験ではここに出る!

この用語が出てくる記事

↑