DMAとキャッシュを知っているほとんどの人にとっておそらくばかげた質問です...キャッシュはメモリをアクセスできる場所に近い場所に格納するので、I/Oにそれほど多くの時間を費やす必要はありません。
しかし、DMAはどうですか?それはあなたがより少ない遅延でそのメインメモリにアクセスすることを可能にしますか?
誰かが違い、両方、またはなぜ私が混乱しているのかを説明できますか?
DMAは、CPU命令を使用せずにメモリとの間で移動できるハードウェアデバイスです。
たとえば、ハードウェアデバイス(たとえば、PCIサウンドデバイス)は、オーディオの再生を望んでいます。次のいずれかを実行できます。
mov
CPU命令を介して一度に単語を書きます。DMAは非常に複雑になる可能性があり(スキャッターギャザーなど)、バスの種類やシステムによって異なります。
私は最初の答えに完全に同意します、そしていくつかの一般的な追加があります...
ほとんどのDMAハードウェアでは、メモリからメモリへの転送を行うように設定することもできます。必ずしも外部デバイスが関係しているとは限りません。また、システムによっては、DMAがメモリとの間で転送するデータがCPUキャッシュの知識なしに実行される場合があるため、ソフトウェアでCPUキャッシュを同期する必要がある場合とない場合があります。
DMAを実行する利点は、CPUが他のことを同時に実行できることです。もちろん、CPUもメモリにアクセスする必要がある場合、一方だけがアクセスを取得でき、もう一方は待機する必要があります。
Mem to mem DMAは、パフォーマンスを向上させるために組み込みシステムでよく使用されます。または、メモリの一部にアクセスできるようにするために不可欠な場合があります。
質問に答えるために、DMAとCPUキャッシュはまったく異なるものであり、比較することはできません。
私は少し遅いことを知っていますが、この質問に答えることは私のような誰かを助けるでしょう、上記の答えに同意して、質問はキャッシュに関連していたと思います。
したがって、はい、キャッシュはメモリに近い場所に情報を格納します。これは、以前の計算の結果である可能性があります。さらに、データがキャッシュ内で見つかると(キャッシュヒットと呼ばれます)、値が直接使用されます。見つからない場合(キャッシュミスと呼ばれます)、プロセッサは必要な値の計算を続行します。周辺機器(SDカード、USBなど)もこのデータにアクセスできます。そのため、通常、起動時にキャッシュデータを無効にして、キャッシュラインをクリーンにします。また、起動時にキャッシュデータをフラッシュして、すべてのキャッシュデータがCPUが使用できるようにメインメモリに書き戻され、その後、キャッシュのリセットまたは初期化に進みます。
DMA(ダイレクトメモリアクセス)、はい、メインメモリにアクセスできます。しかし、より良い定義は、プロセッサだけがアクセスできるシステムレジスタにアクセスできるようにすることだと思います。@Ronnieと@YannRaminはどちらも、DMAがデバイスハードウェアになり得るという点で正しかったので、シリアルペリフェラルがシステムレジスタにアクセスするために使用できますが、2つのコア間のメモリからメモリへの転送にも使用できます。
DMAがシステムメモリにアクセスできるモードについては、ウィキペディアからDMAについてさらに詳しく読むことができます。簡単に説明します
バーストモード:DMAがバスを完全に制御し、この間CPUはアイドル状態です。データは中断することなく(全体として)バーストで転送されます。
サイクルスチールモード:このデータは一度に1バイト転送され、転送は低速ですが、CPUはアイドル状態ではありません。