> 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.