ダイレクト メモリ アクセス (DMA) は、コンピューターがデータをより効率的に転送できるようにする方法です。CPU がすべての転送を処理する代わりに、DMA コントローラーはメモリとデバイス間でデータを直接送信します。これにより、時間が節約され、消費電力が削減され、CPU が他のタスクに集中できるようになります。

ダイレクトメモリアクセスの概要
ダイレクト メモリ アクセス (DMA) は、コンピューターがデータをより効率的に移動するために使用する方法です。CPU は、コンピューター内のある場所から別の場所への情報の送信を監視します。これには時間がかかり、CPU は小さなタスクで忙しくなります。
DMA では、DMA コントローラーと呼ばれるシステムの特別な部分がこのジョブを引き継ぎます。これにより、デバイスは、CPU にすべてのステップを処理させることなく、コンピューターのメモリから直接データを送受信できます。転送が行われている間、CPUは他のタスクに自由に取り組むことができます。
このセットアップにより、絶え間ないデータ移動によって CPU の速度が低下しないため、システムがよりスムーズに動作します。また、電力を節約し、コンピューターの全体的なパフォーマンスを向上させるのにも役立ちます。
ダイレクトメモリアクセス機能
高速データ転送
DMA を使用すると、CPU を介さずに大きなデータ ブロックを迅速に転送できるため、スループットが向上します。
CPUオフロード
CPU は反復的なデータ移動タスクから解放され、計算に使用できます。
割り込みオーバーヘッドの削減
DMAは、プログラムされたI/Oと比較して割り込みの数を最小限に抑え、システムのオーバーヘッドを低減します。
ダイレクトメモリ
周辺機器はメモリから直接読み取りまたは書き込みできるため、CPU を介した余分なコピーを回避できます。
マルチチャネルのサポート
最新の DMA コントローラーは複数の独立したチャネルをサポートしており、同時転送が可能です。
バースト転送機能
DMA はバースト モードをサポートしており、効率を高めるために 1 つの連続ストリームでデータ ブロックを転送します。
優先権と仲裁
DMA コントローラーは、優先度レベルを使用して、メモリ バスにアクセスするチャネルを決定します。
転送モード
システムのニーズに応じて、シングル、ブロック、バースト、デマンドベースの転送などのさまざまなモードをサポートします。
複数のバスとの互換性
さまざまなシステムバスと連携し、柔軟な統合を実現します。
エラー検出と処理
多くの DMA システムには、データの整合性を確保するためのパリティ チェックまたはエラー修正が含まれています。
メモリ間転送
一部の DMA コントローラーでは、CPU の介入を必要とせずに、あるメモリの場所から別のメモリの場所にデータを直接コピーできます。
ステップバイステップのDMA操作
| ステップ | 何が起こるか? | シグナル / アクション |
|---|---|---|
| 1 | デバイスは DMA サービスを要求します。 | DRQ (DMA 要求) 回線がアクティブ化されました |
| 2 | DMA コントローラーは、システム バスの制御を要求します。 | BR(バスリクエスト) |
| 3 | CPU は、バスを一時的に DMA コントローラーに解放します。 | BG(バス助成金) |
| 4 | DMAコントローラは、転送するメモリアドレスとワード数(データユニット)を設定します。 | アドレス&カウントレジスタ |
| 5 | データは、CPU をバイパスして、I/O デバイスと RAM の間で直接転送されます。 | 直接転送 |
| 6 | 完了後、DMA コントローラーは CPU に通知します。 | INTR(割り込み) |
DMAコントローラーとその接続

