CPU が位置 x+50 の値を変更し、それをメイン メモリにフラッシュ バック (ライトバック) しないとします。
一方、デバイスは x から x+100 への DMA 読み取り要求を開始します。
その場合、CPU はダーティ キャッシュ ラインをフラッシュバックするようにどのように通知されますか?
CPU が位置 x+50 の値を変更し、それをメイン メモリにフラッシュ バック (ライトバック) しないとします。
一方、デバイスは x から x+100 への DMA 読み取り要求を開始します。
その場合、CPU はダーティ キャッシュ ラインをフラッシュバックするようにどのように通知されますか?
DMA 回路は、多くの場合、CPU を介さずにメイン メモリと直接連携します (これが主なアイデアであり、ハードウェアの他の場所で実行できる I/O を CPU から解放し、CPU サイクルを節約します)。そのため、実際にキャッシュの一貫性の問題が発生する可能性があります。Microsoft は、DMA を使用する場合は I/O バッファーをフラッシュすることをお勧めします。
ただし、一部のシステムでは、マルチプロセッサ システムの CPU 間と同様に、CPU と DMA 回路間のキャッシュ コヒーレンシ プロトコルをサポートしています。最終的な答えは、実際のハードウェアによって異なります。
私が考えることができる3つのアプローチがあります:
ハードウェアと OS の機能に依存します。
プロセスが実行されていないことを確認することは、マルチタスク OS ではそれほど奇妙ではありません。プロセスが所有するメモリの DMA は、書き込みなどのシステム コールを実行するプロセスによってトリガーされる可能性が高いからです。DMA が完了するまで、プロセスをスケジュール解除し、他のプロセスを実行できます。
I/O デバイスが完了するのを待つのは制約が多すぎるため、DMA コントローラーがプロセスのアドレス空間からセカンダリ バッファーにコピーしている可能性があります。
したがって、これが発生した場合は、その例と実行したテストの概要を教えてください。