Bei ARM gibt es die Instruktionen DMB (Data Memory Barrier) und DSB (Data Synchronization Barrier). Irgendwie verstehe ich nicht ganz den Unterschied. Aus den Erklärungen werde ich nicht ganz schlau: DMA - Ensure the order of observation of memory accesses, DSB - Ensure the completion of memory accesses. Kann mir jemand den Unterschied erklären?
DMB: Speicheroperationen vor DMB werden aus externer Sicht (z.B. Bus, Speicherinterface) vor Speicheroperationen nach DMB ausgeführt. Das bedeutet jedoch nicht notwendigerweise, dass die Speicheroperationen zusammen mit DMB beendet sind. DSB: Alle Speicheroperationen vor DSB sind abgeschlossen wenn dieser Befehl beendet ist und der nächste Befehl wird erst anschliessend ausgeführt. Praktisch heisst das: DMB trennt die Speicheroperationen in jene davor und jene danach, beeinflusst aber keine anderen Befehle. Beispiel: Wenn man erst einen DMA-Pufferbereich beschreibt bevor man mit einem weiteren Speicherbefehl diesen Pufferbereich zum Abschuss freigibt. DSB kann beispielsweise dann erforderlich sein, wenn man etwas an der Art ändert, wie der Prozessor auf den Speicher zugreift, denn das sollte erst dann durchgeführt werden, wenn keine Speicheroperationen mehr anstehen.
Wenn man einen Punkt braucht, an dem alle Speicheroperationen davor abgeschlossen sein müssen und nachfolgende Speicheroperationen nicht vorgezogen werden dürfen, braucht man dann beide Befehle oder nur DSB?
Anders ausgedrückt: DMB stellt eine Barriere ausschliesslich für Speicheroperationen aus externer Sicht dar, DSB hingegen ist eine Barriere für alles, einschliesslich der Befehlsausführung des Prozessors.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.