Atomere Operationen im Speicher müssen nicht direkt im RAM ausgeführt werden, da sie solange im Cache ausgeführt werden können alle Beobachter nehmen sie als atomar wahr. Die Kohärenz des Caches zwischen den Kernen stellt sicher, dass selbst DMA-Operationen diese Atomizität berücksichtigen.
Für ausgerichtete Ladevorgänge oder Speicherungen mit bis zu 64 Bit gilt die Atomizität Dies wird „kostenlos“ erreicht, da der Vorgang innerhalb der Datenpfade des Systems, einschließlich zwischen Kernen, Speicher und PCIe, abgeschlossen ist. Dies bedeutet, dass die CPU-Hardware die Atomizität des Vorgangs garantieren kann, ohne dass zusätzliche Hardware erforderlich ist oder andere Anforderungen blockiert werden.
Ändern von Daten im Der L1-Cache reicht atomar für die Atomizität aus, da jeder andere Kern- oder DMA-Zugriff die Änderung als einzelne Operation wahrnimmt. Diese Änderung kann aufgrund einer Ausführung außerhalb der Reihenfolge später als beim ersten Speichern erfolgen.
Abgesehen von Leistungsoptimierungen, Zugriff auf Daten über Cache-Zeilengrenzen hinweg kann zu nichtatomarem Verhalten führen. Auf x86 sind ausgerichtete Zugriffe bis zu 8 Byte atomar, was bedeutet, dass ganze Cache-Zeilen (normalerweise 64 B) atomar übertragen werden, auch wenn die Datenpfade schmaler sind. Für umfassendere Zugriffe ist jedoch eine Sperre zum Schutz vor gleichzeitigem Zugriff erforderlich.
Atomere Lese-, Änderungs- und Schreibvorgänge stellen eine größere Herausforderung dar . Um die Atomizität aufrechtzuerhalten, muss der Kern die Cache-Zeile im geänderten Zustand halten und externe Änderungen blockieren, während der Vorgang ausgeführt wird. Für nicht ausgerichtete Vorgänge ist möglicherweise eine Bussperre erforderlich, um sicherzustellen, dass andere Kerne die Änderungen als atomar wahrnehmen.
Das obige ist der detaillierte Inhalt vonWie wird die Atomarität von Lasten und Speichern auf x86-Architekturen garantiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!