DMA und wie funktioniert das genau?

Qimple

Enthusiast
Thread Starter
Mitglied seit
12.09.2009
Beiträge
709
Hi

Ich bin gerade dabei DMA genauer im Zusammenhang zu verstehen. Die Möglichkeit, Datentransfers ohne CPU zu erledigen sind zwar verlockend, aber werden Sie wie ich bisher gesehen habe, nur von Festplatten bzw. CD/DVD Laufwerken benutzt. Oder habe ich da etwas übersehen?

Könnte man den nicht auch nutzen um z.B. Daten von der Festplatte direkt in die Grafikkarte zu schaufeln (I/O Mapped)? Dann könnte die CPU ja anderes erledigen.

Generell kenne ich zwar den Unterschied von I/O Mapped und Memory Mapped, aber habe ich nichts gefunden im Zusammenspiel mit DMA. Und benutzt man den heute eigentlich noch, außer fürs Brennnen?

Und da war ja noch etwas mit dem PCI-Host-Bridge Controller, der ja auch DMA unterstützt.

Wikipedia und google, habe ich schon gefragt, und einzeln wirds erklärt, aber im gesamten irgendwie nicht.

Und da dachte ich hey, hier im Luxx weiß das bestimmt irgend jemand ganz genau.
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Was soll denn IO mapped sein?

Es gibt 3 grundlegende Zugriffsverfahren um IOs durch die Gegend zu schaufeln.
2 davon sind CPU controlliert und 1 eben nicht.

CPU controlliert:
a) memory mapped
b) port mapped
nicht CPU controlliert
c) direct memory access

a)
- IO Geräte und der Speicher nutzen den gleichen Adressraum, daher auch memory mapped, da die IOs auf den selben Adressenraum zugreifen wie der Speicher
- hierbei legt die CPU also auf dem selben Adressbus IO Adressen an, welcher auch für den Memory genutzt wird
- das führt letztendlich dazu, dass der IO Adressraum(wer braucht schon zB 32bit IO Adressen) unnötig weit aufgeblasen wird, was die Komplexität des Decodierens in der CPU unweigerlich erhöht und damit (Rechen)Zeit und auch Geld kostet.

b)
hier gibt es einen eigenen IO Adressraum, der losgelöst vom Adressraum des Speichers genutz werden kann. Das macht es für die CPU und deren Programmierer einfacher das ganze zu nutzen, weil weniger komplex.
Genutzt wird das, nach meinem Wissen (auch) in "unseren" CPUs.


In beiden Fällen ist die CPU aber immer beim IO involviert. Sie muß entweder auf einem oder 2 Adressräumen arbeiten, die Daten reinladen und wieder rausladen. Das sorgt dafür, dass die CPU für keine andere Aufgabe genutzt werden kann, wenn die Daten zwischen IO und Mem kopiert, was die Systemperformance verschlechtert, wenn es ums stumpfe Kopieren geht.

Daher nutzt man, gerade für große Datenmengen DMA.

c)
Hierbei ist der Transfer nicht CPU controlliert, sondern nur initiiert. Sprich die CPU sagt dem DMA Controller was von wo nach wo kopiert werden soll, dieser baut dann eine Verbindung zwischen beiden Geräte auf und der Spaß nimmt seinen Lauf. In der Zeit hat die CPU Zeit andere Sachen zu erledigen.
Als damals DMA für HDDs eingeführt wurde, hat man deutlich gemerkt, wie das System besser zu handeln war, da die CPU nicht immer unterbrechen mußte, wenn Daten geschaufelt werden mußten.
DMA ist aber weniger für den Transfer zwischen HDD und RAM gedacht, sondern ist ein Verfahren was überall Anwendung findet, man hat bei ATA einfach DMA für die Bezeichnung dieses Modi genommen.
DMA ist in diesem Zusammenhand auch weniger zwischen HDD und RAM angewendet, sondern zwischen dem HBA und dem RAM. Der HBA holt sich die Daten von der HDD, der DMA controller holt sich die Daten vom HBA und diese landen dann im RAM. Das läßt auch erahnen, warum DMA für das Brennen sinnvoll ist, da der Datenstrom dann nicht mehr von der CPU unterbrochen wird, weil diese plötzlich was anderes machen muß, sondern eben konstant über DMA mit Daten versorgt wird. (früher konnte man beim Brennen nicht mehr viel nebenbei machen, sonst war das Brennen platt)
Um genau zu sagen wo das verwendet wird, müßte man sich die Struktur der CPU anschauen und analysieren.

Wie gesagt, DMA ist ein Verfahren, welcher mittlerweile ÜBERALL da eingesetzt wird, wo große Datenmengen bewegt werden müssen, das spart CPU Zeit und damit kann die CPU kleiner dimensioniert werden und erhöht zeitgleich die Systemperformance.

Anwendung findet das nicht nur bei "unser" CPU, sondern auch in allen anderen Prozessoren, die sich in unserem Rechner befinden, wie zB GPUs, AudioCPU, (richtige) VideoCPUs und was weiß ich nicht noch. Weiterhin ist es auch in embedded systems anzutreffen, sprich in deinem Handy, deinem MP3 player, Auto, what ever.

