Modified-Shared-Invalid Protokoll
# Modified-Shared-Invalid Protokoll

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:

* Modified: Diese Cache-Line wurde lokal geändert. Weitere Kopien im Hauptspeicher oder im Cache anderer Prozessoren sind ungültig.
* Shared: Ein oder mehrere Caches enthalten diesen Datenblock. Alle Caches, die im Zustand Shared sind, haben eine gültige Kopie.
* Invalid: Der Inhalt dieser Cache-Line ist veraltet oder es befindet sich noch gar kein Wert in dieser Cache-Line ("Compulsory Miss").

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:

* Bus-Read (BusRd): Das Signal wird auf den Bus gelegt, wenn ein Prozessor das Datum bzw. den Wert eines Speicherblocks lesen will.
* Bus-Read-Exclusive (BusRdX): Signal wird auf den Bus gelegt, wenn ein Prozessor das Datum eines Speicherblocks überschreiben will.
* Flush: Dieses Signal wird erzeugt, wenn ein Prozessor alleinig (evtl. noch der Hauptspeicher) das aktuelle Datum einer Speicherzelle in seinem Cache hat und ein weiterer Prozessor versucht, auf die gleiche Adresse dieser Speicherzelle lesend oder schreibend zuzugreifen. Wenn das Signal Flush auf dem Bus erscheint, so wird ebenfalls das Datum des entsprechenden Blocks auf den Bus gelegt.

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.

