【ディーエムエー】

DMA(ダイレクトメモリアクセス) とは?

💡 荷物の直送サービス――店長(CPU)を通さず倉庫から直接お届け!
📌 このページのポイント
DMA(ダイレクトメモリアクセス) 従来(PIO方式) DMA方式 CPU デバイス メモリ ①読む ②書く CPUがずっと忙しい CPU DMAコントローラ デバイス メモリ ①指示 ②直接転送 ③完了割込 CPUは他の処理が可能
DMA(ダイレクトメモリアクセス)のイメージ
ひよこ ひよこ

DMAって何のこと?

ペンギン先生 ペンギン先生

通販の荷物に例えてみよう。普通は店長(CPU)が倉庫から商品を取り出してお客さんに渡すよね。でも店長が毎回荷物を運んでいたら、他の仕事ができない。DMAは「直送サービス」のように、店長を通さず倉庫(メモリ)から直接お届けする仕組みだよ

ひよこ ひよこ

CPUを通さないってどういうこと?

ペンギン先生 ペンギン先生

通常のデータ転送では、CPUが1バイトずつ周辺機器からデータを読んでメモリに書き込むんだ。これをPIO(プログラムドI/O)と呼ぶよ。DMAではDMAコントローラという専用チップがバスを借りてデータをまとめて転送するから、CPUはその間に別の計算ができるんだ

ひよこ ひよこ

DMAコントローラってどんな仕組みなの?

ペンギン先生 ペンギン先生

CPUが「このアドレスからこのアドレスまで、これだけのサイズを転送して」とDMAコントローラに指示を出すんだ。DMAコントローラはバスを使ってデータを転送して、終わったら割り込みCPUに「終わったよ」と通知するよ

ひよこ ひよこ

どんな場面で使われているの?

ペンギン先生 ペンギン先生

ハードディスクSSDの読み書き、ネットワークカードのデータ送受信、サウンドカードの音声再生、GPUへのテクスチャ転送など、大量データを扱うあらゆるデバイスで使われているよ。身近なところだと、USBメモリのファイルコピーもDMAのおかげで速いんだ

ひよこ ひよこ

DMAがないとどのくらい遅くなるの?

ペンギン先生 ペンギン先生

PIO方式だとCPUがデータ転送に専念するから、その間ほかの処理が完全に止まるんだ。例えば1GBのファイルコピー中にマウスカーソルがカクカクしたら困るよね。DMAのおかげでCPUは数%の時間だけ指示を出して、残りは別の仕事ができるよ

ひよこ ひよこ

DMAにも種類があったりするの?

ペンギン先生 ペンギン先生

あるよ!サードパーティDMACPUとバスを交互に使う方式、バスマスタリングDMAはデバイス自身がバスを制御する方式だよ。最近のPCIeデバイスはほぼバスマスタリング方式で、CPUの介入がさらに少ないんだ

ひよこ ひよこ

セキュリティの問題もあるって聞いたけど…

ペンギン先生 ペンギン先生

鋭いね!DMAはメモリに直接アクセスできるから、悪意あるデバイスが接続されるとメモリの中身を読み取られる危険があるんだ。これをDMA攻撃と呼ぶよ。対策としてIOMMU(Input/Output Memory Management Unit)がデバイスのメモリアクセス範囲を制限しているんだ。ThunderboltやFireWireのような高速インターフェースでは特に注意が必要だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
DMAって出てきたら「CPUを使わずに機器とメモリの間で直接データを転送する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Direct Memory Access」 = 直接メモリアクセス
💬 Direct(直接)+ Memory Access(メモリへのアクセス)で「CPUを経由せず直接メモリにアクセスする」という意味だよ
← 用語集にもどる