
Nehmen wir an, ich habe einen adressierbaren Speicher von 32 Bit und einen direkt zugeordneten Cache von 4 KB. Nehmen wir an, dass jeder Eintrag (jede Zeile) des Cache aus einem eindeutigen Wort (32 Bit) besteht.
Wir können daraus schließen, dass die Indexgröße 10 Bit beträgt, da 4*2^10 Bytes / 4 = 2^10 Wörter = 2^10 Zeilen.
Da es nur ein Wort pro Zeile gibt, gehe ich davon aus, dass wir kein Offset-Feld benötigen. Daher werden die Adressen des Caches folgendermaßen zerlegt:
- Bits 0 bis 9: Index
- Bits 10 bis 31: Label
Ist meine Logik irgendwie falsch?
Antwort1
Wir benötigen 2 Bits für den Offset, da ein 32-Bit-Wert 4 Bytes hat und auf jedes Byte einzeln zugegriffen werden kann und der Offset daher 0,1,2 oder 3 betragen kann.
Daher wird eine Adresse vom direkt zugeordneten Cache folgendermaßen zerlegt:
- Bits 0 bis 1: Offset
- Bits 2 bis 11: Index
- Bits 12 bis 31: Label
Antwort2
Eine Cache-Zeile ist normalerweise 64 Bytes lang, die Offset-Bits 0-6 wählen ein Byte in der Zeile aus.