Mein Verständnis ist, dass der Hauptunterschied zwischen den beiden Methoden darin besteht, dass bei der Methode "Durchschreiben" Daten sofort über den Cache in den Hauptspeicher geschrieben werden, während bei "Zurückschreiben" Daten in einer "späteren Zeit" geschrieben werden.
Wir müssen noch in "letzter Zeit" auf die Erinnerung warten. Was ist der Vorteil von "Durchschreiben"?
caching
cpu-architecture
cpu-cache
Naftaly
quelle
quelle
write back
hat eine bessere Leistung?write back
hat eine bessere Leistung, da das Schreiben in den Hauptspeicher viel langsamer ist als das Schreiben in den CPU-Cache, und die Daten währenddessen möglicherweise kurz sind (Mittel können sich früher wieder ändern und die alte Version muss nicht in den Speicher gestellt werden). Es ist komplex, aber ausgefeilter. Die meisten Speicher in modernen CPUs verwenden diese Richtlinie.Antworten:
Der Vorteil des Durchschreibens in den Hauptspeicher besteht darin, dass das Design des Computersystems vereinfacht wird. Beim Durchschreiben verfügt der Hauptspeicher immer über eine aktuelle Kopie der Zeile. Wenn also ein Lesevorgang abgeschlossen ist, kann der Hauptspeicher immer mit den angeforderten Daten antworten.
Wenn das Zurückschreiben verwendet wird, befinden sich die aktuellen Daten manchmal in einem Prozessor-Cache und manchmal im Hauptspeicher. Befinden sich die Daten in einem Prozessor-Cache, muss dieser Prozessor verhindern, dass der Hauptspeicher auf die Leseanforderung antwortet, da der Hauptspeicher möglicherweise eine veraltete Kopie der Daten enthält. Dies ist komplizierter als das Durchschreiben.
Außerdem kann das Durchschreiben das Cache-Kohärenzprotokoll vereinfachen, da der Status " Ändern" nicht erforderlich ist . Die Modify Zustand Aufzeichnungen , dass der Cache muss die Cache - Zeile zurückschreiben , bevor sie ungültig oder evicts die Linie. Beim Durchschreiben kann eine Cache-Zeile immer ungültig gemacht werden, ohne zurückzuschreiben, da der Speicher bereits über eine aktuelle Kopie der Zeile verfügt.
Eine weitere Sache: Bei einer Software mit Rückschreibarchitektur, die in speicherabgebildete E / A-Register schreibt, müssen zusätzliche Schritte unternommen werden, um sicherzustellen, dass Schreibvorgänge sofort aus dem Cache gesendet werden. Andernfalls sind Schreibvorgänge außerhalb des Kerns erst sichtbar, wenn die Zeile von einem anderen Prozessor gelesen oder die Zeile entfernt wurde.
quelle
Schauen wir uns das anhand eines Beispiels an. Angenommen, wir haben einen direkt zugeordneten Cache und die Rückschreibrichtlinie wird verwendet. Wir haben also ein gültiges Bit, ein Dirty-Bit, ein Tag und ein Datenfeld in einer Cache-Zeile. Angenommen, wir haben eine Operation: Schreiben Sie A (wobei A der ersten Zeile des Caches zugeordnet ist).
Was passiert ist, dass die Daten (A) vom Prozessor in die erste Zeile des Caches geschrieben werden. Das gültige Bit und die Tag-Bits werden gesetzt. Das Dirty-Bit wird auf 1 gesetzt.
Ein schmutziges Bit zeigt einfach an, dass die Cache-Zeile jemals geschrieben wurde, seit sie zuletzt in den Cache gebracht wurde!
Angenommen, eine andere Operation wird ausgeführt: E lesen (wobei E auch der ersten Cache-Zeile zugeordnet ist)
Da wir einen direkt zugeordneten Cache haben, kann die erste Zeile einfach durch den E-Block ersetzt werden, der aus dem Speicher abgerufen wird. Da der zuletzt in die Zeile geschriebene Block (Block A) noch nicht in den Speicher geschrieben wurde (angezeigt durch das Dirty-Bit), gibt der Cache-Controller zuerst ein Zurückschreiben in den Speicher aus, um den Block A dann in den Speicher zu übertragen Es ersetzt die Zeile durch Block E, indem eine Leseoperation an den Speicher ausgegeben wird. Dirty Bit ist jetzt auf 0 gesetzt.
Die Rückschreibrichtlinie garantiert also nicht, dass der Block im Speicher und in der zugehörigen Cache-Zeile identisch ist. Wenn jedoch die Leitung ersetzt werden soll, wird zunächst ein Rückschreiben durchgeführt.
Eine Write-Through-Richtlinie ist genau das Gegenteil. Demnach hat der Speicher immer aktuelle Daten. Das heißt, wenn der Cache-Block geschrieben wird, wird auch der Speicher entsprechend geschrieben. (keine Verwendung von schmutzigen Bits)
quelle
Vielleicht kann dieser Artikel Ihnen helfen, hier zu verlinken
Durchschreiben: Das Schreiben erfolgt synchron sowohl in den Cache als auch in den Sicherungsspeicher.
Rückschreiben (oder Zurückschreiben): Das Schreiben erfolgt nur in den Cache. Ein geänderter Cache-Block wird unmittelbar vor dem Ersetzen in den Speicher zurückgeschrieben.
Durchschreiben: Wenn Daten aktualisiert werden, werden sie sowohl in den Cache als auch in den Back-End-Speicher geschrieben. Dieser Modus ist einfach zu bedienen, aber beim Schreiben von Daten langsam, da Daten sowohl in den Cache als auch in den Speicher geschrieben werden müssen.
Rückschreiben: Wenn Daten aktualisiert werden, werden sie nur in den Cache geschrieben. Die geänderten Daten werden nur dann in den Back-End-Speicher geschrieben, wenn Daten aus dem Cache entfernt werden. Dieser Modus hat eine schnelle Datenschreibgeschwindigkeit, aber Daten gehen verloren, wenn ein Stromausfall auftritt, bevor die aktualisierten Daten in den Speicher geschrieben werden.
quelle
Write-Back und Write-Through - Richtlinien beschreiben , wenn ein Schreibtreffer auftritt, das heißt , wenn der Cache die angeforderten Informationen hat. In diesen Beispielen nehmen wir an, dass ein einzelner Prozessor mit einem Cache in den Hauptspeicher schreibt.
Durchschreiben: Die Informationen werden in den Cache und den Speicher geschrieben, und der Schreibvorgang wird beendet, wenn beide abgeschlossen sind. Dies hat den Vorteil, dass es einfacher zu implementieren ist und der Hauptspeicher immer konsistent (synchron) mit dem Cache ist (für den Uniprozessor-Fall - wenn ein anderes Gerät den Hauptspeicher ändert, reicht diese Richtlinie nicht aus) und ein Lesefehler führt niemals zu Schreibvorgängen in den Hauptspeicher. Der offensichtliche Nachteil ist, dass jeder Schreibtreffer zwei Schreibvorgänge ausführen muss, von denen einer auf einen langsameren Hauptspeicher zugreift.
Rückschreiben: Die Informationen werden in einen Block im Cache geschrieben. Der geänderte Cache-Block wird nur in den Speicher geschrieben, wenn er ersetzt wird (im Endeffekt ein verzögertes Schreiben ). Ein spezielles Bit für jeden Cache-Block, das Dirty-Bit , markiert, ob der Cache-Block im Cache geändert wurde oder nicht. Wenn das Dirty-Bit nicht gesetzt ist, ist der Cache-Block "sauber" und ein Schreibfehler muss den Block nicht in den Speicher schreiben.
Der Vorteil besteht darin, dass Schreibvorgänge mit der Geschwindigkeit des Caches ausgeführt werden können. Wenn innerhalb desselben Blocks geschrieben wird, ist nur ein Schreibvorgang in den Hauptspeicher erforderlich (wenn der vorherige Block ersetzt wird). Die Nachteile sind, dass dieses Protokoll schwieriger zu implementieren ist, der Hauptspeicher nicht konsistent (nicht synchron) mit dem Cache sein kann und Lesevorgänge, die zum Ersetzen führen, zu Schreibvorgängen von verschmutzten Blöcken in den Hauptspeicher führen können.
Die Richtlinien für einen Schreibfehler sind in meinem ersten Link aufgeführt.
Diese Protokolle kümmern sich nicht um Fälle mit mehreren Prozessoren und mehreren Caches, wie dies bei modernen Prozessoren üblich ist. Hierzu sind kompliziertere Cache-Kohärenzmechanismen erforderlich. Durchschreibcaches haben einfachere Protokolle, da ein Schreibvorgang in den Cache sofort im Speicher wiedergegeben wird.
Gute Ressourcen:
quelle
Das Zurückschreiben ist komplexer und erfordert ein kompliziertes Cache Coherence Protocol (MOESI), das sich jedoch lohnt, da es das System schnell und effizient macht.
Der einzige Vorteil von Write-Through besteht darin, dass die Implementierung extrem einfach ist und kein kompliziertes Cache-Kohärenzprotokoll erforderlich ist.
quelle