<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=MOESI</id>
	<title>MOESI - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=MOESI"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=MOESI&amp;action=history"/>
	<updated>2026-06-04T11:07:28Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=MOESI&amp;diff=714901&amp;oldid=prev</id>
		<title>imported&gt;Aka: Tippfehler entfernt</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=MOESI&amp;diff=714901&amp;oldid=prev"/>
		<updated>2021-02-28T09:27:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Benutzer:Aka/Tippfehler_entfernt&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Benutzer:Aka/Tippfehler entfernt (Seite nicht vorhanden)&quot;&gt;Tippfehler entfernt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;MOESI&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;M&amp;#039;&amp;#039;&amp;#039;odified, &amp;#039;&amp;#039;&amp;#039;O&amp;#039;&amp;#039;&amp;#039;wned, &amp;#039;&amp;#039;&amp;#039;E&amp;#039;&amp;#039;&amp;#039;xclusive, &amp;#039;&amp;#039;&amp;#039;S&amp;#039;&amp;#039;&amp;#039;hared, &amp;#039;&amp;#039;&amp;#039;I&amp;#039;&amp;#039;&amp;#039;nvalid&amp;#039;&amp;#039;) ist ein Protokoll zur Wahrung der [[Cache-Kohärenz]] in speichergekoppelten [[Multiprozessorsystem]]en. Es umfasst alle möglichen Zustände einer [[Cache-Line]], die auch von anderen Protokollen her bekannt sind. Jede Cache-Line befindet sich in einem von fünf Zuständen (vgl.&amp;lt;ref&amp;gt;[https://www.amd.com/system/files/TechDocs/24593.pdf AMD64 Architecture Programmer&amp;#039;s Manual Vol 2 &amp;#039;System Programming&amp;#039;]&amp;lt;/ref&amp;gt;, S. 165ff):&lt;br /&gt;
