DMA: Verständnisfrage

Gast #673448
Lesenswert?

Hallo

Bei DMA werden ja z.B. die Daten von der Preipherie direkt zum Speicher 
transferiert, ohne dass die CPU belastet wird.

Frage 1)
Da die CPU während des DMA-Transfer vom Adress- und Datenbus getrennt 
ist, kann sie ja eh nur Däumchen drehen?

Falls nicht, Frage 2)
Wenn die CPU während eines DMA-Transfer zufällig die selbe 
Speicheradresse lesen möchte, welche durch DMA gerade beschrieben wird, 
was passiert dann genau? Wird die CPU warten oder wird sie Mist lesen?
Gast #673468
Lesenswert?

Hi,

soweit ich mich erinnern kann (länger her und plattformabhängig) greift 
der DMA-Controller "phasenverschoben" auf den RAM zu, so kommt er sich 
nicht mit der CPU ins Gehege.
Nachdem die CPU bzw. Dein Code den DMA-Transfer initiiert bist auch Du 
für die Datenkonsistenz verantwortlich. Der Controller schaufelt nur 
dumm die Daten von Peripherie <=> RAM.
Gast #673472
Lesenswert?

> Da die CPU während des DMA-Transfer vom Adress- und Datenbus getrennt
> ist, kann sie ja eh nur Däumchen drehen?

Nicht unbedingt. Die CPU hat ja meistens auch einen Cache. Solange sie 
nicht auf Code oder Daten zugreifen muß, die nicht im Cache liegen oder 
auf Peripherie, kann sie währenddessen weiterarbeiten.

> Wenn die CPU während eines DMA-Transfer zufällig die selbe
> Speicheradresse lesen möchte, welche durch DMA gerade beschrieben wird,
> was passiert dann genau?

"zufällig" wird sie das eher nicht tun, denn die CPU greift ja nicht 
einfach mal so auf irgendwelche Speicherstellen zu. Sie führt die 
Zugriffe aus, die im Programm stehen, und da mußt du dann selbst dafür 
sorgen, daß es hier keine Konflikte gibt. Das kann z.B. durch 
double-Buffering geschehen oder durch einen Ringpuffer, der immer nur 
soweit gelesen wird, wie die Hardware schon geschrieben hat.

> Wird die CPU warten oder wird sie Mist lesen?

Warten muß sie eh, weil sie nicht gleichzeitig mit dem DMA-Controller 
zugreifen kann.
Was nachher rauskommt, ist dann aber im Prinzip trotzdem Zufall, je 
nachdem, ob die CPU den Zugriff kurz vor oder kurz nach dem 
DMA-Controller durchführt.
Gast #673681
Lesenswert?

Mit "zufällig" meinte ich bezogen auf die Zeit, falls nämlich die 
Synchronisation schief laufen würde.

Die CPU liest die Daten entweder vor oder nach dem DMA-Zugriff. Sie 
bekommt also entweder die alten oder die neuen Daten.
Daher kann ich davon ausgehen, dass die gelesenen Daten keinen 
"internen" Müll enthalten.
#675130
Lesenswert?

Es gibt ja nicht nur den tristate Adress- und Datenbus sondern auch noch 
den Controlbus. Die cpu übergibt dem DMA-Controller die Parameter 
woraufhin der über controlbus einen Busrequest anfordert und damit alle 
auffordert sich vom adress/datenbus zu verziehen. Sind alle weg, erhält 
der DMA einen busgranted und darf loslegen. Über den controlbus wird 
auch zurück gemeldet wenn der dma fertig ist.
Das war es in ganz kurz. Check doch mal arbitration oder vme-bus.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren