# Cache Hit/Miss



## Wang (29. Jun 2010)

Hallo,

bei folgender Aufgabe stehe ich leider total auf der Strecke:







Ich stelle mir das so vor, dass ich auf der linken Seite den Speicher und auf der rechten Seite den Cache habe. Bei einem cache hit sind die Daten oder Adressen bereits im Cache vorhanden, wenn die Anfrage des Prozessors kommt bei einem cache miss sind sie im Speicher vorhanden.


Aus dem Skript werde ich leider nicht schlau (ab Seite 154, http://www.mobile.ifi.uni-muenchen.de/studium_lehre/ss10/rechnerarchitektur/skript_ra_ss2010.pdf)

Es wäre sehr nett, wenn jemand den ersten Schritt hier machen könnte, dann sollte ich die Aufgabe verstehen.

Vielen Dank.

Gruß
Wang


----------



## hemeroc (29. Jun 2010)

In deinem "Buch" auf Seite 156 ist eigentlich ein sehr ausführliches Beispiel:
(Irgendwie macht sowas doch Spaß oder gehts da vielleicht nur mir so?

Das ganze funktioniert so wie ich das gesehen Folgendermaßen:

Du fängst damit an das du nachsiehst wie groß dein speicher ist in deinem Fall 64 Blöcke und damit also 0-63 was zu einem Adressraum von 000000(decimal 0) bis 111111(decimal 63) führt also unsere 64 Blöcke.
Jetzt sehen wir uns unseren Cache an der ist 16 Blöcke groß da lässt also 0000(decimal 0) bis 1111 (decimal 15).
In welchen Cacheblock eine Adresse geladen wird bestimmen wir mit einer einfachen Modulo Aufgabe.
Anfangs ist der Cache komplett leer, damit ist jeder Zugriff ein miss, bei mir ist das durch _miss (new)_ gekennzeichnet.
Ist der Block schon beschrieben ist die Frage ob das richtige drinsteht wenn ja dann haben wir einen _hit_ und laden aus dem Cache, wenn nein dann überschreiben wir den Cache mit dem neuen Wert in meinem Fall durch ein _miss (override_) gekennzeichnet.

Das Ergebnis sieht dann so aus:
_Ich rate dir dringends das selber nochmal nachzurechnen da du erstens sonst nichts lernst und zweitens bin ich müüüüde es kann sich also der ein oder andere Fehler eingeschlichen haben ^^._


```
a)

Dezimal		Binär		Zugriff			Cacheblock (mod 16)
---------------------------------------------------------------------------
 1		000001		miss (new)		0001
 4		000100		miss (new)		0100
 8		001000		miss (new)		1000
 5		000101		miss (new)		0101
20		010100		miss (override)		0100
17		010001		miss (override)		0001
19		010011		miss (new)		0011
56		111000		miss (override)		1000
 9		001001		miss (new)		1001
11		001011		miss (new)		1011
 4		000100		miss (override)		0100
43		101011		miss (override)		1011
 5		000101		hit			0101
 6		000110		miss (new)		0110
 9		001001		hit			1001
17		010001		hit			0001

b)

Cacheblock	Wert
---------------------
0000		--
0001		17
0010		--
0011		19
0100		 4
0101		 5
0110		 6
0111		--
1000		56
1001		 9
1010		--
1011		43
1100		--
1101		--
1110		--
1111		--
```

Sollte dir noch irgendwas unklar sein dann helfe ich gerne, sollte ich irgendetwas an dem Cache-System oder der Angabe falsch verstanden haben freu ich mich auch wenn mir das jemand sagt, ich bin nur wie gesagt schon etwas müde, aber alles ist interessanter als für Statistik zu lernen ^^.

LG und gute Nacht
Hemeroc

PS: Was man hier natürlich gut sehen kann ist das zum einen der Cachingalgorithmus nicht gerade der beste ist und zum anderen Caching erst ab einer gewissen Anzahl von Zugriffen anfängt Sinn zu machen.


----------



## Wang (29. Jun 2010)

hemeroc hat gesagt.:


> (Irgendwie macht sowas doch Spaß oder gehts da vielleicht nur mir so?



Alles macht Spaß, wenn man es beherrscht. 
Auf jeden Fall vielen Dank für deinen starken Einsatz, jetzt habe ich es tatsächlich verstanden. Wäre das Skript in einem beschreibenden Stil geschrieben, wie Dein Beitrag, dann würde es diesen Thread gar nicht geben. Aber es wäre auch die erste Vorlesung, in der das Skript nützlich wäre...


----------



## dickereiermannn (1. Feb 2013)

Hallo, 

erst einmal sorry, dass ich den alten Thread hier hochhol, 
aber ich habe hier ein Problem zu einer ganz ähnlichen Aufgabe.

Mein Problem ist folgendes:

Ich habe einen Cache der Größe 16. Die Blockgröße beträgt 4.
Nun soll ich eine Tabelle aufstellen und die Zahlen in die entsprechenden Blöcke eintragen. Nehmen wir zum Beispiel die Zahl 43.

Ich teile laut Skript 43/4 = 10
Um die Blockgröße zu ermitteln:   10 % 4 = 2

Nun weiß ich, dass die Zahl 43 im Block 2 liegen muss. Aber woher weiß ich an welche genaue Position sie in diesen Block muss?
In unserem Beispiel wurde die 43 auf Position 11 gesetzt, die 3 restlichen Positionen(8,9,10) des Blocks wurden aufgefüllt mit den Zahlen 40,41,42.


Danke schonmal!


----------

