DMA einfach erklärt: Ablauf, Nutzen und Risiken
Direct Memory Access (DMA) bedeutet: Ein Controller oder ein busmasterfähiges Gerät überträgt Daten, ohne dass die CPU jedes einzelne Datenwort selbst bewegen muss. Die CPU richtet den Transfer meist ein und erhält nach dem Abschluss eine Meldung.
Auf dieser Seite lernst du, den Ablauf zu erklären, geeignete Einsatzfälle zu erkennen und Nutzen, Grenzen sowie Sicherheitsrisiken abzuwägen.
Hake ab, was du schon kannst — und komm am Ende hierher zurück!
Was DMA von CPU-gesteuerter Übertragung unterscheidet
Stell dir vor, eine Netzwerkkarte empfängt einen großen Datenblock. Ohne DMA müsste die CPU wiederholt Daten aus der Schnittstelle lesen und in den Arbeitsspeicher schreiben. Dabei wäre sie mit vielen ähnlichen Übertragungsschritten beschäftigt.
Mit DMA legt die Software vorab fest, wo die Daten liegen oder abgelegt werden sollen, wie groß der Transfer ist und wie er gesteuert wird. Danach bewegt ein DMA-Controller oder das busmasterfähige Gerät die Daten. Die CPU kann in dieser Zeit andere Befehle bearbeiten, soweit sie den gemeinsam genutzten Bus nicht selbst benötigt.
DMA
Direct Memory Access ist ein von Hardware ausgeführter Datentransfer, bei dem die CPU nicht jedes Datenwort selbst überträgt. Häufig fließen Daten zwischen Peripherie und Arbeitsspeicher; grundsätzlich sind auch Speicher-zu-Speicher- und Gerät-zu-Gerät-Transfers möglich.
DMA ersetzt die CPU nicht vollständig: Die CPU beziehungsweise die Software bereitet den Transfer meist vor und verarbeitet später die Abschlussmeldung.
Wie ein DMA-Transfer abläuft
Ein klassischer DMA-Transfer folgt einer klaren Zusammenarbeit:
- Die Software richtet Speicheradresse, Datenmenge und Steuerinformationen ein.
- Ein Peripheriegerät fordert den Transfer an.
- Der DMA-Controller fordert die Kontrolle über den Bus an.
- Die CPU gewährt die Busnutzung und gibt die benötigten Leitungen frei.
- Die DMA-Hardware liest an der Quelle und schreibt am Ziel.
- Nach dem Transfer gibt sie den Bus frei und meldet den Abschluss, häufig durch einen Interrupt.
Der Bus verbindet Komponenten über Daten-, Adress- und Steuerleitungen. Weil CPU und DMA dieselben Leitungen benötigen können, muss eine Busarbitrierung entscheiden, wer den Bus gerade kontrolliert. Auf einem gemeinsam genutzten Bus kann grundsätzlich nur ein Busmaster zur selben Zeit die Kontrolle besitzen.
Busmaster
Ein Busmaster ist die Komponente, die einen Transfer auf dem Bus initiiert und dabei Adressen, Datenfluss und nötige Steuersignale vorgibt.
Eine Netzwerkkarte soll empfangene Paketdaten in den Arbeitsspeicher schreiben. Die Software stellt Zieladresse und Datenmenge bereit. Die Karte erhält die Bushoheit, schreibt den Block und löst anschließend einen Interrupt aus. Der Interrupt informiert die CPU darüber, dass sie die übertragenen Daten weiterverarbeiten kann.
Welche Transferarten es gibt
Die Transferart bestimmt, wie DMA und CPU sich die Buszeit teilen.
- Burst-Modus: DMA überträgt einen ganzen Block am Stück. Das erhöht den Durchsatz, kann CPU-Buszugriffe aber länger verzögern.
- Cycle Stealing: DMA überträgt ein Datenwort und gibt den Bus danach wieder frei. Die CPU wird kürzer unterbrochen, der Blocktransfer dauert dafür meist länger.
- Transparenter Modus: DMA nutzt den Bus nur in Zeiten, in denen die CPU ihn nicht braucht. Das schont CPU-Buszugriffe, macht den Zeitpunkt des Transfers aber von freien Busphasen abhängig.
Bei der Adressierung gibt es ebenfalls einen Unterschied: Ein Transfer mit internem Zwischenregister benötigt einen Lese- und einen Schreibzyklus. Beim direkten Weiterleiten ohne Zwischenregister kann ein Buszyklus genügen; diese Variante eignet sich jedoch nicht für Speicher-zu-Speicher-Transfers, weil dafür zwei Speicheradressen benötigt werden.
Eine Audiowiedergabe braucht regelmäßig neue Daten. Ein sehr langer Burst könnte andere Buszugriffe unnötig verzögern. Kürzere Übertragungseinheiten können hier ein sinnvoller Kompromiss sein. Für einen großen, zusammenhängenden Datenblock kann ein Burst dagegen hohen Durchsatz liefern.
Wann DMA nützt und wann nicht
DMA lohnt sich besonders bei großen, häufigen oder zeitkritischen Datenmengen. Der Einrichtungsaufwand verteilt sich dann auf viele Datenwörter. Typische Einsatzfelder sind Laufwerke, Audio- und Videodaten, Netzwerkkarten und Mikrocontroller-Schnittstellen.
Bei sehr kleinen Transfers kann die Einrichtung von Adressen, Zählern und Steuerregistern mehr Aufwand verursachen als die direkte Übertragung durch die CPU. DMA ist deshalb kein automatischer Geschwindigkeitsgewinn für jede Datenbewegung.
Ein Mikrocontroller soll 512 Byte über eine SPI-Schnittstelle senden. Die Software trägt die Startadresse des Datenblocks und die Anzahl der Bytes in Register ein und aktiviert den Transfer. Der DMA-Controller sendet jeweils ein Byte, erhöht die Adresse und verringert den Zähler. Sobald der Zähler null erreicht, ist der Block vollständig übertragen.
Aktives Warten auf das Ende würde die CPU erneut binden. Eine Abschlussmeldung per Interrupt erlaubt ihr dagegen, während des Transfers andere Aufgaben zu bearbeiten.
Welche Grenzen und Risiken du beachten musst
DMA entlastet die CPU, konkurriert aber je nach Architektur mit ihr um den Bus. Lange Bursts können daher CPU-Zugriffe verzögern. Fehlerhafte Adressen oder Steuerregister können außerdem Daten überschreiben oder das System destabilisieren.
Direkter Gerätezugriff auf den Arbeitsspeicher ist auch ein Sicherheitsrisiko: Ein unbefugtes oder manipuliertes DMA-fähiges Gerät könnte Speicher lesen oder verändern. Eine Input/Output Memory Management Unit (IOMMU) begrenzt, auf welche Speicherbereiche ein Gerät zugreifen darf. Zusätzlich muss Software empfangene Daten prüfen und darf sie nicht ungeprüft ausführen.
IOMMU
Eine IOMMU ist eine Hardwareeinheit, die Speicherzugriffe von Ein- und Ausgabegeräten übersetzt und auf erlaubte Bereiche beschränkt. Sie schützt nicht vor jedem Fehler, begrenzt aber unkontrollierte Gerätezugriffe.
Im Netzwerk kann das Bündeln mehrerer Pakete zu weniger DMA-Ereignissen und längeren Ruhephasen führen. Das kann Energie sparen, erhöht aber möglicherweise die Latenz. Es entsteht ein Zielkonflikt zwischen Energiebedarf und schneller Reaktion.
Karteikasten
Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.
Alles auf einen Blick
- DMA
- Rollen: CPU richtet ein, DMA-Hardware bewegt Daten, Arbitrierung vergibt die Bushoheit
- Nutzen: weniger wiederholte CPU-Arbeit und hoher Durchsatz bei großen Datenblöcken
- Transferwahl: Burst für Durchsatz, kleinere Einheiten für kürzere Busbelegung
- Rentabilität: bei sehr kleinen Transfers direkte CPU-Übertragung prüfen
- Grenzen: Buskonkurrenz und mögliche Schäden durch fehlerhafte Adressen
- Schutz: IOMMU begrenzt Gerätezugriffe, Software prüft übertragene Inhalte
Mit Google fortfahren