PCI および PCIe デバイスは、デバイスの構成空間の特定の領域に書き込むことで、特定の物理メモリ アドレスに応答するように (BIOS または OS のコードを介して) CPU によって構成できることを理解しています。
実際、Linux カーネルには、デバイスの多くの要件 (メモリ アライメント、DMA 機能など) を考慮して、これを行うための非常に複雑なアルゴリズムがあります。
このメモリがいつ、どこにマッピングされるかをソフトウェアが制御しているように見えるのを見て、私の質問は次のとおりです。ソフトウェアの一部は、物理メモリのマッピングをどのように制御できますか?
この構成の後、PCI デバイスは指定されたアドレス範囲に応答することを認識しますが、CPU は、動的に決定された特定のアドレスに対して PCI バスを使用する必要があることをどのように認識しますか?