Cache-Algorithmus
Vorlage:Hinweisbaustein Ein Cache-Algorithmus ist ein Algorithmus zur Steuerung eines Cache, mit dem Speicherzugriffe zwischen einer CPU und dem Arbeitsspeicher optimiert und Inkonsistenzprobleme verhindert werden sollen. Caches im weiteren Sinne werden aber auch in Software verwendet, wo die Cache-Algorithmen entsprechend gelten.
Es wird unterschieden zwischen {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) (dt. Schreibregel) und {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) (dt. Ersetzungsregel). Der Begriff Cache-Algorithmus wird im Englischen aber in der Regel nur auf {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) bezogen.
Bei der Betrachtung der Algorithmen unterscheidet man zudem zwischen {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) (angeforderte Daten liegen im Cache) und {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) (angeforderte Daten liegen nicht im Cache). Entsprechend heißen diese Situationen beim Lesen/Schreiben {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) und {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value).
Cache write policy
Die folgenden Methoden werden in der Regel in Rechnerarchitekturen mit einem Prozessor eingesetzt. Allerdings kann es hier zu Inkonsistenzen bei I/O-Operationen kommen. Der Cache-Block (auch Cacheline genannt) ist die kleinste Verwaltungseinheit innerhalb des Caches.
Durchschreibetechnik ({{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value))
Bei {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) ist normalerweise sichergestellt, dass die Daten im Cache und im dahinterliegenden Speicher (im Folgenden Hauptspeicher) gleich sind. Das wird dadurch erreicht, dass bei einem {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) die Daten sowohl in den Cache als auch in den Hauptspeicher geladen werden. Bei einem Write Miss hängt es von der {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) ab, ob die Daten neben dem Hauptspeicher auch in den Cache geladen werden.
Rückschreibetechnik ({{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value))
Bei {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) wird nicht direkt in den Hauptspeicher geschrieben, sondern dies geschieht erst, wenn der entsprechende Cache-Block ersetzt werden muss. Dies ist bei einem {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) oder bei einem {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) mit {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) (siehe {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)) der Fall.
Um zu erfassen, welche Daten mit dem Hauptspeicher übereinstimmen und welche nicht, wird das Dirty-Bit (= Daten im Hauptspeicher und Cache sind inkonsistent) gesetzt. Wenn das Dirty-Bit gesetzt ist, heißt das, dass die Daten noch nicht im Hauptspeicher stehen.
Der Abgleich mit dem Hauptspeicher erfolgt, indem mit dem Dirty-Bit markierte Cachelines individuell in den Hauptspeicher geschrieben werden. Alternativ geschieht dies durch einen FLUSH, bei dem der gesamte Cache in den Hauptspeicher geschrieben wird.
{{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) ist zwar technisch anspruchsvoller, allerdings auch schneller als {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value).
{{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)
Tritt ein {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) auf, so kommt eine {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) zum Einsatz.
{{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)
Hier gelangen die zu schreibenden Daten direkt in den Cache. Sie werden aber auch in den Hauptspeicher geschrieben. Je nach Schreibtechnik ({{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value), {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)) geschieht dies sofort oder bei Verdrängung der Cacheline.
{{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) ({{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value))
Die Daten werden nur in den Hauptspeicher geschrieben, ohne eine Cacheline zu belegen.
{{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)
Beim Lesen und beim Schreiben kommt es häufig vor, dass ein Cacheline ersetzt werden muss, weil der Cache voll ist. In diesem Fall muss die {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) – auch Cache-Algorithmus genannt – entscheiden, welche Cache-Blöcke verworfen werden und welche nicht.
Skriptfehler: Ein solches Modul „Vorlage:Siehe auch“ ist nicht vorhanden.
Multiprozessorsysteme
Bei Multiprozessorsystemen hat üblicherweise jeder Prozessor seinen eigenen Cache und greift darüber auf einen zentralen, gemeinsamen Speicher zu. Um Probleme durch Inkonsistenzen zwischen den Caches und dem Hauptspeicher zu verhindern, muss dann ein Cache-Algorithmus für Cache-Kohärenz sorgen.