GNU/Linux >> Linux の 問題 >  >> Linux

DMA とメモリ マップド IO の違いは何ですか?

メモリ マップド IO とは、デバイス レジスタがマシンのメモリ空間にマップされることを意味します。これらのメモリ領域が CPU によって読み書きされると、実際のメモリではなく、デバイスから読み書きされます。デバイスから実際のメモリ バッファにデータを転送するには、CPU はメモリ マップされたデバイス レジスタからデータを読み取り、それをバッファに書き込む必要があります (デバイスにデータを転送する場合は逆になります)。

DMA 転送を使用すると、デバイスは実メモリ バッファ自体との間でデータを直接転送できます。 CPU はデバイスにバッファの場所を伝え、デバイスがメモリに直接アクセスしている間に他の作業を実行できます。


他の人がすでに質問に答えているので、歴史を少しだけ追加します。

昔、x86 (PC) ハードウェアでは、I/O スペースとメモリ スペースしかありませんでした。これらは 2 つの異なるアドレス空間であり、異なるバス プロトコルと異なる CPU 命令でアクセスされましたが、同じプラグイン カード スロットで通信できました。

ほとんどのデバイスは、制御インターフェイスとバルク データ転送インターフェイスの両方に I/O 空間を使用していました。データにアクセスする簡単な方法は、多くの CPU 命令を実行して、一度に 1 ワードずつデータを I/O アドレスからメモリ アドレスに転送することでした (「ビットバンギング」とも呼ばれます)。

デバイスからホスト メモリに自律的にデータを移動するために、デバイスが転送を開始するためのサポートが ISA バス プロトコルにありませんでした。妥協案が発明されました:DMA コントローラです。これは、CPU によって起動され、転送を開始してデバイスの I/O アドレスからメモリに、またはその逆にデータを移動するハードウェアの一部でした。 I/O アドレスが同じであるため、DMA コントローラは CPU とまったく同じ操作を実行しますが、効率が少し向上し、バックグラウンドで実行し続ける自由が得られます (ただし、実行できない限り長くはない可能性があります)。記憶に話しかける)。

PCI の時代に早送りすると、バス プロトコルはよりスマートになりました。どのデバイスでも転送を開始できます。そのため、たとえば、RAID コントローラ カードは、好きなときにいつでも好きなデータをホストに移動したり、ホストから移動したりできます。これは「バス マスター」モードと呼ばれますが、古い DMA コントローラがなくなって久しいにもかかわらず、特別な理由もなく人々はこのモードを「DMA」と呼び続けています。古い DMA 転送とは異なり、対応する I/O アドレスがまったく存在しないことが多く、バス マスター モードがデバイス上に存在する唯一のインターフェイスであることが多く、CPU の「ビットバンギング」モードはまったくありません。


メモリ マップド I/O により、CPU は特定のメモリ アドレスを読み書きすることでハードウェアを制御できます。通常、これは制御ビットの変更などの低帯域幅操作に使用されます。

DMA により、ハードウェアはなしでメモリを直接読み書きできます CPUが絡む。通常、これはディスク I/O やカメラ ビデオ入力などの高帯域幅操作に使用されます。

これは、MMIO と DMA を徹底的に比較した論文です。

高性能 RDMA システムの設計ガイドライン


ダイレクト メモリ アクセス (DMA) は、CPU の介入なしに I/O からメモリへ、およびメモリから I/O へデータを転送する技術です。この目的のために、DMA コントローラと呼ばれる特別なチップを使用して、すべてのアクティビティとデータの同期を制御します。その結果、他のデータ転送技術と比較して、DMA ははるかに高速です。

一方、仮想メモリはメイン メモリとセカンダリ メモリの間のキャッシュとして機能します。データは事前​​に二次記憶装置 (ハードディスク) から主記憶装置に取り込まれ、必要なときに主記憶装置でデータを使用できるようになります。サポートするのに十分な物理メモリよりも多くのアプリケーションをシステムで実行できます。


Linux
  1. InnoDBとMyISAMの違いは何ですか?

  2. [[$ a ==Z*]]と[$a==Z *]の違いは?

  3. Cのstrtok_rとstrtok_sの違いは何ですか?

  1. Linuxのバッファメモリとキャッシュメモリの違いは何ですか?

  2. adduser と useradd の違いは何ですか?

  3. ルートとIPルートの違いは何ですか?

  1. ファイルへの書き込みとマップされたメモリへの書き込みの違いは何ですか?

  2. DMA-Engine と DMA-Controller の違いは何ですか?

  3. fsck と e2fsck の違いは何ですか?