MOESI
aus Wikipedia, der freien Enzyklopädie
MOESI (Modified, Owned, Exclusive, Shared, Invalid) ist ein Protokoll zur Wahrung der Cache-Kohärenz in speichergekoppelten Multiprozessorsystemen. Es umfasst alle möglichen Zustände einer Cache-Line, die auch von andere Protokollen her bekannt sind. Jeder Cache-Line befindet sich in einem von fünf Zuständen:
- Modified
- Der Cache besitzt die einzige Kopie der Cache-Line und hat sie bereits modifiziert (dirty).
- Owned
- Der Cache besitzt eine von mehreren Kopien der Cache-Line und hat als einziger das Recht sein Kopie zu modifizieren. Allerdings muss er alle Modifikationen die an der Cache-Line vornimmt per Broadcast alle andere Caches, welche ebenfalls eine Kopie der Cache-Line besitzen mitteilen.
- Exclusive
- Der Cache besitzt die einzige Kopie der Cache-Line und hat sie jedoch noch nicht modifiziert (clean, unmodified).
- Shared
- Der Cache besitzt eine von mehreren Kopien der Cache-Line und hat jedoch nicht das Recht diese Kopie zu modifizieren.
- Invalid
- Die Cache-Line ist ungültig. Wird sie angefragt muss der Cache sie neu vom Speicher laden.
Das MOESI-Protokoll ist ein komplizierte Variante des MESI-Protokolls. Es vermeidet das Zurückschreiben von modifizierten Cache-Lines, wenn andere CPUs diese lesen wollen. Stattdessen wird der aktuelle Wert bei jeder Veränderung zwischen den Caches direkte propagiert (siehe Zustand Owned).
MOESI ist von Vorteil wenn die Kommunikation zwischen zwei oder mehren CPUs bzgl. Latenz und Brandbreite signifikant besser ist als zwischen CPU und Hauptspeicher. Bei Multicore-CPUs mit jeweils eigenen L2 Caches pro Core ist dies meist der Fall.