Adresse im Cache berechnen?

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;

RedDevil1982 
Fragesteller
 07.06.2023, 12:07

Cacheadresse = Speicheradresse modulo Anzahl Cacheeinträge

FACD3A6A modulo 1000 = A6A

Warum 1000? 4096 Einträge sind in Hex 1000

0
RedDevil1982 
Fragesteller
 07.06.2023, 12:34

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?

0
Destranix  07.06.2023, 14:25
@RedDevil1982

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.

0
RedDevil1982 
Fragesteller
 07.06.2023, 18:41
@Destranix

Vielleicht ne dumme Frage. Aber was meinst du hier mit Mapping?

0
RedDevil1982 
Fragesteller
 07.06.2023, 19:47
@Destranix

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?

"

0
Destranix  07.06.2023, 19:50
@RedDevil1982
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.

0
RedDevil1982 
Fragesteller
 08.06.2023, 10:25
@Destranix

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?

0
Destranix  08.06.2023, 15:21
@RedDevil1982
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.

1
RedDevil1982 
Fragesteller
 08.06.2023, 21:19
@Destranix

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.

0
Destranix  09.06.2023, 06:58
@RedDevil1982

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.

0