Ich habe ein gutes Buch in der Bibliothek gefunden, das mir die klare Erklärung geboten hat, die ich brauchte, und ich werde sie jetzt hier teilen, falls ein anderer Student beim Suchen über Caches auf diesen Thread stößt.
Das Buch ist "Computerarchitektur - Ein quantitativer Ansatz" 3. Auflage von Hennesy und Patterson, Seite 390.
Zunächst einmal gilt zu beachten, dass der Hauptspeicher in Blöcke für den Cache aufgeteilt ist. Wenn wir einen 64-Byte-Cache und 1 GB RAM haben, würde der RAM in 128 KB Blöcke aufgeteilt werden (1 GB RAM / 64B Cache = 128 KB Blockgröße).
Aus dem Buch:
Wo kann ein Block im Cache platziert werden?
- Wenn jeder Block nur an einer Stelle im Cache erscheinen kann, wird der Cache als direkt zugeordnet bezeichnet. Der Zielblock wird mit dieser Formel berechnet:
MOD
Angenommen, wir haben 32 Blöcke RAM und 8 Cacheblöcke.
Wenn wir beispielsweise Block 12 von RAM in den Cache speichern möchten, würde RAM-Block 12 in Cache-Block 4 gespeichert werden. Warum? Weil 12 / 8 = 1 Rest 4. Der Rest ist der Zielblock.
-
Wenn ein Block überall im Cache platziert werden kann, wird der Cache als vollständig assoziativ bezeichnet.
-
Wenn ein Block an einer eingeschränkten Anzahl von Stellen im Cache platziert werden kann, ist der Cache set assoziativ.
Im Grunde genommen ist ein Set eine Gruppe von Blöcken im Cache. Ein Block wird zunächst auf ein Set abgebildet und dann kann der Block überall im Set platziert werden.
Die Formel lautet: MOD
Angenommen, wir haben 32 Blöcke RAM und einen Cache, der in 4 Sets unterteilt ist (jedes Set mit zwei Blöcken, also insgesamt 8 Blöcken). Auf diese Weise würde Set 0 Blöcke 0 und 1 enthalten, Set 1 Blöcke 2 und 3, usw...
Wenn wir RAM-Block 12 in den Cache speichern möchten, wird der RAM-Block in Cache-Block 0 oder 1 gespeichert. Warum? Weil 12 / 4 = 3 Rest 0. Daher wird Set 0 ausgewählt und der Block kann überall in Set 0 platziert werden (also Block 0 und 1).
Jetzt werde ich zu meinem ursprünglichen Problem mit den Adressen zurückkehren.
Wie wird ein Block gefunden, wenn er sich im Cache befindet?
Jeder Blockrahmen im Cache hat eine Adresse. Nur zur Klarstellung, ein Block hat sowohl eine Adresse als auch Daten.
Die Blockadresse ist in mehrere Teile unterteilt: Tag, Index und Offset.
Der Tag wird verwendet, um den Block im Cache zu finden, der Index zeigt nur das Set an, in dem sich der Block befindet (was ziemlich überflüssig ist) und der Offset wird verwendet, um die Daten auszuwählen.
Mit "Daten auswählen" meine ich, dass in einem Cacheblock offensichtlich mehr als eine Speicherstelle vorhanden ist, der Offset wird verwendet, um zwischen ihnen zu wählen.
Wenn Sie sich also eine Tabelle vorstellen möchten, wären dies die Spalten:
TAG | INDEX | OFFSET | DATA 1 | DATA 2 | ... | DATA N
Der Tag würde verwendet, um den Block zu finden, der Index würde zeigen, in welchem Set sich der Block befindet, der Offset würde eines der Felder rechts davon auswählen.
Ich hoffe, dass mein Verständnis davon korrekt ist, wenn nicht, lassen Sie es mich bitte wissen.