主な部品は、CPU、メモリ、DMAコントローラ、および入出力(I / O)デバイスです。DMA コントローラーは、CPU がすべての作業を行うことなく、メモリと I/O デバイス間のデータの移動を監視します。
I/O デバイスがデータを送受信する必要がある場合、DMA コントローラーに要求を送信します。次に、コントローラーは、コンピューター内のデータの主要な経路であるシステム バスを使用する許可を CPU に要求します。CPUが許可すると、DMAコントローラが制御を行い、メモリとI/Oデバイス間でデータを直接転送します。転送が完了すると、ジョブが終了したことが CPU に通知されます。
この図は、情報を運ぶさまざまな行も示しています。住所行 (灰色) はデータの行き先を決定し、データ行 (緑) は実際の情報を伝達し、制御行 (オレンジ) はプロセスを管理します。DMA バスは、複数の I/O デバイスをコントローラーに接続します。この設定により、システムはデータをよりスムーズに処理し、CPU を他のタスクに解放できます。
DMA転送モードとその違い
| モード | 仕組み | スピード | CPUへの影響 |
|---|---|---|---|
| バーストモード | データブロック全体を1つの連続シーケンスで転送 | 非常に高い | 転送が終了するまで CPU が停止する |
| サイクルスティーリング | バス・サイクルごとに1ワードを転送し、CPUサイクルとインターリーブ | ミディアム | CPUはわずかに遅くなりましたが、止まらなかった |
| 透明モード | CPUがアイドル状態またはバスを使用していない場合にのみ転送します | 下 | CPUを中断することなく稼働 |
DMAメインスタイル
バスマスタリング(ファーストパーティDMA)
バスマスタリングでは、デバイス自体が一時的にシステムバスコントローラの役割を引き受けます。これは、CPU の常時監視なしにメモリから直接読み取りまたは書き込みできることを意味します。デバイスは独自の転送を管理するため、プロセスは非常に高速で効率的です。PCIe GPU、NVMe ドライブ、ネットワーク カードなどの最新の高性能コンポーネントでは、この方法がよく使用されます。これらの転送中は CPU がほとんど空いているため、システム全体のパフォーマンスが向上します。
サードパーティ DMA(コントローラベース)
このモデルでは、中央の DMA コントローラーが複数のデバイスに代わってデータ転送の処理を担当します。各デバイスは要求をコントローラーに送信し、コントローラーはバスを制御してデータを移動します。このアプローチは、以前のコンピュータシステムでは標準であり、ハードウェアがシンプルでコスト効率の高いままである必要がある組み込みマイクロコントローラでは今でも一般的です。すべてのデバイスが同じコントローラーを共有するため、バス マスタリングよりも遅くなり、待ち時間とオーバーヘッドが発生します。
スキャッターギャザーDMA
多くの場合、メモリ内のデータは 1 本の直線で格納されません。さまざまな場所に分割できます。Scatter-Gather DMA を使用すると、分散していても、これらすべてのデータを一度に移動できます。
DMA コントローラーは、各データが配置されている場所のリストを保持します。次に、そのリストに従ってピースを収集し、単一のブロックとして転送します。
スキャッターギャザーDMAの利点
• 散在したデータを余分な手順なしで移動します。
• CPU への信号が少なくて済みます。
• データ転送をより迅速かつスムーズにします。
• 余分なコピーを回避することでメモリ容量を節約します。
DMA とキャッシュの同期
DMA はデバイスとメモリ間でデータを直接移動しますが、CPU は多くの場合、独自のキャッシュで動作します。このため、CPU と DMA は、同じデータの異なるバージョンを認識することがあります。CPUキャッシュに古いデータが残っている場合、デバイスによる変更が無視される可能性があるため、これは問題です。CPU のキャッシュに新しいデータしかない場合、デバイスはメモリから古い値を読み取る可能性があります。これは、次の方法で修正されます。
• CPU はデバイスが読み取る前にキャッシュをフラッシュできるため、メモリには最新のデータが含まれます。
• CPU は、デバイスの書き込み後にキャッシュを無効にできるため、更新されたデータをメモリからロードします。
• 最新のプロセッサは、キャッシュコヒーレント DMA を使用しており、これを自動的に処理します。
DMA 安全性における IOMMU の役割
| 特集 | 機能 | 福利厚生 |
|---|---|---|
| アドレスマッピング | デバイスDMA要求を有効なメモリアドレスに変換 | 偶発的または有害なデータ破損を防止 |
| アイソレーション | 各デバイスを割り当てられたメモリゾーンに制限します | 障害のあるデバイスや悪意のあるデバイスからシステムを保護 |
| 64ビットのサポート | アドレッシングを 32 ビット制限を超えて拡張 | 大容量メモリを必要とする最新のデバイスをサポート |
セキュリティ上の懸念: DMA 攻撃と保護
セキュリティリスク
• 不正な DMA アクセスによるデータの盗難。
• システムメモリへのマルウェアの注入。
• ラップトップに対するサンダーボルトの邪悪なメイド攻撃。
2 保護
•IOMMU / VT-d / AMD-Viを有効にします。
• カーネル DMA 保護 (Windows) を使用します。
• 未使用の外部ポートを無効にします。
• セキュアコアPCとBIOS/UEFI制限を使用します。
DMA のさまざまな用途
ディスクとストレージの転送
DMAを使用すると、ハードドライブ、SSD、および光学ドライブは、CPUに負担をかけることなく、大きなデータブロックをメモリに直接移動できます。
ネットワークインタフェース
ネットワーク カードは DMA を使用して送受信パケットを迅速に転送し、プロセッサの速度を低下させることなく高速通信を可能にします。
オーディオおよびビデオ処理
サウンド カード、グラフィックス プロセッサ、およびビデオ キャプチャ デバイスは、DMA に依存して、最小限の遅延で連続データ ストリームを処理します。
組み込みシステム
マイクロコントローラはDMAを使用して反復的なデータ移動(ADC読み取り値やUARTバッファなど)をオフロードし、制御タスクにCPUサイクルを解放します。
グラフィックスレンダリング
GPU は、テクスチャの読み込みとフレーム バッファの更新に DMA を適用し、ゲームやビジュアル アプリケーションでのスムーズなレンダリングをサポートします。
まとめ
ダイレクト メモリ アクセス (DMA) は、CPU に依存せずにメモリとデバイス間でデータを直接移動することで、コンピューターの効率を向上させます。これにより、遅延が軽減され、電力使用量が削減され、ストレージ、ネットワーク、グラフィックスなどのタスクでのよりスムーズな操作が可能になります。エラー処理とセキュリティ機能が組み込まれているため、DMA は高速かつ効率的なデータ転送のための信頼できる方法であり続けます。
よくある質問 [FAQ]
DMAはプログラムI/Oとどう違うのですか?
DMA はコントローラーを使用してデータを転送しますが、プログラムされた I/O はすべての転送で CPU に依存します。
DMAはどのようにして電力を節約しますか?
これにより、CPU が絶え間ない転送から解放され、より頻繁に低電力状態に入ることができます。
DMAはどのメモリにアクセスできますか?
DMA は、システム RAM、ビデオ メモリ、バッファ メモリにアクセスし、場合によってはメモリ領域間でデータをコピーできます。
DMAは一度に複数のデバイスを処理できますか?
はい、DMA コントローラーは優先度とアービトレーションを使用して、どのデバイスを最初に転送するかを決定します。
DMAの主な制限は何ですか?
小規模な転送には非効率的であり、適切な同期がないとキャッシュの不整合が発生する可能性があります。
実際のシステムでDMAが重要なのはなぜですか?
高速で低遅延のデータ転送を提供するため、CPU はタイム クリティカルなタスクに集中できます。