私はPCIExpressプロトコルを理解し始めたまったくの初心者であり、そのメカニズムについていくつかの説明が必要です。
PCI ExpressエンドポイントデバイスのメモリBARがシステムメモリにマップされている可能性があることを理解しました(常にRAMシステムメモリについて話しているのですか?)。 CPUからデバイス(A)に、特定のメモリアドレス(最初のメモリBAR、オフセット0)をアドレス指定するメモリ読み取り要求を送信します。
私のデバイスにデバイス内メモリがないと仮定しましょう。
宛先のメモリアドレスが(A)に割り当てられているため、CPUに代わってルートコンプレックスがTLPを作成し、それをデバイス(A)に転送します。
AはTLPを受信して解凍し、内部アプリケーションロジックからのデータを含む完了TLPを作成します。
これで、TLPはルートコンプレックスに逆方向に移動し、ルートコンプレックスが解凍し、興味深いデータを収集してCPUに返します。
この通信中のシステムメモリの役割は何ですか?無し?
ルートコンプレックスは、エンドポイントとの間でパケットを送受信する以外に、システムの物理メモリと通信しますか(この場合)?
一部の人にとってはばかげた質問に思えるかもしれませんが、私にとってこれは、物理メモリと各PCIExpressデバイスに割り当てられたメモリアドレスBARの間の接続を理解するために重要です。
CPUがメモリアドレスと通信するとき、応答する必要があるのはRAMではありません。 I/Oデバイスにすることができます。実際には、RAMは、データを保存して返すことだけを目的とした「特殊なメモリマップドI/Oデバイス」と考えることができますが、キャッシュなどを備えた今日の最新のCPUでは、物理的に単純ではありません。 。
私はPCIeの低レベルの詳細にはあまり熱心ではありませんが、PCIeバス自体がCPUとどのように通信するのか疑問に思っているようです。これは、CPUと通信する他のものと同じように機能します。
BARなどはメモリに「マッピング」され、その「下」にある可能性のあるRAMの代わりになります。 MMUを使用すると、その下のRAMを別の物理アドレスに「再マップ」することが可能だと思います。