DMA - Direct Memory Access

Sollen von einer Eingabe-Ausgabe-Einheit Daten in den Arbeitsspeicher geschrieben werden, so muss das der Prozessor veranlassen. Erst liest er die Daten in sein internes Register. Und erst dann schreibt er es in den Arbeitsspeicher. Dafür sind mehrere Taktschritte notwendig, die die Ausführungsgeschwindigkeit laufender Programme verringert, weil der Prozessor mit dem Lesen und Schreiben von Daten beschäftigt ist. Um diese Verarbeitungsschritte auszulagern, gibt es den Direct Memory Access (DMA).

Unter DMA (übersetzt: direkter Speicherzugriff) ist eine Schaltungs- und Steuermaßnahme zu verstehen, die über spezielle Datenleitungen auf dem Motherboard eine Verbindung zwischen den Ein- und Ausgabeeinheiten und dem Arbeitsspeicher herstellen. Dadurch können die Daten ohne Umweg über den Prozessor direkt in den Speicher geschrieben werden. So lässt sich die Ausführungsgeschwindigkeit des Gesamtsystems erhöhen.

Für den Speichertransfer benötigt der Hauptprozessor ca. 40 Takte. Der DMA-Controller führt den Transfer am Prozessor vorbei innerhalb von 4 Takten aus. Um die hohen Transferraten der üblichen Schnittstellen erreichen zu können müssen sie DMA beherrschen.
Die Idee ist, dass Schnittstellen, wie USB, FireWire, Thunderbolt und PCIe über eigene Hauptspeicherbereiche verfügen und dort lesen und schreiben können.

Beispiel für einen Speicherzugriff durch DMA

  • Der Host-Controller stellt die Schreib- und Lesebefehle vom Betriebssystem in eine Warteschleife. Die Befehle enthalten aber nur Verweise, wo sich die Daten im Hauptspeicher befinden.
  • Die eigentlichen Daten werden von oder in den Hauptspeicher per DMA geschrieben.
  • Der Controller des Laufwerks schreibt den Status eines Befehls in eine Completion Queue und löst einen Interrupt aus. Hat der Host-Controller davon Kenntnis genommen, schließt er den Vorgang ab.

Dank der asynchronen Abwicklung muss die Software nicht warten und das Laufwerk darf die Anfragen in beliebiger Reihenfolge abarbeiten.

Funktionsweise des DMA-Controllers

Übersicht DMA-Controller

Der DMA-Controller (DMA-C) ist im Chipsatz integriert. Sollen Daten in oder vom Speicher geschrieben oder gelesen werden, 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.

Wie sicher ist DMA?

Wenn Schnittstellen direkt auf den Arbeitsspeicher zugreifen dürfen, stellt man sich das schnell als Angriffsfläche für Sicherheitslücken vor. Und tatsächlich gab es schon Fälle, wo externe Schnittstellen mit DMA als Sicherheitslücke missbraucht wurden.

Grundsätzlich stellt eine DMA-fähige Schnittstelle kein Sicherheitsproblem dar. Denn DMA-Zugriff heißt nicht, dass ein angeschlossenes Gerät wahlfrei auf alle Speicher-Bereiche zugreifen kann. Die Implementierung von DMA sieht vor, dass das Gerät einen festen Speicherbereich zugewiesen bekommt und nur dort Daten schreiben und lesen kann. Die Kontrolle erfolgt durch den DMA-Controller.
Ein Angreifer könnte jetzt versuchen, Daten in den Arbeitsspeicher zu bekommen, um den PC zu kompromittieren. Allerdings spielt es keine Rolle, ob der Hauptprozessor oder der DMA-Controller die Daten in den Speicher schreibt.

Es hat zwar immer mal wieder mal wieder Sicherheitslücken im Zusammenhang mit DMA gegeben, was aber mit einer fehlerhaften Implementierung zu tun hatte. DMA kann es bei schlampiger Implementierung einem Angreifer möglicherweise leichter machen. Allerdings sind lokale Angriffe, bei denen physischer Zugriff benötigt werden, sehr schwer durchzuführen.

Weitere verwandte Themen:

Teilen:

Computertechnik-Fibel

Die Computertechnik-Fibel, das Computer-Buch

Das will ich haben!