ダイレクトメモリアクセス (ダイレクトメモリアクセス) とは | 意味や読み方など丁寧でわかりやすい用語解説
ダイレクトメモリアクセス (ダイレクトメモリアクセス) の読み方
日本語表記
ダイレクトメモリアクセス (ダイレクトメモリアクセス)
英語表記
Direct Memory Access (ダイレクト メモリー アクセス)
ダイレクトメモリアクセス (ダイレクトメモリアクセス) の意味や用語解説
ダイレクトメモリアクセス(Direct Memory Access、DMA)とは、コンピューターシステムにおいて、CPUを介さずに周辺機器が直接メインメモリとの間でデータ転送を行う技術のことである。この仕組みの主な目的は、データ転送におけるCPUの介在を最小限に抑え、CPUの負荷を軽減し、システム全体のパフォーマンスを向上させることにある。これにより、CPUはより重要な演算処理に専念できるようになり、特に大量のデータを高速にやり取りするI/O(入力/出力)処理においてその真価を発揮する。 コンピューターシステムがまだ単純であった頃、周辺機器とメインメモリの間でデータを転送する際には、常にCPUがその仲介役を務めていた。例えば、ハードディスクからデータを読み込む場合、CPUはハードディスクコントローラからデータを1バイトずつ、あるいは数バイトずつ読み込み、それをメインメモリの指定されたアドレスに書き込む、という一連の処理を繰り返す必要があった。プリンターへの出力も同様に、CPUがメインメモリからデータを読み出し、プリンターコントローラへ送る作業を行っていた。この方法は、CPUがデータ転送の度に割り込みを受けたり、ポーリング(状態を繰り返し確認する処理)を行ったりするため、そのオーバーヘッドが非常に大きく、CPUの処理能力の大部分がデータ転送に費やされてしまうという問題があった。特に、ネットワークカードや高速なストレージデバイスなど、扱うデータ量が増え、転送速度が高速化するにつれて、このCPUによる仲介はシステム全体のボトルネックとなり、パフォーマンス低下の主要因となっていった。 このような状況を解決するために考案されたのがDMAである。DMAを実現するためには、通常、DMAコントローラと呼ばれる専用のハードウェアがシステムに搭載される。このDMAコントローラが、CPUの代わりにデータ転送の管理と実行を担う。具体的には、周辺機器がメモリとの間でデータ転送を行いたい場合、まずその周辺機器(またはそのコントローラ)がDMAコントローラに対し、転送するデータの開始アドレス、転送先のメモリのアドレス、そして転送するデータ量などの情報を設定し、転送開始を要求する。 要求を受け取ったDMAコントローラは、システムバス(CPUやメモリ、周辺機器が相互に通信するための経路)の利用権、すなわちバスマスタリング権をCPUから取得する。バスの利用権を獲得したDMAコントローラは、CPUの介入なしに、指定されたアドレス間で直接データ転送を開始する。この間、CPUはバスから切り離されるため、メモリへのアクセスが一時的にブロックされることがあるが、多くのシステムではDMAコントローラとCPUがバスを共有する工夫がされており、CPUは他のキャッシュからの命令実行など、メモリ以外の処理を並行して行うことが可能である。DMAコントローラは、転送が完了すると、CPUに対して割り込み信号を発生させ、転送が終了したことを通知する。この割り込みを受け取ったCPUは、データがメインメモリに正しく転送されたことを認識し、次の処理へと進むことができる。 DMAの最大のメリットは、前述の通りCPUの負荷を大幅に軽減できる点にある。CPUがデータ転送の細かい処理から解放されることで、より複雑な計算やアプリケーションの実行など、本来の役割に集中できるようになる。これにより、システム全体の処理能力が向上し、マルチタスク環境下での応答性も改善される。また、データ転送自体もCPUのソフトウェア的な制御によるオーバーヘッドがないため、より高速かつ効率的に実行される。 DMAは、現代のコンピューターシステムにおける多くの周辺機器で利用されている。例えば、グラフィックカードが大量のテクスチャデータやフレームバッファのデータをメインメモリとやり取りする際、SSDやHDDなどのストレージデバイスがファイルデータを読み書きする際、ネットワークカードがパケットデータを送受信する際などに広く活用されている。これらのデバイスは高速なデータ転送能力が求められるため、DMAはシステム性能を最大限に引き出す上で不可欠な技術となっている。 DMAにはいくつかの種類があるが、一般的なものはバスマスタリングDMAと呼ばれる。これは、デバイス自身がバスマスタとなり、DMAコントローラを介して直接メモリにアクセスする方式である。また、メモリ上に連続しない複数の領域からデータを集めたり、複数の領域にデータを分散して書き込んだりするScatter-Gather DMAといった高度な機能を持つものも存在する。これは、メモリが断片化している場合でも効率的なデータ転送を可能にする。 しかし、DMAの利用には注意点も存在する。特に「キャッシュコヒーレンシ(Cache Coherency)」の問題である。CPUはメインメモリから読み出したデータを高速なキャッシュメモリに一時的に保存することがある。DMAがCPUの知らないうちにメインメモリの内容を直接変更した場合、CPUのキャッシュには古いデータが残ったままとなり、データの一貫性が損なわれる可能性がある。この問題を回避するために、OSやデバイスドライバは、DMA転送を行う前後にCPUのキャッシュをフラッシュ(キャッシュの内容をメインメモリに書き戻す)したり、無効化(キャッシュの内容を破棄してメインメモリから再読み込みさせる)したりするなどの処理を行う必要がある。これにより、CPUが常に最新のデータにアクセスできるよう保証される。 このように、ダイレクトメモリアクセスは、コンピューターシステムにおけるデータ転送の効率と性能を飛躍的に向上させるための重要な基盤技術であり、現代の高性能なコンピューターやサーバー、組み込みシステムにおいて不可欠な存在となっている。