Seite 1 von 1

Dirty Bit

Verfasst: 16. Dez 2009 17:40
von Dennis
Hallo Leute,

ich habe noch ein Verständnisproblem mit dem Dirty bit. Wegen einer anderen Klausur beginne ich erst jetzt mit dem Praktikum :roll:

Was passiert, wenn ein Dirty Bit gesetzt wurde? Also ich verstehe das so, dass wir eine schreibanweisung an einen bestimmte Cachezeile/Block geben und dort dann "Dirty" gesetzt wird, weil der dort hineingeschriebene Wert noch in den RAM/Festplatte kopiert werden muss. Wie ist das dann "in echt"? Also Hardwaremäßig? Gibt es irgendein Bauteil, welches pro takt alle Cachzeilen nach Dirtybits durchsucht, deren Wert in den RAM schreibt, und dann das Bit auf 0 setzt?

Ich frage mich das, weil mich interessiert, ob z.B. ein Dirtybit, was vor 1 bis X Zyklen gesetzt wurde, nicht dann vielleicht sich auf 0 ändern müsste - was für die Schleifen im Praktikum evtl. nützlich wäre zu wissen.

Re: Dirty Bit

Verfasst: 16. Dez 2009 17:46
von ice-breaker
Sobald ein anderer Eintrag in den Cache-Block geschrieben wird (Cache-Miss) findet ein Writeback statt ;)
Also die Daten aus dem Cachen werden erst zb in den Hauptspeicher geschrieben, wenn ein anderer Eintrag auf genau diese Position gespeichert.
Wenn es genau die gleiche Addresse wäre nur eben andere Daten, bleibt das Dirtybit auf 1 und wir schreiben die neuen Daten nur in den Cache (Cache-Hit) dadurch sparen wir uns mehrfaches Kopieren der Daten in den Hauptspeicher für den Fall, dass wir mehrmals schreibend auf die gleiche Adresse zugreifen (Schleifenzähler usw)

Re: Dirty Bit

Verfasst: 16. Dez 2009 18:02
von Dennis
Achja, danke! logisch... mal schaun ob ich mir das jetzt richtig vorstelle:


d.h. ich kann den Cache mit Write-Back (nicht write Through) als eine Art Puffer sehen, auf dem gearbeitet wird, bis ich den Eintrag aus dem Cache werfe.

z.B.

Cpu braucht Datum1 aus dem Cache -> Miss -> Datum1 wird in den Cache geladen

Cpu liest erneut Datum1 -> Hit

Cpu benutzt Datum1, rechnet irgendwas damit, möchte es abspeichern an Adresse wo Datum1 sitzt -> Cache nimmt es entgegen und speichert das, setzt das Dirty bit - weil RAM Inhalt und Cache Inhalt nun asynchron sind, die CPU aber nicht warten muss, bis das Zeug endlich im RAM/Festplatte gesichert ist.

Cpu benutzt wieder Datum1 -> Hit, es wird das modifizierte Datum1 aus dem Cache geliefert.

Cpu möchte nun Datum2 haben, welches aber in den Cacheblock von Datum1 geladen werden müsste (je nach Strategie halt) - es ergibt einen Miss, anhand des Dirtybits wird aber jetzt erkannt, dass das Zeug nicht einfach überschrieben, sondern erstmal in den RAM abgepumpt werden muss, bevor ich was neues in den Cacheblock schreiben kann. Andernfalls hätte ich die Berechnungen verloren, die die CPU auf Datum1 gemacht hat, weil sie nie im RAM/Platte angekommen wären.

*edit* also ums kurz zu sagen: Dirtybit = 0, heisst soviel wie, Inhalt im Cache = Inhalt im Ram/Platte


So ungefähr? :wink:

Re: Dirty Bit

Verfasst: 16. Dez 2009 18:28
von ice-breaker
absolut korrekt

Re: Dirty Bit

Verfasst: 16. Dez 2009 18:36
von Dennis
Danke! Das hat mir sehr geholfen. Da ich nun auch noch raus habe, dass ein 64 byte großer Cache in Hardware mehr als 64 byte umfasst... kann ich denke ich loslegen :D