Speicherdirektzugriff

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Der Begriff Speicherdirektzugriff oder englisch Direct Memory Access (DMA) bezeichnet in der Computertechnik eine Zugriffsart, die über ein Bussystem direkt auf den Speicher zugreift.

Diese Technik erlaubt angeschlossenen Peripheriegeräten, wie Netzwerkkarte oder Soundkarte, ohne Umweg über die CPU direkt mit dem Arbeitsspeicher zu kommunizieren. Der Vorteil des Speicherdirektzugriffs ist die schnellere Datenübertragung bei gleichzeitiger Entlastung des Prozessors.

Direkter Speicherzugriff[Bearbeiten]

Ein-/Ausgabe über Prozessor
Ein-/Ausgabe über direkten Speicherzugriff

Die konventionelle Methode, Daten von einer Eingabe-Ausgabe-Einheit in den Arbeitsspeicher zu transferieren, nutzt Prozessorregister zur Zwischenspeicherung. Erst werden die Daten vom Prozessor in sein internes Register eingelesen, um dann in einem weiteren Schritt in den Arbeitsspeicher verschoben zu werden. Dafür sind viele Taktschritte notwendig, in denen der Prozessor nicht für die Ausführung anderer Befehle zur Verfügung steht, und somit wird die Ausführungsgeschwindigkeit laufender Programme verringert.

Der direkte Speicherzugriff ist eine Schaltungs- und Steuermaßnahme, die über spezielle Datenleitungen auf dem Motherboard eine Verbindung zwischen Steckkarten (oder auch I/O auf dem Motherboard selbst) und dem Arbeitsspeicher herstellt. Dadurch können die Daten ohne Umweg über den Prozessor direkt in den Speicher geschrieben werden, und die Ausführungsgeschwindigkeit laufender Programme wird nicht beeinflusst.

Beim PC gibt es nur eine reale DMA-Leitung. Der Zugriff der unterschiedlichen Komponenten (Steckkarten) wird anhand eines Index unterschieden. Demnach darf ein DMA-Index nur einem Gerät zugeordnet werden. Der Index gibt die Nummer des DMA-Kanals an. Insgesamt gibt es 8 DMA-Kanäle. Die Kanäle 0, 2 und 4 sind für interne Zwecke bereits fest vergeben. Die Kanäle 1, 3, 5, 6 und 7 können frei belegt werden. Die Kanäle 0–3 arbeiten mit 8, die Kanäle 4–7 mit 16 Bit.

Funktionsweise des DMA-Controllers[Bearbeiten]

In modernen Chipsätzen ist der DMA-Controller (DMA-C) integriert. Ältere Motherboards haben einen separaten Baustein wie zum Beispiel den 8237 oder den 8257 von Intel.

Will die I/O-Hardware Daten senden oder empfangen, trennt der DMA-Controller den Prozessor vom Bussystem. Der DMA-Controller führt dann die Anforderung mit hoher Geschwindigkeit aus. Danach wird die Verbindung zwischen Prozessor und Bussystem wieder hergestellt. Für den Speichertransfer benötigt der Prozessor bis zu 40 Takte je Byte. Der DMA-Controller führt den Zugriff innerhalb von vier Takten aus.

Der DMA-Controller dient zum Datentransport zwischen Arbeitsspeicher und Peripherie. Dies führt zu einer Entlastung des Prozessors. Neben einem Geschwindigkeitszuwachs bei speicherintensiven Anwendungen ermöglicht die Verwendung von DMA-Controllern außerdem sehr hohe Datenraten z. B. beim Brennen von DVD-Medien. Selbst mit aktuellen PC-Systemen sind Brenngeschwindigkeiten von 16× ohne DMA-Unterstützung nicht möglich.

Arbitrierung[Bearbeiten]

Der DMA-Controller muss die Daten zwangsläufig über dieselben Daten-, Adress- und Steuerleitungen des jeweiligen Bussystems übertragen (lassen) wie sonst die CPU. Es muss also dafür gesorgt werden, dass CPU und DMA-Controller nicht kollidieren. Dazu wird im Voraus eine „Arbitrierung“ durchgeführt, ein Verfahren, bei dem der DMA-Controller die Kontrolle über die Busse bei der CPU anfordert, letztere dies bei nächster Gelegenheit gewährt und dann die Busse freigibt. Nach Abschluss des DMA-Transfers wird die Busanforderung wieder zurückgenommen, und die CPU kann wieder übernehmen.

