web-dev-qa-db-ja.com

PCI Express-BAR、メモリアドレス指定、および物理メモリに関する説明

私はPCIExpressプロトコルを理解し始めたまったくの初心者であり、そのメカニズムについていくつかの説明が必要です。

PCI ExpressエンドポイントデバイスのメモリBARがシステムメモリにマップされている可能性があることを理解しました(常にRAMシステムメモリについて話しているのですか?)。 CPUからデバイス(A)に、特定のメモリアドレス(最初のメモリBAR、オフセット0)をアドレス指定するメモリ読み取り要求を送信します。

私のデバイスにデバイス内メモリがないと仮定しましょう。

宛先のメモリアドレスが(A)に割り当てられているため、CPUに代わってルートコンプレックスがTLPを作成し、それをデバイス(A)に転送します。

AはTLPを受信して​​解凍し、内部アプリケーションロジックからのデータを含む完了TLPを作成します。

これで、TLPはルートコンプレックスに逆方向に移動し、ルートコンプレックスが解凍し、興味深いデータを収集してCPUに返します。

この通信中のシステムメモリの役割は何ですか?無し?

ルートコンプレックスは、エンドポイントとの間でパケットを送受信する以外に、システムの物理メモリと通信しますか(この場合)?

一部の人にとってはばかげた質問に思えるかもしれませんが、私にとってこれは、物理メモリと各PCIExpressデバイスに割り当てられたメモリアドレスBARの間の接続を理解するために重要です。

5
Jacopo Reggiani

CPUがメモリアドレスと通信するとき、応答する必要があるのはRAMではありません。 I/Oデバイスにすることができます。実際には、RAMは、データを保存して返すことだけを目的とした「特殊なメモリマップドI/Oデバイス」と考えることができますが、キャッシュなどを備えた今日の最新のCPUでは、物理的に単純ではありません。 。

私はPCIeの低レベルの詳細にはあまり熱心ではありませんが、PCIeバス自体がCPUとどのように通信するのか疑問に思っているようです。これは、CPUと通信する他のものと同じように機能します。

  • メモリマッピング-つまり、デバイスは「マッピング」され、アドレスの範囲への読み取りと書き込みはRAMではなく、デバイスまたはコントローラーに送られます。
  • DMA-外部デバイスまたはコントローラーは、CPUをまったく関与させずに、RAMのセクションを読み取り/書き込みします。
  • I/Oポート-これは、これまでI/Oデバイス専用であったもう1つのアドレス空間(Intel x86ファミリのCPUの機能)です。ここにRAMはありませんが、メモリマッピングのように機能します。 I/Oポートとメモリマッピングの主な違いは、I/Oポート命令は常にシリアルに機能することです。CPUがメインへのアクセスでそれを行おうとするのとは対照的に、ここでは操作の「順不同」または「並べ替え」は発生しません。メモリ。
  • IRQ-外部デバイスがCPUに割り込みを送信します

BARなどはメモリに「マッピング」され、その「下」にある可能性のあるRAMの代わりになります。 MMUを使用すると、その下のRAMを別の物理アドレスに「再マップ」することが可能だと思います。

1
LawrenceC