Wikipedia · einfach zusammengefasst · Stand
Direct Memory Access
Unter Direct Memory Access (DMA, deutsch selten Speicherdirektzugriff) versteht man, wenn Computer-Komponenten selbstständig ohne Beteiligung der CPU Daten …
Inhalt6 Abschnitte
Grundidee und Bedeutung
Direct Memory Access (DMA, deutsch selten Speicherdirektzugriff) bedeutet, dass Computer-Komponenten Daten selbstständig übertragen können, ohne dass die CPU beteiligt ist. Peripheriegeräte wie Netzwerkkarten oder Soundkarten können dadurch direkt mit dem Arbeitsspeicher kommunizieren. Das beschleunigt Übertragungen und entlastet den Prozessor.
Entscheidend ist dabei nicht unbedingt der Zugriff auf Speicher, obwohl der Name dies nahelegt. Wesentlich ist, dass ein Peripheriegerät statt der CPU den Datentransfer initiiert. DMA kann daher auch direkte Kommunikation zwischen Peripheriegeräten ermöglichen, ohne dass ein Speicherzugriff stattfindet.
Die technischen Beschreibungen des Artikels beziehen sich vor allem auf die Intel-PC-Architektur; DMA ist jedoch auch in anderen Systemen, etwa ARM, bekannt. Remote Direct Memory Access bezeichnet den Zugriff über Netzwerke auf den Hauptspeicher entfernter Rechner, ohne dass deren Betriebssystem direkt am Transfer beteiligt ist. Bei Hochgeschwindigkeitsverbindungen ab 100 GBit/s, beispielsweise 100 Gigabit-Ethernet oder InfiniBand, sind laut Artikel 10–25 GByte/s, Latenzen von 500–1000 ns und weniger als 2 % zusätzliche CPU-Last möglich.
Ablauf eines DMA-Transfers
Bei herkömmlicher Ein-/Ausgabe überträgt die CPU Daten zwischen einer Ein-/Ausgabe-Einheit und dem Arbeitsspeicher. Bei DMA stellt ein Peripheriegerät zunächst per DMA-Request eine Anforderung an den DMA-Baustein. Dieser fordert mit HOLD die Kontrolle über den benötigten Bus an. Die CPU bestätigt die Freigabe mit HOLD-Acknowledge (HLDA), woraufhin der DMA-Baustein dem Peripheriegerät ein DMA-Acknowledge gibt.
Bei Nicht-Busmaster-DMA (3rd-party-DMA) löst der DMA-Baustein den Lesezugriff auf die Quelle und den Schreibzugriff auf das Ziel aus. Das Peripheriegerät bedient dabei nur den Datenbus; der DMA-Baustein bedient den Adressbus. Bei Busmaster-DMA (1st-party-DMA) führt das Peripheriegerät den Zugriff selbst aus und bedient Datenbus, Adressbus und einige Steuerleitungen.
Einzelwort-DMA schreibt ein einzelnes Wort, während Burst-DMA mehrere hundert Worte schreiben kann. Nach Abschluss setzt das Peripheriegerät sein DMA-Acknowledge zurück. Durch Freigabe von HOLD erhält die CPU ihren Bus wieder.
DMA-Controller und Leistung
Ältere Motherboards verwendeten separate DMA-Bausteine wie Intels 8237 oder 8257. Anfang der 1990er Jahre wurden zuvor getrennte Bauteile des IBM-PCs in Chipsätze integriert. Mit Busmaster-DMA Ende der 1990er Jahre wurde ein eigener DMA-Controller nicht mehr benötigt, weil die Peripheriegeräte die Funktion selbst übernahmen.
Wenn Ein-/Ausgabe-Hardware Daten senden oder empfangen will, trennt der DMA-Controller den Prozessor vom Bussystem, führt die Anforderung mit hoher Geschwindigkeit aus und stellt anschließend die Verbindung wieder her. Für einen Speichertransfer benötigt der Prozessor bis zu 40 Takte je Byte, der DMA-Controller vier Takte. DMA transportiert Daten zwischen Arbeitsspeicher und Peripherie, entlastet dadurch die CPU und ermöglicht hohe Datenraten bei speicherintensiven Anwendungen. Als Beispiel nennt der Artikel das Brennen von DVDs: 16× Brenngeschwindigkeit ist selbst mit aktuellen PC-Systemen ohne DMA-Unterstützung nicht möglich.
Die CPU des PCs besitzt nur ein Paar BusRequest-/BusGrant-Leitungen, HOLD und HLDA, die über einen Intel 8237 angesprochen werden. Dieser kann bis zu vier DMA-Geräte über DREQ0–3 und DACK0–3 betreuen. Der IBM-PC/XT besitzt vier 8-bit-DMA-Kanäle (0–3), der IBM-PC/AT zusätzlich vier 16-bit-DMA-Kanäle (4–7).
Arbitrierung des Busses
DMA-Controller und CPU verwenden dieselben Daten-, Adress- und Steuerleitungen des Bussystems. Damit sie nicht gleichzeitig darauf zugreifen und kollidieren, ist eine Arbitrierung nötig. Der DMA-Controller fordert die Buskontrolle bei der CPU an; diese gewährt sie bei nächster Gelegenheit und gibt den Bus frei. Nach dem DMA-Transfer wird die Anforderung zurückgenommen und die CPU übernimmt wieder.
Elektronisch gibt es verschiedene Umsetzungen mit unterschiedlich vielen Steuerleitungen. Die einfachste besitzt eine Bus-Request-Leitung vom DMA-Controller zur CPU und eine Bus-Grant-Leitung in Gegenrichtung.
Adressierung und ISA-DMA
Beim Explicit Addressing, auch Two Cycle Transfer, holt der DMA-Controller zunächst ein Datenwort oder -byte und speichert es in einem internen Register. Danach adressiert er das Ziel und überträgt die Daten. Das benötigt zwei Buszyklen. Beim Implicit Addressing oder Single Bus Transfer entfällt das Zwischenregister: Der Controller adressiert das Datenwort und leitet es sofort an den Zielbaustein weiter. Dafür ist nur ein Buszyklus nötig. Dieses Verfahren eignet sich nicht für Speicher-zu-Speicher-Übertragungen, weil am Speicher jeweils nur eine Adresse anliegen kann.
DMA ist besonders effizient bei größeren zusammenhängenden Speicherbereichen, etwa ganzen Datensektoren oder -spuren einer Festplatte. Dann lohnt sich der Aufwand, den DMA-Controller vorab durch das Setzen verschiedener Register zu konfigurieren.
Beim klassischen ISA-Bus signalisiert die Peripherie ihren Transferbedarf über einzelne DMA-Kanäle. Bussteuer-Schaltkreise liefern dann Adressen, die je Zyklus erhöht oder unverändert gehalten werden können. Der initiierende Peripherie-Schaltkreis nimmt Daten entgegen oder legt sie auf den Bus. Während DMA die normale Busaktivität unterbricht, kann die CPU keine Busoperation ausführen. Mehrere DMA-Initiatoren erfordern Prioritätsschemata. Kanäle sowie Adress- und Steuersignale werden per Software initialisiert. Nach erfolgreichem Transfer löst das System meist einen Interrupt aus; die Software kann die DMA-Schaltkreise anschließend auf den nächsten Datenblock umprogrammieren.
Zentrale und dezentrale DMA-Systeme
Im weiteren Sinn ist jeder Baustein ein DMA-Controller, der ohne Beanspruchung der CPU auf Hauptspeicher oder eine Peripheriekomponente zugreifen kann. Möglich sind Systeme mit einem zentralen DMA-Coprozessor oder Systeme, in denen jede Komponente einen eigenen dezentralen DMA-Controller besitzt.
Bei dezentralem DMA gibt es keine DMA-Kanäle. Der anfordernde Schaltkreis reserviert den Bus und adressiert ihn selbst. Prozessor oder Peripherie können Initiator sein und die Befehlsmacht über den Hauptspeicher übernehmen, also Adressierung, Datentransfer und Bussteuersignale. Der Busmaster überträgt die Daten an sein Ziel, das Target. Zu einem Zeitpunkt kann grundsätzlich nur eine Komponente Busmaster sein.