Wenn Sie etwas über direkten Speicherzugriff (Direct Memory Access) wissen wollen, dann sind Sie hier richtig, denn dieser Beitrag erklärt die Definition und Funktionsweise.
Sie können die RDMA-Technologie einsetzen, um es Computern in einem Netzwerk zu ermöglichen, Daten im Hauptspeicher auszutauschen, ohne den Prozessor, den Cache oder das Betriebssystem der beiden Computer einzubeziehen. Sie können aber auch die DMA-Funktion verwenden, um Daten von einem angeschlossenen Gerät direkt zum Speicher auf der Hauptplatine des Computers zu senden. In diesem Beitrag von MiniTool geht es hauptsächlich um DMA.
Die Definition von Direct Memory Access
Zunächst einmal, was ist Direct Memory Access oder auf deutsch – Direkter Speicherzugriff? Direct Memory Access wird mit DMA abgekürzt und ist eine Funktion von Computersystemen. Er ermöglicht es Ein-/Ausgabegeräten (E/A), unabhängig von der Zentraleinheit (CPU) auf den Hauptspeicher des Systems (Random-Access Memory) zuzugreifen, was die Speicheroperationen beschleunigt.
Ohne Direct Memory Access ist die CPU bei programmierten Ein-/Ausgaben in der Regel während des gesamten Lese- oder Schreibvorgangs voll ausgelastet, so dass sie keine anderen Aufgaben durchführen kann. Mit DMA initiiert die CPU zuerst die Übertragung, führt dann andere Operationen durch, während die Übertragung läuft, und erhält schließlich einen Interrupt vom DMA-Controller (DMAC), wenn die Operation abgeschlossen ist.
Der direkte Speicherzugriff ist immer dann sinnvoll, wenn die CPU mit der Datenübertragungsrate nicht Schritt halten kann oder wenn die CPU während des Wartens auf relativ langsame E/A-Datenübertragungen Arbeiten ausführen muss.
Mehrere Hardwaresysteme verwenden Direct Memory Access, z. B. Festplatten-Controller, Grafikkarten, Netzwerkkarten und Soundkarten. DMA wird auch für die On-Chip-Datenübertragung in Multicore-Prozessoren verwendet. Im Vergleich zu Computern ohne Direct Memory Access-Kanäle können Computer mit DMA-Kanälen Daten zwischen Geräten mit viel weniger CPU-Overhead übertragen.
Direct Memory Access kann auch für „Speicher zu Speicher“ verwendet werden, um Daten im Speicher zu kopieren oder zu verschieben. Er kann teure Speicheroperationen (z. B. große Kopien oder Scatter-Gather-Operationen) von der CPU auf eine dedizierte DMA-Engine übertragen. DMA ist wichtig in Network-on-Chip- und Memory-Computing-Architekturen.
Wie funktioniert der direkte Speicherzugriff?
Wie funktioniert dann der direkte Speicherzugriff? Beim Standard-Direktspeicherzugriff (auch DMA von Drittanbietern genannt) wird ein DMA-Controller eingesetzt. Der DMA-Controller kann Speicheradressen erzeugen und Speicher-Lese- oder Schreibzyklen starten. Er umfasst mehrere Hardware-Register, die von der CPU gelesen und geschrieben werden können.
Diese Register bestehen aus einem Speicheradressregister, einem Byte-Zählregister und einem oder mehreren Steuerregistern. Abhängig von den Funktionen des Direktspeicherzugriffs-Controllers können diese Steuerregister eine Kombination aus Quelle, Ziel, Übertragungsrichtung (Lesen von oder Schreiben zum E/A-Gerät), Größe der Übertragungseinheit und/oder die Anzahl der in einem Burst zu übertragenden Bytes festlegen.
Um Eingabe-, Ausgabe- oder Speicher-zu-Speicher-Operationen durchzuführen, initialisiert der Host-Prozessor den DMA-Controller mit der Anzahl der zu übertragenden Wörter und der zu verwendenden Speicheradresse. Dann befiehlt die CPU dem Peripheriegerät, mit der Datenübertragung zu beginnen.
Anschließend bietet der Direct Memory Access-Controller dem Systemspeicher Adressen und Lese-/Schreibsteuerleitungen an. Jedes Mal, wenn ein Datenbyte für die Übertragung zwischen dem Peripheriegerät und dem Speicher vorbereitet wird, inkrementiert der DMA-Controller sein internes Adressregister, bis ein kompletter Datenblock übertragen wurde.
Betriebsmodi
Der direkte Speicherzugriff arbeitet unterschiedlich in verschiedenen Betriebsmodi.
Burst-Modus
Im Burst-Modus wird der gesamte Datenblock in einer kontinuierlichen Sequenz übertragen. Sobald die CPU dem DMA-Controller den Zugriff auf den Systembus erlaubt, überträgt der DMA-Controller sämtliche Datenbytes des Datenblocks, bevor er die Kontrolle über die Systembusse wieder an die CPU freigibt, was jedoch dazu führt, dass die CPU für eine beträchtlich lange Zeit inaktiv ist. Dieser Modus wird auch als „Blockübertragungsmodus“ bezeichnet.
Zyklus-Stehlen-Modus
Der „Cycle Stealing Mode“ (Zyklus-Stehlen-Modus) wird in einem System verwendet, in dem die CPU nicht für die Zeitdauer deaktiviert werden kann, die für den „Burst Transfer Mode“ erforderlich ist. Im Cycle-Stealing-Modus erhält der DMA-Controller den Zugriff auf den Systembus über die Signale BR (Bus Request) und BG (Bus Grant), die mit denen des Burst-Modus identisch sind. Diese beiden Signale steuern die Schnittstelle zwischen der CPU und dem DMA-Controller.
Einerseits ist im Cycle-Stealing-Modus die Übertragungsgeschwindigkeit der Datenblöcke nicht so schnell wie im Burst-Modus, andererseits ist die Leerlaufzeit der CPU nicht so lang wie im Burst-Modus.
Transparenter Modus
Der transparente Modus benötigt die längste Zeit für die Übertragung von Datenblöcken, aber das ist auch der effizienteste Modus was die Gesamtsystemleistung angeht. Im transparenten Modus überträgt der Direct Memory Access Controller nur dann Daten, wenn die CPU Operationen durchführt, die nicht die Systembusse verwenden.
Der Hauptvorteil des transparenten Modus besteht darin, dass die CPU nie aufhört, ihre Programme auszuführen, und Direct Memory Access-Übertragungen zeitlich frei sind, während der Nachteil darin besteht, dass die Hardware feststellen muss, wann die CPU die Systembusse nicht benutzt, was kompliziert sein kann. Dies wird auch als „versteckter DMA-Datenübertragungsmodus“ bezeichnet.