Caches < Technische Inform. < Praktische Inform. < Hochschule < Informatik < Vorhilfe
|
Aufgabe | Ermitteln Sie für die folgenden Zugriffe, ob es sich um Hits oder Misses handelt. Tragen Sie in die untere Tabelle jeweils ein, wie sich der Cacheinhalt verändert - entscheiden Sie dabei im Falle einer Verdrängung nach
der LRU Strategie. |
Hallo:)
ich verstehe nicht wie man auf die Musterlösung im Anhang kommt.
[Dateianhang nicht öffentlich]
Ich habe folgende Werte gegeben:
16 Bit Adressgröße
128 Byte Blockgröße
2KByte Cachegröße
Ich habe folgende Werte berechnet:
Offset: 7 Bit
Index: 3 Bit
Tag: 6 Bit
16 Cachelines
8 Sets
Es handelt sich hierbei um einen zweifach satzassoziativen Cache.
Ich weiß das ich Adresse%(Adressbits/2) rechnen muss, um herauszufinden wo die Adresse steht.
Ich bin voll am verzweifeln, hoffe es kann mir jemand weiter helfen.
Vielen Dank im Voraus.
LG Diana
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Dateianhänge: Anhang Nr. 1 (Typ: JPG) [nicht öffentlich]
|
|
|
|
Hallo Diana,
> Ich weiß das ich Adresse%(Adressbits/2) rechnen muss, um
> herauszufinden wo die Adresse steht.
ich weiß nicht, ob ich Dein Problem richtig verstanden habe, aber um zu schauen, wie man das macht, nimmst Du einfach z.B. den ersten Zugriff 0x051A. Den schaust Du Dir binär an:
10100011010
Nun weißt Du, dass jede Adresse aus:
Tag-Index-Offset
besteht.
Wenn Du jetzt diese Einteilung auf die binäre Adresse anwendest (denn Du weißt ja, wie lang jeder einzelne Teil ist), dann hast Du es schon fast:
Mit dem Indexteil findest Du den Satz des satzassoziierten Cache-Speicher.
Der Rest sollte dann auch klar sein, oder?
Viele Grüße
Anna
|
|
|
|
|
Danke für die Antwort:)
Aber ich verstehe trotzdem noch nicht wie ich vorgehen soll.
Die Adresse 0x051A hat die Binärdarstellung 10100011010. Diese wird in
Tag-Index-Offset aufgeteilt:
[mm] \underbrace{000001}_{Tag} \underbrace{010}_{Index} \underbrace{ 0011010}_{Offset}
[/mm]
[mm] \Rightarrow [/mm] Index = 2
[mm] \Rightarrow [/mm] Tag = 0x1
Aber woher weiß ich, dass ich in der Spalte Daten bei 0x0500 anfange und bei 0x057f aufhöre?
Ich habe ja einen Offset von 0011010=1A. Muss ich dann 051A-1A = 0500 rechnen? Wenn ich aber dann 051A+1A rechne bekomme ich 0534 raus, aber es muss 057F sein.
Wenn ich herausfinden will, ob es sich bei einer Adresse um ein Hit handelt, muss doch der Tag der Adresse mit einem Tag im Cache übereinstimmen und zusätzlich muss das Valid Bit 1 sein.
Hab ich richtig verstanden, dass das Valid Bit immer 1 ist, sobald etwas im Cache drin steht, und falls es leer ist es immer 0 ist?
LG Diana
|
|
|
|
|
Hallo Diana,
> Die Adresse 0x051A hat die Binärdarstellung 10100011010.
> Diese wird in
> Tag-Index-Offset aufgeteilt:
>
> [mm]\underbrace{000001}_{Tag} \underbrace{010}_{Index} \underbrace{ 0011010}_{Offset}[/mm]
>
>
> [mm]\Rightarrow[/mm] Index = 2
> [mm]\Rightarrow[/mm] Tag = 0x1
Genau
> Aber woher weiß ich, dass ich in der Spalte Daten bei
> 0x0500 anfange und bei 0x057f aufhöre?
>
> Ich habe ja einen Offset von 0011010=1A. Muss ich dann
> 051A-1A = 0500 rechnen?
> Wenn ich aber dann 051A+1A rechne
> bekomme ich 0534 raus, aber es muss 057F sein.
Wieso willst Du denn +1A rechnen? Du hast doch einen Offset von 7 Bit = 7F,
also addierst Du: 0500 + 7F = 057F
> Wenn ich herausfinden will, ob es sich bei einer Adresse um
> ein Hit handelt, muss doch der Tag der Adresse mit einem
> Tag im Cache übereinstimmen und zusätzlich muss das Valid
> Bit 1 sein.
Ja, das Valid Bit zeigt an, ob die Cache-Zeile gültig belegt ist.
> Hab ich richtig verstanden, dass das Valid Bit immer 1 ist,
> sobald etwas im Cache drin steht,
Nein, so kann man das nicht sagen mit IMMER. Wird zum Beispiel im Hauptspeicher das Datum geändert, dann wird im Cache dieses auf 0 gesetzt - um eben somit klar zu machen, dass das Datum im Cache nicht mehr aktuell ist.
> und falls es leer ist es
> immer 0 ist?
Ja, falls ein Cache leer ist, dann ist ein Valid Bit sinnlos und ist dementsprechend auch nicht gesetzt.
Viele Grüße
Anna
|
|
|
|