DMA
主記憶と入出力装置の間で、CPUを介さずにデータを転送する方式。転送の間、CPUはほかの処理を進められる。
イマシルちゃんの解説
ディスクなどの入出力装置と主記憶の間では、大量のデータをやり取りすることがあるよ。
CPUが一つずつ読み書きして運ぶと、その分だけ計算に使える時間が減ってしまうんだ。
DMAは、このデータ転送を専用の回路に任せる方式だよ。
CPUが転送元や転送先、データ量を設定すると、DMAコントローラが実際の読み書きを進めてくれるの。
転送の完了は、CPUに処理を求める割込みなどで知らせるよ。
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からのアクセスを並列に処理する |
| ディスクキャッシュ | 主記憶と磁気ディスクの間にバッファメモリを置き、速度差を補う |
| 仮想記憶 | 外部記憶装置を使い、主記憶の容量を超えるメモリ空間を使えるようにする |