DMA(DMA: ディーエムエー)
英語表記: DMA (Direct Memory Access)
概要
DMA(Direct Memory Access)は、CPUを介さずに、入出力装置(I/Oデバイス)と主記憶装置(メモリ)の間で直接データ転送を可能にする技術です。この仕組みにより、大量のデータ転送時におけるCPUの関与を最小限に抑えることができ、CPUは本来の計算処理や命令の解釈といった重要なタスクに集中できるようになります。結果として、システム全体の処理速度と効率が劇的に向上する、入出力(I/O)制御における非常に重要な要素です。
詳細解説
DMAの目的と制御装置における役割
私たちが今学んでいる「コンピュータの構成要素」の中で、「制御装置」は、命令を解釈し、各構成要素に適切な制御信号を送るという中枢の役割を担っています。特に「入出力(I/O)制御」は、外部デバイスとのやり取りを効率的に管理する責任があります。
DMAが登場する以前、I/Oデバイスとメモリ間でデータを転送する際には、CPUが逐一介入する必要がありました。例えば、ディスクからデータを読み込む際、CPUはデータを1バイト(あるいはワード)ずつI/Oポート経由で受け取り、それをメモリに書き込むという作業を繰り返していました。この方式(プログラム制御I/Oや割り込みI/O)では、データ転送の頻度が増えるほど、CPUの処理時間の大半がデータ移動に費やされてしまい、CPUが本来の仕事である「命令の解釈と実行」を十分に行えなくなるという大きな問題がありました。
DMAの目的は、このCPUの負担を解消し、制御装置がより高度な命令処理に専念できるようにすることにあります。DMAは、データ転送という単純なルーティンワークを専門のハードウェアに肩代わりさせることで、I/O制御のボトルネックを解消します。
動作の仕組みと主要コンポーネント
DMAを実現するために不可欠なのが「DMAコントローラ(DMAC)」と呼ばれる専用のハードウェアチップです。DMACは、I/O制御の効率化を担う、まさに入出力サブシステムの中核的な構成要素と言えます。
DMAによるデータ転送のプロセスは、主に以下の手順で進行します。
- 転送要求: ハードディスクやネットワークカードなどのI/Oデバイスが、メモリへのデータ転送が必要になった際、DMACに対して転送要求を行います。
- バス使用権の要求(バスリクエスト): DMACは、データ転送のためにシステムバス(アドレスバス、データバス、制御バス)を使用する必要があるため、CPUに対してバスの使用権を要求します(通常、特定の制御信号が用いられます)。
- バス使用権の解放: CPUはDMACからの要求を受け取ると、一時的に自身のバス使用権を放棄し、DMACにバス制御を渡します。CPUはこの間、バスを使用しない内部処理(キャッシュ内のデータ処理など)を行うことができます。
- 直接転送: バス使用権を得たDMACは、CPUの関与なしに、I/Oデバイスとメモリ間のデータ転送を直接制御します。DMACは、転送先のメモリのアドレス指定、転送量のカウント、制御信号の発行をすべて担当します。
- 転送完了通知: 指定された量のデータ転送が完了すると、DMACはCPUに対して割り込み信号などを送出し、転送が終了したことを通知します。CPUは通知を受け取った後、再びバスの使用権を取り戻し、通常の処理を再開します。
この一連の流れの中で、CPUが関与するのは「転送の開始許可」と「転送の完了通知の処理」のわずかな部分だけです。これにより、CPUは高速なデータ転送のほとんどの時間を解放され、制御装置としての本来の役割を全うできるわけです。
サイクルスチールについて
DMACがバスを使用している間、CPUはバスを使用できません。DMACは、CPUがバスを使用していないタイミングを狙って転送を行うか、あるいは、CPUの処理を一時的に停止させて(サイクルスチール)、短時間だけバスを占有します。この「サイクルスチール」と呼ばれる動作は、DMACがCPUからバスサイクルを奪うように見えることから名付けられていますが、データ転送を非常に細かく分割して行うため、CPUの処理遅延は最小限に抑えられます。これは、高速なI/Oを実現しつつ、CPUの応答性も維持するための優れた工夫と言えますね。
具体例・活用シーン
DMAは現代のコンピュータにおいて、高速なデータ転送が必要なあらゆる場面で活用されています。
- 高速ストレージの活用: NVMe SSDやSATA HDDなどのストレージデバイスからの大量のファイル読み書きは、DMAによって実現されています。もしCPUがすべてのデータ転送を担っていたら、テラバイト級のデータを扱う現代のコンピュータは成立しません。
- ネットワーク通信: ギガビットイーサネットやWi-Fiアダプタが、受信した大量のパケットデータを即座にメモリに書き込む際にもDMAが必須です。これにより、ネットワーク処理がCPUに過剰な負荷をかけることなく実行されます。
- グラフィックス処理: GPUがテクスチャデータやレンダリング結果をメインメモリに転送する際にもDMAが利用され、高性能なグラフィックス処理を支えています。
アナロジー:交通整理の専門家と自動信号機
DMAの働きを理解するために、交通整理のメタファーを考えてみましょう。
CPUを、街で最も賢く、複雑な判断ができる熟練の交通警察官だと想像してください。この警察官の本来の仕事(制御装置の役割)は、緊急車両の誘導や、事故発生時の複雑なルート変更の指示など、高度な判断を要する任務です。
一方、I/Oデバイス(車線に入ってくる大量の車)がメモリ(目的地)へ移動する際、従来の方式では、熟練警察官(CPU)が、一台一台の車に対して「進め」「止まれ」と手信号で指示を出さなければなりませんでした。これでは、警察官は単純な誘導作業に忙殺され、本来の重要な任務(計算処理)を行う時間がほとんどなくなってしまいます。
ここで登場するのが、DMAコントローラ(DMAC)です。DMACは、交差点に設置された高性能な自動信号機のようなものです。
警察官(CPU)は、大量の車(データ)が流れてくることを確認すると、「よし、ここからの交通整理は自動信号機(DMAC)に任せるぞ」と指示を出します。信号機(DMAC)は、警察官(CPU)からバスの使用権(交差点の使用権)を受け取ると、一時的に交通整理の主導権を握ります。
信号機(DMAC)は、警察官(CPU)の介入なしに、I/Oデバイス(車)を直接メモリ(目的地)へと誘導し、一連の転送が完了すると、「転送完了」の報告を警察官(CPU)に戻します。
これにより、熟練警察官(CPU)は、単純な交通誘導というI/O制御の作業から解放され、より複雑で高度な判断(命令の解釈と実行)に集中できるのです。DMAは、制御装置のパフォーマンスを最適化するための、非常に賢い分業システムと言えるでしょう。
資格試験向けチェックポイント
DMAは、基本情報技術者試験や応用情報技術者試験において、入出力制御の効率化に関するテーマとして頻繁に出題されます。ITパスポート試験でも、システム高速化の仕組みとして概要が問われることがあります。
- DMACの役割: DMAコントローラ(DMAC)が、CPUの代わりにデータ転送の制御を行う専門のハードウェアであることを必ず覚えてください。DMACこそがI/O制御の効率化の鍵です。
- CPUの関与の度合い: DMAによる転送中、CPUはデータ転送そのものには関与しません。CPUはバス使用権をDMACに一時的に譲渡し、その間、別の処理を行うことができます。これが、DMAの最大のメリットである「CPU負荷の軽減」につながります。
- 従来の方式との比較: DMAは、プログラム制御方式や割り込み方式と比較して、特に大量データ転送において高速であることを理解しておきましょう。従来の方式は、データ転送のたびにCPUが介入する必要がありました。
- バス制御権: DMACはデータ転送を行うために、一時的にシステムバスの制御権(バス権)をCPUから奪います(サイクルスチール)。このバス制御権の受け渡しがDMA動作の核です。
- 階層構造との関連: DMAは、制御装置のサブシステムである入出力(I/O)制御において、外部デバイスとの連携を効率化し、システム全体の処理能力(特に命令の解釈と実行速度)を向上させるために採用されている技術である、と文脈で理解することが重要です。
これらのポイントは、DMAが「高速化」と「CPU負荷の軽減」を実現する具体的な仕組みとして、試験で問われやすい部分です。
関連用語
- 情報不足
- 関連用語として、DMAコントローラ(DMAC)、割り込み処理、プログラム制御I/O、システムバス、サイクルスチールなどの用語がDMAの理解を深める上で重要ですが、本記事のインプット情報には含まれていませんでした。これらの用語は、I/O制御の歴史的経緯や仕組みを学ぶ上で不可欠ですので、ぜひ別途学習することをお勧めします。特にDMACはDMAを実現する主要な構成要素です。