DMA
主記憶と入出力装置の間で、CPUを介さずにデータを転送する方式。転送の間、CPUはほかの処理を進められる。
イマシルちゃんの解説
ディスクからメモリへ、大量のデータを運ぶとき、
CPUが1つずつ手で運んでいたら、ほかの仕事が何もできなくなっちゃうよね。
DMAは、データ運びの専門スタッフ(DMAコントローラ)にお願いする仕組みなんだ。
CPUは「ここからここまで運んでおいて」って頼むだけで、あとは自分の仕事に戻れる。
運び終わったら、スタッフが「終わったよ!」って知らせてくれるんだよ!
より深い解説
定義
DMA(Direct Memory Access)は、DMAコントローラ(または入出力装置自身)が、CPUに代わって、主記憶と入出力装置(ディスク、ネットワークカードなど)の間のデータ転送を行う方式である。
DMAの流れ
- CPUが、DMAコントローラに、転送元、転送先、データの量を設定する
- DMAコントローラが、バスの使用権を得て、主記憶と入出力装置の間で直接データを転送する
- 転送が終わると、DMAコントローラがCPUに割込みで完了を知らせる
プログラム制御方式との比較
| プログラム制御方式(PIO) | DMA方式 | |
|---|---|---|
| データの転送 | CPUが1語ずつ読み書きする | DMAコントローラが行う |
| 転送中のCPU | 転送にかかりきりになる | ほかの処理ができる |
| 向いている場面 | 少量のデータ | 大量のデータ(ディスク、ネットワーク、音声・映像) |
DMAの転送中は、DMAコントローラとCPUがバスを取り合うことがあり、CPUのメモリアクセスが一時的に待たされること(サイクルスチール)がある。
ネットワークでの利用
ネットワークインタフェースカード(NIC)は、受信したフレームをDMAで主記憶に書き込み、送信するフレームをDMAで主記憶から読み出す。高速なネットワークでは、さらに、ネットワーク越しに相手のコンピュータの主記憶へ直接データを読み書きするRDMA(Remote DMA)も使われ、データセンターでの高速な通信に役立っている。
似た仕組みとの区別
| 仕組み | 内容 |
|---|---|
| DMA | 主記憶と入出力装置の間で、CPUを介さずにデータを転送する |
| メモリインタリーブ | 主記憶を複数のバンクに分け、CPUからのアクセスを並列に処理する |
| ディスクキャッシュ | 主記憶と磁気ディスクの間にバッファメモリを置き、速度差を補う |
| 仮想記憶 | 外部記憶装置を使い、主記憶の容量を超えるメモリ空間を使えるようにする |