Frage zu Writeback im Cache

tobiasp
Mausschubser
Mausschubser
Beiträge: 70
Registriert: 5. Okt 2008 23:08

Frage zu Writeback im Cache

Beitrag von tobiasp »

Hey,

beim Durchblättern der Folien ist mir folgende Frage gekommen:

Angenommen man greift auf eine Hauptspeicheradresse X zu und diese befindet sich noch nicht im Cache. Also wird sie in den Cache geladen. Jetzt ändert man was am Inhalt dieser Adresse und der Cache hat ne Writeback-Strategie, ändert also nur bei sich was und setzt sein Dirtybit. In der Zwischenzeit passiert es, dass im Hauptspeicher die Seite, in der Adresse X liegt, durch eine andere Seite Y ersetzt wird. Nun greift mein Programm auf Adresse Z zu, was im Cache zu einer Ersetzung von Adresse X führt. Diese müsste also jetzt zurück in den Hauptspeicher geschrieben werden, aber die Seite ist ja nicht mehr die richtige.

WIe wird dieses Problem normalerweise gelöst? Eine naheliegende Möglichkeit ist ja, dass sich Änderungen in den oberen Speicherebenen ggf bis ganz nach unten durchziehen, also beim Ersetzen der Seite im Hauptspeicher auch grad geschaut wird, ob der Cache davon betroffen ist. Funktioniert das in der Praxis auch so?

Grüße,
Tobi

robert.n
Nerd
Nerd
Beiträge: 673
Registriert: 29. Sep 2008 19:17

Re: Frage zu Writeback im Cache

Beitrag von robert.n »

In der Beschreibung dieses Szenarios kommt es so rüber, als würde das Betriebssystem (OS) die neue Seite einfach in den Hauptspeicher "zaubern".
In Wahrheit muss das OS natürlich ebenfalls entsprechende Maschinenbefehle verwenden, um die neuen Daten in diese Seite zu schreiben (wie soll es das OS sonst machen?). Das läuft dann also ebenso über die Speicherhierarchie und das Problem erübrigt sich (weil der Cache das dann natürlich mitkriegt).

tobiasp
Mausschubser
Mausschubser
Beiträge: 70
Registriert: 5. Okt 2008 23:08

Re: Frage zu Writeback im Cache

Beitrag von tobiasp »

Aber selbst dann hätte man doch keine Garantie, dass der Cache danach in einem konsistenten Zustand ist!? Das OS selbst hat ja keine Kontrolle über die einzelnen Blöcke im Cache und müsste sich darauf verlassen, dass allein schon durch die Masse an Befehlen irgendwie der ganze Cache mal runderneuert wird.

Man könnte das Problem ja auch auf ner anderen Ebene sehen. Im On-Chip Cache stehen Daten ausm L2 Cache, im L2 Cache wird der Block ersetzt, der teilweise im OnChip-Cache noch bearbeitet wird und danach entschließt sich der OnChip-Cache mal zurückzuschreiben. Da ist keine große OS-Zauberei am Werk, sondern nur Hardware Controller, die wohl kaum einen Umweg über die CPU nehmen ?! Bzw ist das ja ein generelles Problem von Cache-Ansätzen, wenn oben was geändert wird, was unten noch im Cache steht. In den Folien wird ja nur das entgegengesetzte Problem behandelt.

robert.n
Nerd
Nerd
Beiträge: 673
Registriert: 29. Sep 2008 19:17

Re: Frage zu Writeback im Cache

Beitrag von robert.n »

Ich verstehe gerade nicht so recht, wo es eigentlich hakt.

Was ich in meinem letzten Post geschrieben habe, bezog sich vor allem auf diese Aussage:
tobiasp hat geschrieben:In der Zwischenzeit passiert es, dass im Hauptspeicher die Seite, in der Adresse X liegt, durch eine andere Seite Y ersetzt wird.

Wenn diese Seite X' ersetzt wird durch eine neue Seite Y, dann heißt das nichts anderes, als dass das OS jedes Wort in dieser Seite X durch ein neues Wort aus der Seite Y ersetzt. Und wie macht es das? Mit einer Mischung aus load word (zum Auslagern der Seite X') und store word (zum Einlagern der Seite Y).
Diese Speicherzugriffe laufen genauso über den Cache wie alle anderen Zugriffe auch (und können folglich ggf. schon vom Level1- oder Level2-Cache beantwortet werden (betrifft natürlich jetzt nur die load-befehle)). Und daher bin ich der Meinung, dass die Cachezeile für die Hauptspeicheraddresse X bereits beim Einlagern der Seite Y berücksichtigt wird (die Cachezeile für Addresse X wird dann ziemlich sicher einen anderen Wert bekommen).

Dabei wird nämlich irgendwann ein store word auf die Addresse X durchgeführt - und spätestens an dieser Stelle wird die entsprechende Cachezeile aktualisiert werden.

Was jetzt nicht ganz so gut rüberkam: Natürlich werden meist größere Blöcke gecached, nicht nur einzelne Worte.


//EDIT: Habe jetzt das Problem verstanden... :oops:
Zuletzt geändert von robert.n am 20. Mär 2010 22:42, insgesamt 3-mal geändert.

Jonathan
Mausschubser
Mausschubser
Beiträge: 47
Registriert: 10. Okt 2008 13:37

Re: Frage zu Writeback im Cache

Beitrag von Jonathan »

Das Problem lässt sich noch einfacher konstruieren.
Angenommen das Programm verwendet eine dynamisch angeforderte Seite X und durch den write-back Cache steht nun noch eine Schreiboperation auf X aus.
Wenn das Programm den angeforderten Speicher auf X nicht mehr braucht, deallokiert es die Seite, d.h. das Betriebssystem betrachtet den Inhalt nicht mehr, sondern entfernt einfach den entsprechenden Eintrag aus der Pagetable, d.h. ein Zugriff auf die ehemalige Adresse von X würde nun einen Segmentation Fault verursachen.

Für solche Fälle gibt es spezielle Instruktionen um den Cache zu steuern. Beispielsweise wäre auf x86 das für diesen speziellen Fall WBINVD geeignet ( http://en.wikipedia.org/wiki/X86_instru ... with_80486 ). Ich vermute es ist Aufgabe des Betriebssystems in den Syscalls zur Speicherverwaltung die Caches entsprechend zu leeren.

Antworten

Zurück zu „Archiv“