Loading AI tools
Protokoll für Cache-Kohärenz Aus Wikipedia, der freien Enzyklopädie
MESI (Modified Exclusive Shared Invalid) ist ein Protokoll zur Wahrung der Cache-Kohärenz in speichergekoppelten Multiprozessorsystemen. Das MESI-Protokoll wurde zuerst von Forschern der Universität von Illinois veröffentlicht. Es wird auch oft als Illinois-Protokoll bezeichnet.
Da in speichergekoppelten Multiprozessorsystemen jeder Prozessor einen Cache besitzt, muss festgelegt werden, ob einer der Caches oder der Hauptspeicher den aktuellen Wert eines Datums enthält. Ein System heißt cache-kohärent, wenn es zu jeder Zeit garantiert den aktuellen Wert eines Datums beschaffen kann, auch wenn sich dieser in einem anderen Cache befindet.
Beim MESI-Protokoll werden jeder Cache-Line zwei Statusbits zugeordnet, durch die einer der folgenden vier Zustände beschrieben wird:
Die Übergänge zwischen diesen vier Zuständen können nun auf zwei verschiedene Arten ausgelöst werden: Entweder
Ein Prozessor kann auf eine einzelne Adresse im Speichersystem schreibend oder lesend zugreifen. Entsprechend lösen Lese- und Schreiboperationen eines Prozessors Bustransaktionen aus. Beim MESI-Protokoll gibt es folgende Bustransaktionen:
Die Lese- und Schreiboperationen sowie die dadurch direkt und indirekt erzeugten Bustransaktionen legen das Verhalten des Zustandsautomaten fest, der durch das MESI-Protokoll definiert ist (siehe Abbildung).
Angenommen sei ein Rechnersystem mit zwei Prozessoren, zwei Caches mit jeweils einer Cache-Line und gemeinsam genutztem Hauptspeicher, das das MESI Cache-Kohärenz-Protokoll anwendet.
Hauptspeicher Cache A Cache B ------------------------------------- Datum_1 - -
Nun lädt Prozessor A das Datum 1, worauf dieses im Cache gespeichert wird. Dabei signalisiert Cache A an Cache B, dass Datum 1 geladen wird. Da Cache B keinen Eintrag für Datum 1 besitzt, signalisiert dieser nichts. Cache A kann also Datum 1 als Exclusive (unmodified) markieren.
Hauptspeicher Cache A Cache B ------------------------------------- Datum_1 E Datum_1 -
Daraufhin benötigt Prozessor B auch das Datum 1 und lädt dieses. Dabei signalisiert Cache B, dass Datum 1 geladen wird. Da Cache A schon einen Eintrag für Datum 1 besitzt, signalisiert er währenddessen Shared und beide Caches markieren ihren Eintrag als Shared (unmodified).
Hauptspeicher Cache A Cache B -------------------------------------- Datum_1 S Datum_1 S Datum_1
Prozessor A hat seine Arbeiten mit Datum 1 abgeschlossen und ändert nun dessen Wert. Da Datum 1 mit Shared (unmodified) markiert ist, signalisiert Cache A beim Ändern des Eintrags Invalidate, woraufhin Cache B den Eintrag mit Invalid markiert. Cache A ändert den Wert von Datum 1 und markiert Datum 1 dann mit (exclusive) Modified, da nach dem Invalidate-Signal kein anderer Cache diesen Wert mehr vorrätig hat.
Hauptspeicher Cache A Cache B --------------------------------------- Datum_1 M Datum_1' I Datum_1
Nun möchte Prozessor B mit Datum 1 arbeiten. Er fordert also von Cache B den Wert an. Jedoch hat Cache B diesen nicht vorrätig, da ein als Invalid markierter Eintrag wie ein nicht vorhandener Eintrag behandelt wird. Cache B versucht also Datum 1 aus dem Hauptspeicher zu laden. Dabei signalisiert er an Cache A, dass er dies tun möchte. Cache A erkennt aber, dass der Wert im Hauptspeicher nicht mehr aktuell ist, da er selbst einen Eintrag mit Datum 1 und der Markierung (exclusive) Modified besitzt. Also muss Cache A verhindern, dass der falsche Wert aus dem Hauptspeicher verwendet wird. Sofort sendet er das Retry-Signal. Cache B registriert dieses und bricht den Ladevorgang ab. Um Cache A genügend Zeit zu geben, wartet Cache B für eine kurze Zeitspanne. Derweil schreibt Cache A das aktuelle Datum 1 in den Hauptspeicher und setzt danach seinen eigenen Wert auf Shared.
Hauptspeicher Cache A Cache B --------------------------------------- Datum_1' S Datum_1' I Datum_1
Nach Ende der Wartezeit möchte nun Cache B endlich auch Datum 1 haben und liest dieses vom Hauptspeicher. Cache A registriert den Lesevorgang, signalisiert Shared und beide Caches haben das aktuelle Datum 1 mit der Markierung Shared (unmodified) eingetragen.
Hauptspeicher Cache A Cache B --------------------------------------- Datum_1' S Datum_1' S Datum_1'
Eine Weiterentwicklung des MESI-Protokolls ist das MOESI-Protokoll.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.