2012-04-13 10 views
1

Angenommen, die CPU ändert den Wert an Position x + 50 und spült ihn nicht zurück zum Hauptspeicher (Zurückschreiben).Cachekohärenzprobleme in einem DMA-Kontext

Währenddessen startet ein Gerät eine DMA-Leseanforderung von x bis x + 100.

In diesem Fall, wie die CPU informiert wird, um die schmutzige Cache-Zeile zu leeren?

+0

In früheren Zeiten wurde ein Teil des Speichers als nicht cachefähig markiert, bevor das Betriebssystem eine DMA-Anforderung aufbaute. Warum glauben Sie, dass das nicht passiert ist oder nicht passieren kann in dem Fall, den Sie skizziert haben? – gbulmer

+0

@gbulmer Sie meinen, dass eine DMA-Anfrage nur Speicherbereich behandelt, der nicht abspeicherbar ist? – sliter

Antwort

1

Die DMA-Schaltung arbeitet oft direkt mit dem Hauptspeicher, ohne die CPU zu involvieren (und das ist der Grundgedanke, die CPU von I/O zu befreien, was an anderer Stelle in der Hardware möglich ist und somit CPU-Zyklen spart). Sie können also tatsächlich auf cache coherency problems stoßen. Microsoft empfiehlt flushing I/O buffers when using DMA.

Aber einige Systeme unterstützen Cache-Kohärenzprotokolle zwischen CPUs und DMA-Schaltkreisen ähnlich wie zwischen CPUs in Multiprozessorsystemen. Die ultimative Antwort hängt von der tatsächlichen Hardware ab.

1

Es gibt drei Ansätze kann ich mir vorstellen:

  1. Der Speicher als un-zwischenspeicherbar markiert ist,
  2. den DMA-Controller-Koordinaten mit dem Cache-Controller,
  3. die OS garantiert dieser Wille nie passieren, z indem sichergestellt wird, dass der CPU-Teil des Prozesses nicht läuft.

Es hängt von der Hardware und den Fähigkeiten des Betriebssystems ab.

Sicherzustellen, dass der Prozess nicht läuft, ist auf einem Multitasking-Betriebssystem nicht zu merkwürdig, da DMA im Speicher eines Prozesses wahrscheinlich durch den Prozess ausgelöst wird, der einen Systemaufruf ausführt, z. ein schreiben. Der Prozess kann entschichtet und andere Prozesse ausgeführt werden, bis der DMA abgeschlossen ist.

Es kann eine zu große Einschränkung für das Warten auf ein E/A-Gerät sein, sodass der DMA-Controller möglicherweise vom Adressbereich der Prozesse in einen sekundären Puffer kopiert.

Wenn Sie einen Fall haben, in dem dies passiert ist, erläutern Sie bitte das Beispiel und die Tests, die Sie ausgeführt haben.