Bezüglich der HDD -> GPU:
Das bringt herzlich wenig, da die Daten, die von der GPU berechnet werden sollen, zunächst von der CPU aufbereitet werden, da die Daten nicht in der Form auf der HDD liegen wie sie auch für die GPU nutzbar sind.
Was du verschlägst würde bedeuten, dass die GPU sämtliche relevanten und möglicherweise zu nutzenden Daten reinläd und von der CPU dann gesagt bekommt, was sie nutzen soll. Da die Daten dann aber im Rohformat vorliegen müssen und das im kompletten Umfang, müßten wir für GPUs Speichermengen vorsehen, dass diese nicht mehr feierlich sind.

Aktuell bekommt die GPU nur das in den RAM geladen, was sie auch wirklich "wissen" muß, dies wird von der CPU bereitgestellt.

Sprich, dein Vorschlag ist schlicht weg nicht sinnvoll, denn wenn es nur darum ginge Daten zu schaufeln, dann könnte man das schon heute machen, denn beide Sachen sind IO Geräte und lassen sich, über den Umweg RAM, mit DMA mit Daten füttern und das ginge auch schon jetzt reichlich schnell.
Es hat schon einen Grund, warum bei Games die CPU so ausgelastet wird, das sind eben überwiegend Rechenaufgaben die im Zusammenhang mit der Aufbereitung der GPU Daten zusammenhängen.
 
Zuletzt bearbeitet:
Erstmal Danke für diese ausführliche und leichtverständliche Antwort.

Also nur damit ich das jetzt richtig verstanden habe.

1. Memorymapped und I/O Mapped geht beides immer über den Arbeitsspeicher?
Also Daten werden von I/O 1 Eingelesen, werden ins Ram geschrieben und von I/O 2 ausgelesen vom Arbeitsspeicher. Der Unterschied ist nur, das ich die I/Os direkt ansprechen kann ohne Speicher zu reservieren beim I/O mapping. Trotzdem werden die Informationen immer im Arbeitsspeicher zwischengespeichert. Ich hatte nämlich gelesen, das I/O mapping den Arbeitsspeicher komplett überspringen kann und so die I/Os direkt miteinander Datentauschen können.

2. DMA Macht also auch nur bei HDD´s, CD/DVD´s und externen USB Quellen Sinn.
Unterstützt dann DMA I/O und MemoryMapping?

Zur Grafikkarte, ich dachte immer das ein JPEG oder eine 3ds Datei schon aufbereit ist für die Grafikkarte, und nicht das die CPU das noch tun muss.
 
Zuletzt bearbeitet:
Nein, wir reden hier von Adressräumen.

Nehmen wir an, du brauchst 8bit IO Adressen und 32bit Memoryadressen.

Dann hast du bei memory mapped das Problem, dass du einen einzigen Adressraum hast, damit geht einher, dass du also 33bit(oder gar 40bit) als ein Adresseraum bereitstellen mußt.
Der Untere meinetwegen IO und der Obere Mem.
Jetzt müssen also neben der CPU auch die Programme in der Lage sein mit diesen Größen umzugehen.

port mapped geht halt hin und nutzt 2 getrennte Räume, 1x 8bit und 1x 32bit, sprich, egal was passiert, die CPU und das Programm müssen maximal 32bit Adressen verarbeiten, das ist einiges einfacher, dafür muß man halt aufpassen wo man gerade rumspielt.
Man hat dann 2 Sätze Adressleitungen, 1x IO Adressleitungnen und 1x MemAdressleitungen, sprich völlig losgelöst, daher auch port mapped, da die Adressen an Ports gemapped werden.

Das "direkte" Verbinden von IO Geräten geht mit beiden Varianten, ist aber sehr umständlich. Dazu muß die CPU vom IO immer häppchenweise lesen, das in die Register schieben, und anschließend, ohne Berechnung direkt auf ein weiteres IO Gerät schreiben. Sprich, es werden keine Daten verarbeitet, lediglich hier gelesen und da geschreiben. Das ist nicht sinnvoll, denn es soll ja in der Regel was mit den Daten passieren.

Ich habe doch geschrieben wo DMA Sinn macht...

DMA hat nichts mit port mapped oder memery mapped zu tun, bis auf den Fakt, dass es 3 unterschiedliche Möglichkeiten sind Daten zu schieben.

Es gibt keine Daten die direkt an ein IO gesendet werden können, diese müssen in irgendeiner Form immer vorbereitet werden.

Eine GPU ist ja auch ein klein wenig mehr als nur nen Anzeigegerät, da laufen ja selber noch gewissen Berechnungen ab.

Rechnerarchitektur ist ein sehr komplexes Thema, da sollte man sich mal das ein oder andere Fachbuch schnappen und sich tief einlesen. Es gibt dazu nicht umsonst unzählige Studiengänge.
 
Zuletzt bearbeitet:
Ich merke schon. Ich muss das halt nur ein wenig wissen, da ich gerade ne Umschulung zum FIAE mache, und da wollen die sowas halt wissen. Nicht so Detailiert, aber es ist besser ich verstehe einmal die Zusammenhänge, dann kann ich es immer wieder herleiten, anstelle es stupide auswendig zu lernen.

Und der wo das erklärt, der blickt da selber nicht ganz durch ^^
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh