私の友人は、x86アーキテクチャではDMAコントローラが2つの異なるRAMロケーション間で転送できないと言っています。RAMと周辺機器(PCIバスなど)の間でのみ転送できます。
これは本当ですか?
AFAIK DMAコントローラは、BUS上にあり、アドレスを持つ任意のデバイス間で使用できる必要があるためです。特に、送信元アドレスと宛先アドレスの両方が同じ物理デバイスに属していても問題はありません。
ISA(覚えていますか?;-)DMAチップには確かにFetch-and-Deposit転送タイプがあります。
ただし、MASM32フォーラムから:
やあ、
「文書化されていないPC」をチェックインすると、メモリ間DMAが可能であると彼は言います。次に彼は、問題や制限がある可能性があり、CPUはとにかくDMAハードウェア(386+のMOVSD)よりも高速にコピーを実行できると述べています。
ですから、それはあなたができることのように思えますが、誰が気にするのか、ある種のことです。
よろしく、
スティーブN。
はい、メモリからメモリへの転送は、私が「最新の」x86で試した80386ファミリまで可能です:)
ソースと宛先にRAMを指定します。プログラミングしているデバイスや、キャッシュを有効にしているかどうかによっては、L1キャッシュの一貫性に注意する必要がある場合があります。
Linuxカーネルには、シャドウメモリのビデオRAMページを更新するためのコードが含まれている場合があります。これはベルを鳴らします。
2つのRAMアドレス間で転送できないDMAエンジンは間違いなく存在するため、質問の2番目の部分はすでに誤った前提に基づいています。