Adresse im Cache berechnen?
d) Wie berechne ich welcher Eintrag im Cache geändert wird?
1 Antwort
Du hast die Hexadezimaladresse
FACD3A6A
Aus dieser extrahierst di den Index (bzw. du teils die Adresse auf in Tag, Index und Byte-Offset):
1111 1010 1100 1101 0011 1010 0110 1010
1111 1010 1100 1101 | 0011 1010 0110 | 1010
Tag Index Byte-Offset
Der Index ist also
0011 1010 0110
entsprechend in Hexadezimal
3A6
entsprechend in Dezimal:
3 * 16 * 16 + 10 * 16 + 6 = 3 * 256 + 160 + 6 = 768 + 160 + 6 = 928 + 6 = 936;
Cacheadresse = Speicheradresse modulo Anzahl Cacheeinträge
FACD3A6A modulo 1000 = A6A
Warum 1000? 4096 Einträge sind in Hex 1000
3A6 ist 3*16^2 + 10 * 16 + 6 =934
entspricht 3A6
Möglich, evtl. habe ich mich verrechnet.
Cacheadresse = Speicheradresse modulo Anzahl Cacheeinträge
Damit mappst du aber das Byte-Offset mit. Das willst du beim Mapping aber ignorieren.
Vielleicht ne dumme Frage. Aber was meinst du hier mit Mapping?
Abschließende Frage dazu: In der Aufgabe d) steht ja welcher Eintrag wird im Cache verändert, falls ein Cache-Hit vorliegt...
Mir ist ehrlich gesagt nicht verständlich:
Warum wäre es hier falsch, wenn ich den Eintrag per
Cacheadresse = Speicheradresse modulo Anzahl Cacheinträge ermittle?
"Damit mappst du aber das Byte-Offset mit. Das willst du beim Mapping aber ignorieren." Was ist hier das Problem?
Mit dem Index kriege ich raus, in welcher Cachline der Eintrag bzw. der Block im Cache liegt.
Über Cacheadresse = Speicheradresse modulo Anzahl Cacheinträge ermittle ich doch jetzt den genauen Bereich wo der Block in dieser Cacheline liegt.
Oder liege ich da falsch. Sorry ich bin verwirrt.
In der Aufgabe d) steht ja, welcher Eintrag wird im Cache verändert, falls ein Cache-Hit vorliegt...
Ist hier jetzt nur die Cachline gesucht oder der genaue Eintrag wo der Block liegt?
"
Warum wäre es hier falsch, wenn ich den Eintrag per
Cacheadresse = Speicheradresse modulo Anzahl Cacheinträge ermittle?
Weil du dann das Byte-Offset am Ende mit in die Berechnung einbeziehen würdest. Das muss aber ignoriert werden.
Über Cacheadresse = Speicheradresse modulo Anzahl Cacheinträge ermittle ich doch jetzt den genauen Bereich wo der Block in dieser Cacheline liegt.
Nein. Ein Cache-Eintrag hat eine gewisse Länge. Das ignorierst du hier.
Ist hier jetzt nur die Cachline gesucht oder der genaue Eintrag wo der Block liegt?
Wie meinen? Gesucht ist die Adresse im Cache soweit ich das verstehe.
Sorry Destranix, aber ich muss nochmal nachfragen:
d) FACD3A6A du spaltest die Hex Adresse in tag, index, offset auf
Wir haben einen direct mapped cache. Gemäß der Aufgabe d) liegt ein write hit vor. Du schauts dir einfach den Index an und erschließt daraus den Eintrag, der im Cache geändert wird.
Als gerenelle Formel für eine Cacheadresse gilt:
Cacheadresse = Speicheradresse modulo Anzahl Cacheinträge
=> Damit ermittle ich an welcher Stelle (Adresse) im Cache die Speicheradresse per tag, index und offset abgelegt wird.
Zur d)
"Weil du dann das Byte-Offset am Ende mit in die Berechnung einbeziehen würdest. Das muss aber ignoriert werden."
Warum muss hier das Byte-Offset ignoriert werden, um den Eintrag zu finden, der gemäß der Aufgabe d) geändert wird?
Als gerenelle Formel für eine Cacheadresse gilt:
Cacheadresse = Speicheradresse modulo Anzahl Cacheinträge
Nein.
Warum muss hier das Byte-Offset ignoriert werden, um den Eintrag zu finden, der gemäß der Aufgabe d) geändert wird?
Da dein Cache-Eintrag eine gewisse Länge hat. Mittels des Byte-Offsets addressierst du die Bytes innerhalb des Cache-Eintrags.
Ok, d. h. in die Formel
Cacheadresse = Speicheradresse modulo Anzahl Cacheinträge, muss ich die (Speicheradresse ohne den Off-Set) modulo Anzahl Cacheinträge rechnen, dann müsste genau der Index, wo der Cache-Eintrag bzw. die Cache-Line im Cach steht. steht herauskommen.
Ja. Du müsstest quasi die Speicheradresse erst um das Byte-Offset verschieben (sodass der Index am niederwertigsten Bit beginnt), dann könntest du ein Modulo darauf anwenden um den index zu erhalten.
Hi,
Danke für deine Antwort, allerdings:
3A6 ist 3*16^2 + 10 * 16 + 6 =934
entspricht 3A6
Eigentlich müsstest du mit deiner Antwort recht haben.
Nehme ich allerdings die Formel:
Cacheadresse = Speicheradresse modulo Anzahl Cacheeinträge
und reche FACD3A6A in eine Dezimalzal um kommt
4 207 753 834 heraus, dann
modulo 4096 ist 2666, was A6A entspricht.
Was ist jetzt hier richtig?
A6A oder 3A6?