関連する 2 つの異なる「転送レート」があります。適切に設計されたシステムでは、DMA コントローラは通常の動作速度でアドレスおよびデータ バスとインターフェイスできる必要があります。一方、操作間にかかる時間は、CPU 命令サイクルよりもはるかに遅い場合があります。つまり、CPU と同じペースでソース アドレスから宛先アドレスにデータを転送するわけではありません。システムに接続されたほとんどすべてのハードウェア デバイスは、はるかに遅いペースで動作するため、これはまったく問題ありません。
DMA の一般的な目的は、メモリから I/O ポートにバイトを移動するというありふれたタスクから CPU をオフロードすることです。送信中の通常の I/O シーケンスを考えてみましょう
。
- スタック操作やレジスタの保存などの割り込み処理を実行します。
- メモリからポインターとカウンターを取得します。
- データ バイトをロードし、データ バイトを保存します。
- 両方のポインターをインクリメントして保存します
。 - カウンターをデクリメントして保存します。ゼロの場合、送信の終了にフラグを立てます。
- 割り込みからの復帰処理
システムに DMA を使用すると、CPU は DMA コントローラーのプログラミングに少し多くの時間を費やしますが、送信が終了するまですべての割り込みを回避します。もちろん、DMA がメモリにアクセスするとき、CPU はアクセスできません。ただし、通常、CPUはすべての命令でメモリにアクセスしているわけではありません(加算、減算など、すべてメモリアクセスなしでCPU内で行われます)。したがって、平均して、各バイト転送のコストは、完全な割り込み処理操作ではなく、1 メモリ サイクル未満である必要があります (干渉しないものを考慮に入れます)。