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).