0 votes
Wie werden die Tag- und Satz-Bits in Aufgabe 3a aus der Klausur vom WS20/21 bestimmt?

Und wie kann ich diese Tabelle nutzen, um dann die Tabelle aus Aufgabe 3c zu bestimmen?
in * TF "Emb. Sys. and Rob." by (310 points)

1 Answer

0 votes
 
Best answer
Das sind einfache Rechnungen, wenn man weiß, was Tag, Satz, Block usw. bedeuten: Wenn der Cache 16 Bytes hat und 2 Bytes einen Block bilden, dann hat der Cache 8 Blöcke. Bei der Direktaddressierung ist jeder Block ein Satz, bei 2-facher Assoziativität bilden 2 Blöcke einen Satz (also hat der Cache dann 4 Sätze),   bei 4-facher Assoziativität bilden 4 Blöcke einen Satz (also hat der Cache dann 2 Sätze) und bei voller Assoziativität bilden alle 8 Blöcke einen Satz (also hat der Cache dann 1 Satz). Entsprechend definieren sich die Zahlen der dafür benötigten Bits.

Wie man die Tabelle aus Aufgabe 3c bestimmt ist aufwändiger: Hier muss man schauen, auf welche Adressen das Programm zugreift und welche Cache-Blöcke dies dann betreffen wird.
by (92.2k points)
selected by
Also wie man die Sätze und Block/Satz bestimmt weiß ich, jedoch weiß ich nicht wie man es bei dieser Aufgabe mit dem Tag- und Set-Bits macht.

In dem Skript ab Seite 62, wird ein Beispiel gezeigt oder auf dem Übungsblatt 5 Aufgabe 2a, wo uns die Zahlen gegeben sind, die wir in den Cache eintragen müssen. Und da können wir ja durch Modulo den Tag und Set bestimmen, wenn ich das richtig verstanden habe. Also mit dem Bsp. 17. 17 mod 4 = 4 Rest 1. in dem Falle wäre die 4 der Tag Wert und die 1 der Satz Wert. Oder ist das was ganz anderes und ich vertausche gerade alles?
Der Hauptspeicher hat 512 Bytes also haben wir es mit Adressen 0,...,511 zu tun, die man mit 9 Bits darstellen kann. Die Blöcke haben damit die Adressen 0,...,255, die man mit 8 Bits darstellen kann.

Im Cache werden Sätze addressiert, wofür wir bei s Sätzen log_2(s) Bits benötigen. Die Tags bilden dann die restliche Adresse des Blocks also TagBits = BlockBits - SatzBits = 8-log(s) bits. Damit ergeben sich die folgenden Zahlen:

    DM: 8 Sätze -> 3 SatzBits  -> 5 TagBits
    FA: 1 Sätze -> 0 SatzBits  -> 8 TagBits
    A2: 4 Sätze -> 2 SatzBits  -> 6 TagBits
    A4: 2 Sätze -> 1 SatzBits  -> 7 TagBits

Tag und Satzaddresse lassen sich aus der Blockadresse mit div/mod bestimmen: Satzadresse = Blockadresse mod #Sätze und Tag = Blockadresse div #Sätze
Vielen vielen Dank! Hab’s jetzt verstanden bei der 3a :)

Hab dann auch eben die 3c versucht zu lösen.
Ich habe da die Speicherstelle (Adr.) ganz normal mit dem gegebnen Code berechnet. Dann habe ich versucht den Tag und Set zu bestimmen mit den Formeln, die du mir gegeben hast „ Satzadresse = Blockadresse mod #Sätze und Tag = Blockadresse div #Sätze“ meinst du da mit der Blockadresse die Speicherstelle (Adr.)? Wenn ja, habe ich dann versucht es so zu lösen: (bei Iteration 2, für Zeile 3) 8 mod 8 = 1 R 0, aber da sollte eigentlich eine 4 raus?
Wenn ich aber den Tag berechne: 8 div 8 = 1 mache ich auch etwas falsch, weil da eigentlich eine 0 hin müsste.
Also verwende ich dann wohl die falschen Zahlen, aber beim DM sind die Anzahl an Sätzen = 8 und die Blockadresse ebenso.
Man muss zwischen Wortadressen (die von den Befehlen verwendet werden) und Blockadressen (die vom CacheController verwendet werden) unterscheiden. Bei Iteration 2, Zeile 3 wird auf die Wortadresse 8 zugegriffen, die die Blockadresse 4 ist. Das ergibt Satzadresse = 4 mod 8 = 4 und Tag = 4 div 8 = 0.

Mit den Wortadressen ergeben sich die folgenden Formeln:

    Satzadresse = (Wortadresse div #BlockSize) mod #Sätze
    Tag = (Wortadresse div #BlockSize) div #Sätze
Ohh ok, danke!
Wäre hier die Wort Anzahl dann die gleiche wie die Blockanzahl? Also bei 8 Blöcken, dann 8 Wörter? Oder woher weiß ich wann ich wie viele Wörter in einer Cache Tabelle brauche?
In der Aufgabenstellung steht, dass 1 Wort = 1 Byte entspricht, also bin ich da dann richtig?
Die Notation ist hier nicht immer ganz konsistent. Oft spricht man von Speicherwörtern und meint damit die Daten, die bei Load/Store-Befehlen gelesen bzw. geschrieben werden. Bei einem 32-Bit Prozessoren wären das dann 4 Bytes, bei einem 64-Bit Prozessor wären es 8 Bytes.

In der Aufgabe steht, dass es sich um einen byteadressierten Speicher handelt, d.h. Speicherwörter sind Bytes. Da ein Block zwei Bytes umfasst, umfasst ein Block also zwei Speicherwörter.
Dann haben wir eine Tabelle mit 16 Speicherwörtern, oder?
Wenn ja, wie bestimme ich es dann mit den Zahlen, die größer sind?
Also wie mit den Zahlen ab Iteration 3 Zeile 3? Da wird z.B. auf Wortadresse 24 zugegriffen, aber in welcher Blockadresse befindet sich diese dann?

Ich habe mir eine DM Tabelle aufgezeichnet mit 8 Sätzen, 8 Blöcken und 16 Wörtern (2 pro Block) an der ich besser sehen kann an welcher Stelle was ist, aber ich weiß nicht mehr wie ich das jetzt mit den Werten mache, die Größe sind als die 16 bzw. 15 Wörter (beginnend mit 0)?
Der Hauptspeicher hat Wortadressen 0,...,511 und damit die Blockadressen 0,...,255. Diese werden auf die Cacheadressen (also die Satzadressen) mit den obigen Formeln abgebildet:

    Satzadresse = (Wortadresse div #BlockSize) mod #Sätze
    Tag = (Wortadresse div #BlockSize) div #Sätze

Natürlich werden dabei viele Blöcke des Hauptspeichers auf denselben Satz abgebildet und stehen damit in Konkurrenz zueinander, wenn es um einen Platz im Cache geht.
Ohhhh, ja stimmt, da hab ich nicht richtig nachgedacht.. Vielen Dank für deine Hilfe!

Related questions

0 votes
1 answer
0 votes
1 answer
0 votes
2 answers
Imprint | Privacy Policy
...