&lt;br /&gt;
Das MOESI-Protokoll ist eine 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 direkt propagiert (siehe Zustand &amp;#039;&amp;#039;Owned&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
MOESI bietet keinen wesentlichen Vorteil gegenüber MESI, wenn das Verbindungsnetzwerk zwischen Prozessoren und Speichercontroller ein [[Bus (Datenverarbeitung)|Bus]] ist. Es ist hingegen bei direkten Netzwerken von Vorteil, wie zum Beispiel bei AMD-Opteron-Systemen. Das Vermeiden des Zurückschreibens von modifizierten Cache-Lines sorgt hier für die Entlastung von Verbindungsnetzwerk und Speichercontroller.&lt;br /&gt;
&lt;br /&gt;
Außerdem kann die Kommunikation zwischen zwei oder mehreren CPUs bzgl. Latenz und Übertragungsrate signifikant besser sein als zwischen CPU und Hauptspeicher. Bei [[Multicore-Prozessor|Multicore-CPUs]] mit jeweils eigenen Caches pro Core ist dies meist der Fall.&lt;br /&gt;
&lt;br /&gt;
Im Bereich der [[System on a Chip]] kann die Verwendung des zusätzlichen &amp;quot;Owned&amp;quot;-Zustandes Energie sparen, wenn hierdurch der Zugriff auf extern angebundenen Speicher entfällt. Im Falle des [[Advanced Microcontroller Bus Architecture|AMBA]]-Buses von [[Advanced RISC Machines Ltd.|ARM]] ist die benötigte Energie eines chipexternen Speicherzugriffs laut Herstellerangaben bis zu zehnmal höher als ein chipinterner Speichertransfer zwischen zwei Bus-Mastern. Der AMBA-Bus unterstützt ab Version 4 das MOESI-Protokoll.&amp;lt;ref&amp;gt; [https://www.arm.com/zh/files/pdf/CacheCoherencyWhitepaper_6June2011.pdf Introduction to AMBA® 4 ACE™] (PDF; 908&amp;amp;nbsp;kB)&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zustandsdiagramm ==&lt;br /&gt;
[[Datei:Legende MOESI.png|mini|Legende zum Zustandsdiagramm]]Zur Verbesserung der Verständlichkeit und Übersichtlichkeit wurde das Zustandsdiagramm in zwei (für aktive und passive CPUs) geteilt. Durch Automatenvereinigung lässt sich ein äquivalenter Automat erzeugen, der beide Diagramme vereint.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery class=&amp;quot;float-center&amp;quot; widths=&amp;quot;500&amp;quot; perrow=&amp;quot;2&amp;quot; heights=&amp;quot;350&amp;quot; caption=&amp;quot;Zustandsdiagramme&amp;quot;&amp;gt;&lt;br /&gt;
File:MOESI-Zustandsdiagramm für aktive CPUs.png|Zustandsdiagramm für aktive CPUs im MOESI-Protokoll&lt;br /&gt;
File:MOESI-Zustandsdiagramm für passive CPUs.png|Zustandsdiagramm für passive CPUs im MOESI-Protokoll&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bedingungen || Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| Read Hit || Treffer beim lokalen Lesen&lt;br /&gt;
|-&lt;br /&gt;
| Write Hit || Treffer beim lokalen Schreiben&lt;br /&gt;
|-&lt;br /&gt;
| Snoop Hit on Read || Treffer beim fremden Lesen&lt;br /&gt;
|-&lt;br /&gt;
| Snoop Hit on Write || Treffer beim fremden Schreiben&lt;br /&gt;
|-&lt;br /&gt;
| Read Miss || Fehltreffer beim lokalen Lesen&lt;br /&gt;
|-&lt;br /&gt;
| Write Miss || Fehltreffer beim lokalen Schreiben&lt;br /&gt;
|-&lt;br /&gt;
| shared || mit Snoop Hits in anderen Caches&lt;br /&gt;
|-&lt;br /&gt;
| not shared || ohne Snoop Hits in anderen Caches&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Zustände ==&lt;br /&gt;
=== Modified (genauer: Modified Exclusive) ===&lt;br /&gt;
Der [[Cache]] besitzt die einzige Kopie der Cache-Line und hat sie modifiziert (dirty). Wenn er die Cache-Line entfernt, muss er den Hauptspeicher aktualisieren. Wenn eine Leseanfrage von einem anderen Prozessor kommt, schickt er die Daten dieser Cache-Line an ihn und ändert seinen eigenen Zustand auf &amp;#039;&amp;#039;owned&amp;#039;&amp;#039;. Der Zustand der Cache-Line des anderen Prozessors wird auf &amp;#039;&amp;#039;shared&amp;#039;&amp;#039; gesetzt. Bei einer Schreibbenachrichtigung eines anderen Prozessors setzt er seine Cache-Line auf &amp;#039;&amp;#039;invalid&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Owned (genauer: Modified Shared) ===&lt;br /&gt;
Der Cache besitzt eine von mehreren Kopien der Cache-Line. Er hat seine Cache-Line verändert, aber noch nicht zurückgeschrieben: Im Hauptspeicher steht also ein veralteter (sprich ungültiger) Wert. Bei allen anderen Prozessoren, die diese Cache-Line haben, ist diese im Zustand &amp;#039;&amp;#039;shared&amp;#039;&amp;#039;. Der Prozessor ist dafür verantwortlich, beim Schreiben in diese Cache-Line alle anderen Caches zu aktualisieren. Sendet ein anderer Prozessor eine Leseanfrage, sendet der Cache die aktuellen Daten direkt an den Anfragenden. Bei einer Schreibbenachrichtigung eines anderen Prozessors wechselt er in den Zustand &amp;#039;&amp;#039;invalid&amp;#039;&amp;#039;. Derjenige, welcher geschrieben hat, befindet sich nun im Zustand &amp;#039;&amp;#039;modified&amp;#039;&amp;#039;. Bei allen anderen Caches, die diese Hauptspeicheradresse gecacht haben, wird der Zustand auch ungültig und somit &amp;#039;&amp;#039;invalid&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Exclusive ===&lt;br /&gt;
Der Cache besitzt die einzige Kopie der Cache-Line und hat sie nicht modifiziert (clean, unmodified). Bei einer Leseanfrage schickt er die Daten zum Anfragenden. Die Zustände beider Cache-Lines gehen dann in den Zustand Shared über. Bei einer Schreibbenachrichtigung invalidiert er die Cache-Line.&lt;br /&gt;
&lt;br /&gt;
=== Shared ===&lt;br /&gt;
Der Cache besitzt eine von mehreren aktuellen Kopien der Cache-Line. Eine Cache-Line in diesem Zustand darf nur gelesen werden.&lt;br /&gt;
&lt;br /&gt;
=== Invalid ===&lt;br /&gt;
Die Cache-Line ist ungültig. Wird sie vom Prozessor angefragt, tritt ein Cache-Miss auf, und die Daten müssen aus dem Hauptspeicher (oder einem anderen Cache) geholt werden. Dazu schickt er gleichzeitig eine Anfrage an den Speicher und an alle anderen Prozessoren. Ist die Cache-Line bereits in einem anderen Cache vorhanden und ist diese dort modifiziert (&amp;#039;&amp;#039;modified&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;owned&amp;#039;&amp;#039;), so werden die Daten von dort geliefert. Die vom Speicher kommenden Daten werden ignoriert, da diese nicht aktuell sind. War die Cache-Line in einem anderen Prozessor auf &amp;#039;&amp;#039;modified&amp;#039;&amp;#039;, so ändert sich der Zustand dort auf &amp;#039;&amp;#039;owned&amp;#039;&amp;#039;. In jedem Fall wird der Zustand der Cache-Line in diesem Cache auf &amp;#039;&amp;#039;shared&amp;#039;&amp;#039; gesetzt. Ist die Cache-Line nirgends modifiziert, so nimmt der Cache die Daten aus dem Speicher. Je nachdem, ob die anderen Prozessoren die Cache-Line in ihrem Cache haben oder nicht, wird die neue Cache-Line in den Zustand &amp;#039;&amp;#039;exclusive&amp;#039;&amp;#039; bzw. &amp;#039;&amp;#039;shared&amp;#039;&amp;#039; gesetzt. Bei einer Leseanfrage oder Schreibbenachrichtigung passiert im Zustand &amp;#039;&amp;#039;invalid&amp;#039;&amp;#039; nichts.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Modified-Shared-Invalid Protokoll|MSI]]&lt;br /&gt;
* [[MESI]]&lt;br /&gt;
* [[MOSI]]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SORTIERUNG:Moesi}}&lt;br /&gt;
[[Kategorie:Rechnerarchitektur]]&lt;br /&gt;
[[Kategorie:Abkürzung|MOESI]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Aka</name></author>
	</entry>
</feed>