Memory-mapped IO bedeutet, dass die Geräteregister in den Speicherplatz der Maschine abgebildet werden – wenn diese Speicherregionen von der CPU gelesen oder geschrieben werden, liest oder schreibt sie eher vom Gerät als vom realen Speicher. Um Daten vom Gerät zu einem tatsächlichen Speicherpuffer zu übertragen, muss die CPU die Daten aus den speicherabgebildeten Geräteregistern lesen und in den Puffer schreiben (und umgekehrt zum Übertragen von Daten zum Gerät).
Mit einer DMA-Übertragung ist das Gerät in der Lage, Daten direkt zu oder von einem echten Speicherpuffer selbst zu übertragen. Die CPU teilt dem Gerät den Speicherort des Puffers mit und kann dann andere Arbeiten ausführen, während das Gerät direkt auf den Speicher zugreift.
Da andere die Frage bereits beantwortet haben, werde ich nur ein wenig Geschichte hinzufügen.
Früher gab es auf x86 (PC)-Hardware nur I/O-Platz und Speicherplatz. Dies waren zwei verschiedene Adressräume, auf die mit unterschiedlichen Busprotokollen und unterschiedlichen CPU-Anweisungen zugegriffen wurde, die jedoch über denselben Steckkartensteckplatz kommunizieren konnten.
Die meisten Geräte verwendeten E/A-Platz sowohl für die Steuerschnittstelle als auch für die Massendatenübertragungsschnittstelle. Der einfache Weg, auf Daten zuzugreifen, bestand darin, viele CPU-Befehle auszuführen, um Daten wortweise von einer E/A-Adresse zu einer Speicheradresse zu übertragen (manchmal als "Bit-Banging" bekannt).
Um Daten autonom von Geräten in den Hostspeicher zu verschieben, gab es im ISA-Busprotokoll keine Unterstützung für Geräte zum Initiieren von Übertragungen. Eine Kompromisslösung wurde erfunden:der DMA-Controller. Dies war ein Stück Hardware, das von der CPU in Betrieb genommen wurde und Übertragungen initiierte, um Daten von der E/A-Adresse eines Geräts in den Speicher oder umgekehrt zu verschieben. Da die E/A-Adresse dieselbe ist, führt der DMA-Controller genau die gleichen Operationen aus wie eine CPU, aber etwas effizienter und lässt etwas Freiheit, im Hintergrund weiterzulaufen (wenn auch möglicherweise nicht so lange, wie es nicht möglich ist). mit dem Gedächtnis sprechen).
Spulen wir zu den Tagen von PCI vor, und die Busprotokolle wurden viel intelligenter:Jedes Gerät kann eine Übertragung initiieren. So ist es zum Beispiel einer RAID-Controller-Karte möglich, beliebige Daten jederzeit zum oder vom Host zu verschieben. Dies wird als "Busmaster"-Modus bezeichnet, aber ohne besonderen Grund wird dieser Modus weiterhin als "DMA" bezeichnet, obwohl der alte DMA-Controller schon lange nicht mehr vorhanden ist. Im Gegensatz zu alten DMA-Übertragungen gibt es häufig überhaupt keine entsprechende E/A-Adresse, und der Busmastermodus ist häufig die einzige Schnittstelle, die auf dem Gerät vorhanden ist, ohne jeglichen CPU-„Bit-Banging“-Modus.
Memory-mapped I/O ermöglicht es der CPU, Hardware durch Lesen und Schreiben bestimmter Speicheradressen zu steuern. Normalerweise wird dies für Operationen mit geringer Bandbreite verwendet, wie z. B. das Ändern von Steuerbits.
DMA ermöglicht der Hardware, den Speicher ohne direkt zu lesen und zu schreiben unter Einbeziehung der CPU. Normalerweise wird dies für Vorgänge mit hoher Bandbreite verwendet, z. B. Festplatten-E/A oder Kameravideoeingabe.
Hier ist ein Artikel mit einem gründlichen Vergleich zwischen MMIO und DMA.
Designrichtlinien für Hochleistungs-RDMA-Systeme
Direct Memory Access (DMA) ist eine Technik zum Übertragen der Daten von E/A zu Speicher und von Speicher zu E/A ohne Eingreifen der CPU. Zu diesem Zweck wird ein spezieller Chip namens DMA-Controller verwendet, um alle Aktivitäten und die Synchronisierung von Daten zu steuern. Im Ergebnis ist DMA im Vergleich zu anderen Datenübertragungstechniken viel schneller.
Andererseits fungiert der virtuelle Speicher als Cache zwischen Hauptspeicher und Sekundärspeicher. Daten werden vorab vom Sekundärspeicher (Festplatte) in den Hauptspeicher geholt, so dass Daten bei Bedarf bereits im Hauptspeicher zur Verfügung stehen. Dadurch können wir mehr Anwendungen auf dem System ausführen, als wir über ausreichend physischen Speicher verfügen.