Bei Modified, Shared, Invalid (MSI) handelt es sich um ein Protokoll zur Wahrung der Cache-Kohärenz auch in speichergekoppelten Multiprozessorsystemen.
Falls in solchen Systemen jeder Prozessor einen Cache besitzt, muss festgelegt werden, ob einer der Caches oder der Hauptspeicher den aktuellen Wert eines Datums enthält. Ein System, das zu jeder Zeit garantiert, den aktuellen Wert eines Datums zu beschaffen – auch wenn es sich in einem anderen Cache befindet –, heißt cache-kohärent.
Das MSI-Protokoll wird hauptsächlich bei Write-Invalidate- und Write-Back-Caches eingesetzt und basiert auf der Snooping-Technik.
Innerhalb des MSI-Protokolls wird jedem Cache-Block genau einer der Zustände Modified, Shared oder Invalid zugeordnet. Die einzelnen Zustände bedeuten dabei:
Der zentrale Ansatzpunkt zur Steuerung der Zustandswechsel des jeweiligen Cache-Blocks ist der Bus. Über diesen kommunizieren die einzelnen Caches mit dem Hauptspeicher. Jeder Cache verfügt über einen Cache-Controller, welcher z. B. bei der Anforderung eines Datums durch den Prozessor des Caches ein entsprechendes Kommando auf den Bus legt. Zusätzlich überwacht dieser auch Kommandos, die von anderen Cache-Controllern oder weiteren Komponenten (z. B. dem Controller des Hauptspeichers) auf den Bus gelegt werden. Entsprechend den eigenen und abgehörten Kommandos werden die Zustandswechsel der jeweiligen Cache-Blöcke vorgenommen. Das Prinzip der Überwachung der Transaktionen und Kommandos auf dem gemeinsamen Bus nennt man „Snooping“.

Ein Prozessor kann auf eine einzelne Adresse im Speichersystem schreibend (PrWr) oder lesend (PrRd) zugreifen. Entsprechend lösen Lese- und Schreiboperationen eines Prozessors Bustransaktionen aus. Beim MSI-Protokoll gibt es folgende Bustransaktionen:
Die Lese- und Schreiboperationen sowie die dadurch direkt und indirekt erzeugten Bustransaktionen legen das Verhalten des Zustandsautomaten fest, welcher durch das MSI-Protokoll definiert ist.
Erweiterungen des MSI-Protokolls sind die Protokolle MESI und MOESI.