Durch die Sicherstellung von Cache-Kohärenz wird bei Mehrprozessorsystemen mit mehreren CPU-Caches verhindert, dass die einzelnen Caches für die gleiche Speicheradresse unterschiedliche (inkonsistente) Daten zurückliefern.
Eine temporäre Inkonsistenz zwischen Speicher und den Caches ist zulässig, sofern diese spätestens bei lesenden Zugriffen identifizert und behoben wird. Inkonsistenzen werden z. B. durch das Rückschreibeverfahren (Write-Back) erzeugt, das im Gegensatz zu einem Durchschreibeverfahren (Write-Through) beim Schreiben in den Cache-Speicher nicht sofort den Hauptspeicher aktualisiert. Vergleiche dazu Cache-Konsistenz.
Ein Cache-Kohärenz-Protokoll hat die Aufgabe, den Status eines gecachten Speicherblocks zu verfolgen. Im Wesentlichen gibt es zwei technische Grundlagen, auf denen ein solches Protokoll impementiert werden kann[1]:
Am häufigsten - sowohl bei verzeichnis- als auch snoopingbasiert - wird ein Write-Back-Invalidierungs-Protokoll (write-invalidate-protocol) eingesetzt, z. B. das Modified-Shared-Invalid Protokoll (MSI) bzw. dessen Erweiterungen MESI und MOESI. Alternativ dazu gibt es Write-Back-Update-Protokolle (vgl. Bus Snarfing), die allerdings zu einem erhöhten Busverkehr führen.
Die Wahl zwischen verzeichnis- und snoopingbasiert hängt u. a. auch von der Anzahl der beteiligten Prozessoren (Cache Controller) ab. Spätestens ab 64 Prozessoren müssen üblicherweise verzeichnisbasierte Protokolle benutzt, da die Bandbreite des Busses nicht ausreichend skaliert. Bei kleineren Installationen ist der snoopingbasierte Ansatz aufgrund der fehlenden zentralen Instanz etwas performanter.[2]
Bei Multiprozessorinstallation mit verteilten Speicher (Distributed Memory) wird üblicherweise pro Speicher ein eigenes Verzeichnis geführt, damit der Verzeichniszugriff nicht zum Flaschenhals wird.[3]