Warum haben PCI-Geräte den gleichen Adressraum?

444
Maxpm

Wenn ein Computer gestartet wird, prüft das BIOS oder Betriebssystem jedes PCI-Gerät, um zu fragen, wie viel Adressraum es benötigt. Dann weist es den entsprechenden Speicherplatz zu und teilt jedem PCI-Gerät mit, wo der Speicherplatz beginnt, sodass das PCI-Gerät auf Lese- und Schreibanforderungen innerhalb dieses Bereichs antworten kann.

Meine Frage ist, warum allen Geräten Blöcke aus demselben Adressraum zugewiesen werden müssen. Warum geben Sie nicht jedem Gerät einen eigenen Adressraum?

Auf der Leiterplatte gibt es bereits eine "Out-of-Band"-Methode, um zwischen PCI-Geräten zu unterscheiden: die IDSEL-Leitung. Dies wird bei der PCI-Aufzählung verwendet, bevor jedem Gerät Speicherplatz zugewiesen wurde. Warum also nicht auch für En-Enumerations-Zugriffe verwenden und eine Decodierungslogik auf dem PCI-Gerät speichern? Wäre das irgendwie langsamer gewesen oder so?

0

1 Antwort auf die Frage

1
Austin Hemmelgarn

Als allgemeine Regel gilt, dass sie nicht brauchen den gleichen Adressraum zu teilen. Das Trennen der Adressräume des Geräts ist genau das, wofür eine IOMMU gedacht ist, und kann aus verschiedenen Gründen nützlich sein:

  • Auf diese Weise kann eine virtuelle Maschine mit nativen Treibern direkt auf physische Hardware zugreifen.
  • Es entkoppelt die Adressierungsfunktionen des Geräts vom physischen Adressraum. Mit anderen Worten, Sie können über Geräte verfügen, die nur 32-Bit-Adressierungszugriffsdaten an einem beliebigen Ort im physischen Speicher ausführen können, sogar über den ersten 4G.
  • Sie können Geräte gründlicher voneinander trennen, wodurch die Sicherheit des Systems erheblich verbessert wird.

Ich kann nicht sagen, warum dies nicht das Standardverhalten ist und warum die IDSEL-Leitung nicht dafür verwendet wird, da ich nicht viel über die Geschichte der PCI-Designs weiß. Meine erste Vermutung wäre, dass es ursprünglich so war, dass es einfacher war, Treiber für ISA-Karten auf PCI zu portieren (ISA setzt einen flachen gemeinsam genutzten Adressraum voraus). Außerdem sind IOMMUs nicht gerade die am einfachsten zu entwickelnden Hardwarekomponenten und sind erst seit kurzem auf x86-Plattformen verfügbar (und sind immer noch nicht garantiert, viele Intel-Chips haben sie noch nicht und viele Low-End-AMD-Chips.) auch nicht)

Es kann jedoch erwähnenswert sein, dass es mit PCI Express tatsächlich von Vorteil ist, den Adressraum über mehrere Geräte hinweg zu teilen. Dies bedeutet, dass Sie Geräte-zu-Gerät-Übertragungen durchführen können (obwohl die meisten Plattformen dies nicht richtig unterstützen) In großen Grid-Setups, die RDMA verwenden, ist dies sehr nützlich (Sie können Daten direkt von Remote-Geräten abrufen, ohne dass das Betriebssystem des Remote-Systems nach dem Einrichten der Übertragung vermitteln muss).