PCI Express - Speicheradressierung vs. physikalischer Speicher in Lese- / Schreibvorgängen

3013
Jacopo Reggiani

Ich versuche, die Verbindung zwischen Speicherbars (Base Address Registers) und physischem Speicher in einer PCI Express-Transaktion zu finden. In meiner letzten Frage begann ich zu verstehen, was passiert, wenn eine CPU an einer bestimmten Speicheradresse liest / schreibt. Jetzt muss ich tief in die PCI Express-Transaktion einsteigen.

Ich muss verstehen, ob bei jeder PCI Express-Lese- / Schreibtransaktion ein physischer RAM vorhanden ist.

1) Befindet sich der von einer Gerätespeicherleiste adressierte physische Speicher im Gerät selbst? Oder liegt es im RAM?

2) Wenn ich eine Memory Read / Write-Transaktion mit einem PCI Express-Gerät ohne internen physischen Arbeitsspeicher beginne und eine Speicheradresse eingebe. Wie kann das Gerät darauf zugreifen, wenn es nicht einem internen physischen Arbeitsspeicher zugeordnet ist? Wenn mein Gerät ein Transaktionspaket mit Daten zurücksendet, gibt der Root-Komplex die Daten sowohl an die CPU als auch in das physische RAM ein?

2

1 Antwort auf die Frage

5
psusi

Hauptsystem-RAM hat nichts mit einer BAR zu tun. Die BAR konfiguriert das Gerät einfach so, dass der Zugriff auf diese Adressen dekodiert wird. Normalerweise enthält das Gerät eine Reihe von Konfigurationsregistern. Die BAR ermöglicht der CPU, auf diese Register zuzugreifen, als ob es sich um einen RAM-Block handeln würde, aber dort ist kein RAM. Der PCIe-Root-Komplex ist so konfiguriert, dass er den meisten Speicherzugriff auf den RAM und den Zugriff auf einen Adressenblock, normalerweise im Bereich von 3 bis 4 GB, auf den PCIe-Bus leitet. Die BAR in einem bestimmten Gerät konfiguriert es so, dass es auf einen bestimmten Block dieser Adressen reagiert.

Auf der anderen Seite haben einige Geräte, vor allem Videokarten, tatsächlich einen eigenen RAM an Bord, auf den über die BAR zugegriffen wird.

Danke für Ihre Antwort, aber mir bleibt etwas unklar. Wenn ich eine Memory Write-Transaktion für ein PCIe-Gerät starte, schreibe ich wirklich in ein Register im Gerät? Oder schreibt jemand im PC-RAM? Jacopo Reggiani vor 10 Jahren 0
@JacopoReggiani, Sie schreiben auf das Gerät. Ob es sich dabei um ein Register oder einen tatsächlichen RAM an Bord des Geräts handelt, ist Sache des Geräts. Wie mein erster Satz gesagt hat, hat es nichts mit dem Hauptsystem-RAM zu tun. psusi vor 10 Jahren 1
Die meisten Systeme verwenden eine subtraktive Logik, um zu dekodieren, wo eine Speicheroperation geleitet wird. Hauptsystemspeicher (DRAM) wird einem bestimmten Satz von Bereichen im Speichercontroller zugeordnet. Wenn eine Adresse außerhalb dieses Bereichs liegt, wird sie basierend auf ihren BARs zu den E / A-Bussen geleitet. Wenn ein E / A in x86 noch nicht beansprucht ist, wird er normalerweise an die DMI / Legacy-unterstützende Schnittstelle weitergeleitet. Daher sollten PCIe-I / Os von den DRAM-Controllern freigegeben werden und an den entsprechenden PCIe-Bus weitergeleitet werden, dessen BAR sich mit dem MMIO überlappt. Jon Brauer vor 10 Jahren 1