Es gibt drei Ansätze kann ich mir vorstellen:
- Der Speicher als un-zwischenspeicherbar markiert ist,
- den DMA-Controller-Koordinaten mit dem Cache-Controller,
- 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.
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
@gbulmer Sie meinen, dass eine DMA-Anfrage nur Speicherbereich behandelt, der nicht abspeicherbar ist? – sliter