DMA vs. programmierte E/A: Unterschiede im Überblick
Es gibt zwei Wege, Daten zwischen einem Gerät und dem Speicher zu bewegen. Bei der programmierten E/A (PIO) liest oder schreibt die CPU selbst jedes Wort über Register. Beim Direct Memory Access (DMA) bewegt ein DMA-Controller die Daten eigenständig, und die CPU richtet die Übertragung nur ein und wird benachrichtigt, wenn sie abgeschlossen ist. DMA entlastet die CPU und bewältigt große Übertragungen viel schneller, erfordert aber mehr Einrichtung und Sorgfalt.
| Aspekt | Programmierte E/A (PIO) | DMA |
|---|---|---|
| Wer die Daten bewegt | Die CPU, Wort für Wort, mit Load- und Store-Befehlen | Ein DMA-Controller oder das Gerät selbst, direkt vom oder zum Speicher |
| CPU-Last | Hoch: Die CPU ist während der gesamten Übertragung beschäftigt | Niedrig: Die CPU richtet die Übertragung ein und erledigt andere Arbeit |
| Durchsatz bei großen Übertragungen | Durch die CPU-Geschwindigkeit begrenzt | Hoch |
| Einrichtungsaufwand | Keiner | Erfordert eine Adresse, eine Länge oder Deskriptoren und die Behandlung des Abschlusses |
| Kleine Übertragungen | Oft schneller, da keine Einrichtung nötig ist | Der Einrichtungsaufwand kann den Nutzen übersteigen |
| Komplexität | Einfach | Aufwendiger: Deskriptor-Ringe, Pufferausrichtung, Cache-Kohärenz und IOMMU-Einstellungen |
| Nutzung des Speicherbusses | Über die CPU | Die DMA-Engine konkurriert mit der CPU um Speicherbandbreite |
| Typische Einsatzgebiete | Kleine Steuerregister, einfache Sensoren, ältere PIO-Modi | SSDs und NVMe, Netzwerkkarten, Audiopuffer, ADC-Abtastströme, GPU-Übertragungen |
Die Zahlenangaben sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.