ダイレクトメモリアクセス(DMA)とは何ですか?どのように機能しますか? [MiniTool Wiki]
What Is Direct Memory Access
クイックナビゲーション:
あなたは採用することができます RDMA ネットワーク内のコンピューターが、いずれかのコンピューターのプロセッサー、キャッシュ、またはオペレーティングシステムを使用せずに、メインメモリ内のデータを交換できるようにするテクノロジ。ただし、DMA機能を使用して、接続されたデバイスからコンピュータのマザーボード上のメモリにデータを直接送信することもできます。からのこの投稿 MiniTool 主にDMAについて話しています。
ダイレクトメモリアクセスの定義
まず、ダイレクトメモリアクセスとは何ですか?ダイレクトメモリアクセスは、コンピュータシステムの機能であるDMAと省略できます。これにより、入出力(I / O)デバイスがメインシステムメモリにアクセスできるようになります( ランダム・アクセス・メモリ )、メモリ操作を高速化する中央処理装置(CPU)から独立しています。
ヒント: あなたはこの投稿に興味があるかもしれません- Windows 10でCPUを100%修正するための8つの便利なソリューション 。
ダイレクトメモリアクセスがない場合、CPUがプログラムされた入力/出力を使用すると、通常、読み取りまたは書き込み操作全体で完全に占有されるため、他のタスクを実行できません。 DMAの場合、CPUは最初に転送を開始し、転送の進行中に他の操作を実行し、操作が完了すると最後にDMAコントローラー(DMAC)から割り込みを受け取ります。
ダイレクトメモリアクセスは、CPUがデータ転送速度に追いつかない場合、またはCPUが比較的遅いI / Oデータ転送を待機している間に作業を実行する必要がある場合に役立ちます。
ディスクドライブコントローラ、グラフィックカード、ネットワークカード、サウンドカードなど、複数のハードウェアシステムがダイレクトメモリアクセスを採用しています。 DMAは、マルチコアプロセッサでのオンチップデータ転送にも使用されます。ダイレクトメモリアクセスチャネルのないコンピュータと比較して、DMAチャネルのあるコンピュータは、CPUオーバーヘッドがはるかに少ないデバイス間でデータを転送できます。
ダイレクトメモリアクセスは、メモリ内のデータをコピーまたは移動するための「メモリからメモリへ」にも使用できます。高価なメモリ操作(大きなコピーやスキャッターギャザー操作など)をCPUから専用のDMAエンジンに転送できます。 DMAは、ネットワークオンチップおよびメモリコンピューティングアーキテクチャで重要です。
ダイレクトメモリアクセスはどのように機能しますか?
では、ダイレクトメモリアクセスはどのように機能しますか?標準のダイレクトメモリアクセス(サードパーティDMAとも呼ばれます)は、DMAコントローラーを採用しています。 DMAコントローラは、メモリアドレスを生成し、メモリの読み取りまたは書き込みサイクルを開始できます。 CPUが読み書きできる複数のハードウェアレジスタをカバーしています。
これらのレジスタは、メモリアドレスレジスタ、バイトカウントレジスタ、および1つ以上の制御レジスタで構成されます。ダイレクトメモリアクセスコントローラによって提供される機能に応じて、これらの制御レジスタは、送信元、宛先、転送方向(I / Oデバイスからの読み取りまたはI / Oデバイスへの書き込み)、転送ユニットのサイズ、および/または数の組み合わせを指定できます。 1つのバーストで転送するバイト。
入力、出力、またはメモリからメモリへの操作を実行するために、ホストプロセッサは、転送するワード数と使用するメモリアドレスを使用してDMAコントローラを初期化します。次に、CPUは周辺機器にデータ転送を開始するように命令します。
次に、ダイレクトメモリアクセスコントローラは、アドレスと読み取り/書き込み制御ラインをシステムメモリに提供します。周辺機器とメモリ間で1バイトのデータを転送する準備ができるたびに、DMAコントローラは完全なデータブロックが転送されるまで内部アドレスレジスタをインクリメントします。
動作モード
ダイレクトメモリアクセスは、動作モードによって動作が異なります。
バーストモード
バーストモードでは、データブロック全体が連続シーケンスで送信されます。 CPUがDMAコントローラーにシステムバスへのアクセスを許可すると、DMAコントローラーはデータブロック内のすべてのバイトのデータを転送してから、システムバスの制御をCPUに戻しますが、CPUは次の期間非アクティブになります。かなり長い時間。このモードは「ブロック転送モード」とも呼ばれます。
サイクルスチールモード
サイクルスチールモードは、バースト転送モードに必要な時間、CPUを無効にできないシステムで使用されます。サイクルスチールモードでは、DMAコントローラはバーストモードと同じBR(バス要求)およびBG(バス許可)信号を使用してシステムバスへのアクセスを取得します。これらの2つの信号は、CPUとDMAコントローラー間のインターフェイスを制御します。
サイクルスチールモードでは、データブロックの伝送速度はバーストモードほど速くありませんが、CPUアイドル時間はバーストモードほど長くありません。
透過モード
透過モードは、データブロックの転送に最も時間がかかりますが、システム全体のパフォーマンスの観点からも最も効率的なモードです。透過モードでは、ダイレクトメモリアクセスコントローラは、CPUがシステムバスを使用しない操作を実行する場合にのみデータを転送します。
透過モードの主な利点は、CPUがプログラムの実行を停止しないことであり、ダイレクトメモリアクセス転送は時間の点で無料ですが、欠点は、CPUがシステムバスを使用していないことをハードウェアが判断する必要があることです。複雑になります。これは「隠しDMAデータ転送モード」とも呼ばれます。