【ディーエムエー】

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

最終更新:
💡 荷物の運搬を任せる、CPUの「直送サービス」

CPUがデータを逐次読み書きせずに、周辺機器とメモリの間で転送する仕組み。CPUは設定や完了処理などを担当し、転送作業をDMAのハードウェアに任せる。

📌 このページのポイント
データを運ぶ作業を任せるDMA PIOの例 バスマスターDMAの例 CPU 機器 メモリ 読む 書く CPUがデータを転送 CPU 機器 メモリ 設定 完了 転送は機器側 CPUは設定や完了処理などを担当する CPUが全く関わらないという意味ではない
機器からメモリへ転送する例。青はCPUによる転送・設定、緑は機器のDMA転送、橙は完了通知。専用DMAコントローラーを使う構成もあり、速度やCPU負荷は実装による。
ひよこ ひよこ
ダイレクトメモリアクセスって何のこと?
ペンギン先生 ペンギン先生
荷物の直送に例えると、店長が一つずつ運ぶ代わりに、運搬係へ依頼する仕組みだよ。CPUがデータを逐次読み書きする作業を、転送用のハードウェアへ任せるんだ。指示や準備まで不要になるという意味ではないよ
ひよこ ひよこ
CPUを通さないって、何が変わるの?
ペンギン先生 ペンギン先生
PIOではCPUが機器のデータを読み、メモリに書くなどの転送を行う。この方式では制御回路や機器の機能が転送するよ。CPUは別の仕事に時間を使えるけれど、転送の設定や完了処理は残るし、メモリなどの利用も競合し得るんだ
ひよこ ひよこ
転送はどう指示するの?
ペンギン先生 ペンギン先生
ドライバーがバッファーを用意し、機器用のアドレス・転送サイズ・方向などを設定するよ。転送が終わったら、割り込みなどで完了を扱う構成がある。CPU用と機器用のアドレスが同じとは限らず、データの同期も必要なんだ
ひよこ ひよこ
どんな機器で使われるの?
ペンギン先生 ペンギン先生
ストレージやネットワーク機器などで使われるよ。専用の転送制御回路を使う構成も、機器自身が転送を開始するバスマスターの構成もある。速さやCPU負荷の減り方は機器・データ量・実装によるので、共通の何倍や数%とは言えないんだ
ひよこ ひよこ
機器がメモリへ直接アクセスしても大丈夫?
ペンギン先生 ペンギン先生
機器の直接アクセスを悪用し、権限のないメモリ領域を読み書きする攻撃が問題になることがあるよ。IOMMUで機器が使える領域を制限する方法があるけれど、ハードウェア・ファームウェア・ドライバーなどの対応が必要。この転送方式なら自動的に保護されるわけではないんだ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ダイレクトメモリアクセス」って出てきたら「CPUが逐次データを運ばず、機器とメモリの転送をハードウェアに任せる仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Direct Memory Access」 = 直接メモリアクセス
💬 Directは「直接」、Memory Accessは「メモリへのアクセス」。CPUがデータを逐次読み書きする代わりに、機器などがメモリへアクセスすることを表すよ

参考資料

← 用語集にもどる