Information Technology Reference
In-Depth Information
nämlich eine Zeile des Caches (ggf. mehrere Zeilen unterschiedlicher Caches, siehe
den Abschnitt zu Cache-Hierarchien auf Seite 147) und dem jeweiligen Bereich des
Hauptspeichers. Die sog. Datenkonsistenz oder - kohärenz zwischen Cache und
Hauptspeicher wird bei den kritischen Schreiboperationen, bezogen auf den Cache,
durch die im Folgenden beschriebenen Aktualisierungsstrategien gewährleistet.
Nicht berücksichtigt werden dabei Inkonsistenzen zwischen Cache und Hauptspei-
cher, die z.B. in Multimastersystemen auftreten können, wenn ein Prozessor einen
Cache- oder Hauptspeicherinhalt modifiziert, zu dem sich eine Kopie im Cache
eines anderen Prozessors befindet. Die zur Lösung dieser Problematik erforderli-
chen Techniken, wie z.B. die permanente Überwachung sämtlicher Hauptspeicher-
zugriffe durch alle angeschlossenen Caches ( bus snooping ) und die zur Synchroni-
sation der Cache-Inhalte erforderlichen Handshake-Protokolle (u.a. das MESI-Pro-
tokoll ) sind detailliert z.B. in [46] erläutert.
Ein in diesem Zusammenhang zu nennender Sonderfall kann auch in Einzelmaster-
systemen auftreten, falls ein für Befehle und Daten gemeinsamer Hauptspeicher ver-
wendet wird, jedoch getrennte Caches zum Einsatz kommen. Schreibzugriffe auf
den Befehlsspeicher, z.B. um ein Programm zu laden oder Befehle unmittelbar vor
ihrer Ausführung zu modifizieren (selbstmodifizierender Code), erfordern nämlich
die Synchronisation des Befehlscaches mit dem Datencache. Im Falle des Ladens
eines Programms kann dies programmiert geschehen, z.B. indem der Befehlscache
unmittelbar vor dem Programmstart vollständig geleert wird ( cache-flush ).
Bei Ausführung selbstmodifizierenden Codes ist dies jedoch nicht ratsam, da das
erforderliche (automatische) Neuladen des Caches normalerweise sehr zeitaufwen-
dig ist. Außerdem reicht es i.Allg. nicht aus, nur den Cache zu leeren, da möglicher-
weise ein Befehl modifiziert wird, dessen Bearbeitung im Fließband bereits begon-
nen wurde. Deshalb und wegen der schlechten Wartbarkeit selbstmodifizierenden
Codes wird in vielen Prozessoren dessen Ausführung verboten, allerdings auf Kos-
ten der wenigen Anwendungen, in denen sich diese Technik sinnvoll einsetzen lässt,
z.B. zur dynamischen Optimierung von Programmen oder um Programme für
Angreifer schwer rückentwickelbar zu machen.
Write-through-Verfahren. Die einfachste Aktualisierungsstrategie, um Cache und
Hauptspeicher konsistent zueinander zu halten, ist das sog. Write-through-Verfah-
ren. Befindet sich ein Eintrag im Cache, wird er bei einem Schreibzugriff zusammen
mit dem im Hauptspeicher befindlichen Original aktualisiert, so dass zu jedem Zeit-
punkt Cache- und korrespondierender Hauptspeicherinhalt konsistent zueinander
sind. Befindet sich der Eintrag, auf den schreibend zugegriffen werden soll, nicht im
Cache, sind zwei mögliche Vorgehensweisen gebräuchlich:
Beim einfachen Write-through-without-write-allocation-Verfahren wird der
Cache unverändert belassen und die Schreibaktion nur auf dem Hauptspeicher
ausgeführt. Da sich der Zugriff auf eine Speicherzelle bezieht, die nicht im
Cache zwischengespeichert ist, kommt es zu keiner Beeinträchtigung der Kon-
sistenz von Cache und Hauptspeicher.
Search WWH ::




Custom Search