Angenommen, eine CPU möchte eine DMA-Leseübertragung von einem PCI Express-Gerät durchführen. Die Kommunikation mit PCI Express-Geräten erfolgt über Transaktions-Layer-Pakete (TLP). Theoretisch ist die maximale Nutzlastgröße 1024 Doppelwort für TLP. Wie verhält sich also ein DMA-Controller, wenn eine CPU einem PCI-Express-Gerät einen DMA-Lesebefehl in einer Größe von 4 Megabyte gibt?
In der PCIe-Enumerationsphase wird die maximal zulässige Nutzlastgröße festgelegt (sie kann niedriger als die maximale Nutzlastgröße des Geräts sein: z. B. hat ein dazwischenliegender PCIe-Switch eine niedrigere maximale Nutzlastgröße).
Die meisten PCIe-Geräte sind DMA-Master, daher überträgt der Treiber den Befehl an das Gerät. Das Gerät sendet mehrere Schreibpakete, um 4 MiB in xx maximal großen TLP-Blöcken zu übertragen.
Ein PCI-basierter Bus hat keinen "DMA Controller" in Form eines Chips oder einer Unterschaltung im Chipsatz. Jedes Gerät am Bus kann zum Busmaster werden. Der Hauptspeicher ist immer ein Slave.
Angenommen, Sie haben Ihre eigene PCIe-Gerätekarte erstellt, die als PCI-Master fungieren kann und Ihr Programm (das auf der CPU läuft) möchte Daten von dieser Karte an den Hauptspeicher (4 MiB) senden.
Der Gerätetreiber kennt die Speicherzuordnung für diesen bestimmten Speicherbereich vom Betriebssystem aus (einige Schlüsselwörter: Speicherbelegung, PCI-Bus-Enumeration, PCI-BARs,).
Der Treiber überträgt den Befehl (Schreiben), die Quelladresse, die Zieladresse und die Länge an das Gerät. Dies kann durch Senden von Bytes an eine spezielle Adresse in einem vordefinierten BAR oder durch Schreiben in den PCI-Konfigurationsbereich erfolgen. Der DMA-Master auf den Karten prüft diese speziellen Regionen auf neue Aufgaben (Scatter-Gather-Listen). Wenn ja, werden diese Aufgaben in die Warteschlange eingereiht.
Jetzt weiß der DMA-Master, wohin er sendet, wie viele Daten. Er liest die Daten aus dem lokalen Speicher und wickelt sie in 512-Byte-TLPs maximaler Nutzlastgröße ein (die maximale Nutzlastgröße auf dem Pfadgerät & lt; --- & gt; Hauptspeicher ist aus der Enumeration bekannt) und sendet sie an die Zieladresse. Die PCI-Adress-basierten Routing-Mechanismen leiten diese TLPs zum Hauptspeicher.