Elektronisch gibt es dazu verschiedene Implementierungen, mit verschiedenen Anzahlen von Steuerleitungen. Die ausführlichste und damit überschaubarste Variante verfügt über eine Bus-Request-Leitung (Anforderung) vom DMA-Controller zur CPU sowie eine Bus-Grant-Leitung (Gewährung) in umgekehrter Richtung.

Adressierungsverfahren[Bearbeiten]

Man unterscheidet zwei verschiedene Adressierungsverfahren. Beim so genannten Explicit Addressing (auch Two Cycle Transfer) holt der DMA-Controller zunächst ein Datenwort (oder auch -byte) ab und speichert dieses in einem internen Register (wie eine CPU). Danach adressiert er die Zielkomponente und überträgt ihr die Daten. Für dieses Vorgehen werden also zwei Buszyklen benötigt. − Beim Implicit Addressing (oder Single Bus Transfer) entfällt die Zwischenspeicherung in einem Register: Der DMA-Controller adressiert das zu holende Datenwort und stellt dieses sofort zum Zielbaustein durch. Es wird nur ein einziger Buszyklus benötigt. Dieses Verfahren ist nicht für Speicher-zu-Speicher-Übertragungen geeignet, da jeweils nur eine Adresse am Speicher anliegen kann.

Effizient wird das DMA-Verfahren allerdings erst, wenn nicht nur ein einzelnes Datenwort zu übertragen ist, sondern größere zusammenhängende Speicherbereiche, z. B. ganze Datensektoren oder -spuren von einer Festplatte. Dann lohnt sich auch der gewisse Overhead, der dadurch entsteht, dass zuallererst der DMA-Controller durch Setzen diverser Registerinhalte für die bevorstehende Aufgabe aufgesetzt werden muss.

DMA und ISA[Bearbeiten]

Die klassische DMA-Technik des ISA-Busses basiert dabei auf der Signalisierung der Peripherie für Transferbedarf durch einzelne Datenleitungen, die so genannten DMA-Kanäle. Wird nun solch ein Kanal angesteuert, so liefern Schaltkreise, die der Bus-Steuerung zugehörig sind, Adressen auf den Bus, die je Zyklus inkrementiert oder konstant gehalten sein können, während der initiierende periphere Schaltkreis entweder die aufgeschalteten Daten entgegennimmt oder aber selbst Daten auf den Bus aufschaltet. Da ein Speicherdirektzugriff die normale Bus-Tätigkeit unterbricht, ist eine Operation mit der CPU in diesem Zeitraum nicht möglich. Da es mehrere DMA-Initiatoren gibt, muss mit entsprechenden Prioritätsschemata gearbeitet werden. Weiterhin muss ein DMA-Kanal zunächst initialisiert werden und die Beschaltung des Busses mit Adress- und Steuersignalen muss ebenso erst per Software vorgegeben werden. Nach erfolgreichem Transfer wird meist ein Interrupt ausgelöst, der der System-Software mitteilt, dass der Vorgang abgeschlossen ist. Daraufhin werden die DMA-Schaltkreise meist so umprogrammiert, dass sie auf den nächsten zu bearbeitenden Datenblock verweisen.

Entwicklungsrichtungen für DMA-Controller[Bearbeiten]

Als DMA-Controller im weiteren Sinne muss jeder Baustein verstanden werden, der einen Speicherzugriff (entweder auf den Hauptspeicher selbst oder auf eine Peripheriekomponente) durchführen kann, ohne dabei die CPU in Anspruch zu nehmen. Dieses Grundprinzip kann jedoch vielfach variiert werden. So gibt es etwa Systeme mit einem zentralen DMA-Coprozessor, aber auch Systeme, in denen jede Komponente über einen eigenen, dezentralen DMA-Controller verfügt. Das letztere Verfahren unterscheidet sich von der Verwendung eines zentralen Controllers dadurch, dass keine DMA-Kanäle existieren. Vielmehr reserviert der anfordernde Schaltkreis den Bus für sich und adressiert diesen auch selbst. Jede Komponente, wie Prozessor oder periphere Bauteile können dabei der Initiator sein, der die Befehlsmacht über den Hauptspeicher (Adressierung, Datentransfer und Bussteuersignale) übernimmt. Der Busmaster überträgt nun seinem Ziel, dem Target, die für ihn vorgesehenen Daten. Zu einem bestimmten Zeitpunkt kann prinzipiell immer nur eine Komponente Busmaster sein. So können etwa PCI-Controller zugleich auch DMA-Busmaster sein.

Siehe auch[Bearbeiten]

Weblinks[Bearbeiten]