Speicherhierarchie – Speicheradressen errechnen

In diesem Beitrag geht es darum, aus Eckdaten des Speichers, das Layout der Adresse zu errechnen, sowie konkrete Adressen ablesen zu können.

Eckdaten des Speichers:

  • einem 2-fach assoziativen 32-Byte First-Level Cache mit einer Line Size von 4 Bytes unter Nutzung von LRU, Write-Back und Write-Allocate
  • einem 4-fach assoziativen 1kByte Second-Level Cache mit einer Line Size von 4 Bytes unter Nutzung von LRU, Write-Through und No-Write-Allocate
  • einem 64kByte Hauptspeicher, der momentan mit von 0 beginnend aufsteigend hochgezählten Big-Endian 16-Bit Werten gefüllt ist (der gespeichert Wert auf Adresse 1024 ist also 512)

Skizze der Adresse

L1 Cache
Wir errechnen zuerst die Anzahl der Speicherzellen:

Größe : Line Size = Anzahl der Speicherzellen
32 : 4 = 8

Als nächstes errechnen wir die Anzahl der Indexeinträge:

Anzahl der Speicherzellen : Assoziativität = Anzahl der Indexeinträge
8 : 2 = 4

Um herauszufinden, wie viel Bits wir für die Indexdarstellung brauchen rechnen wir folgendes:

log[Zur Basis 2] von (Anzahl der Indexeinträge) = Anzahl der Bits für die Indexdarstellung
log2(4) = 2

Somit hat der Index schon mal 2 von 16 Bits.

Den Offsetanteil berechnet man folgender maßen:

log[Zur Basis 2] von (Line Size)
log2(4) = 2

Somit hat der Offsetanteil auch 2 von 16 Bits. Daraus ergibt sich folgende Adressaufteilung:

Adressaufteilung des L1 Caches:

Offset: 0 bis 1
Index: 2 bis 3
Tag: 4 bis 15

L2 Cache
Zuerst errechnen wir wieder die Anzahl der Speicherzellen:

1024 : 4 = 256 => Anzahl der Speicherzellen

Dann errechnen wir die Anzahl der Indexeinträge:

256 : 4 = 64 => Anzahl der Indexeinträge

Nun rechnen wir Index & Offsetanteil aus:

log2(64) = 6 => Anzahl der Indexbits
log2(4)   = 2 => Anzahl der Offsetbits

Damit ergibt sich folgende Adressaufteilung für den L2 Cache

Offset: 0 bis 1
Index: 2 bis 7
Tag: 8 bis 15

Speicheradressen in die gewünschte Form bringen

Beispiel: $4711

Für den L1 Cache

Hexadezimal: 4711
Binär: 0100 0111 0001 0001
Somit:
    Tag: 0100 0111 0001 = $471
    Index: 00 = $0
    Offset: 01 = $1

Für den L2 Cache

Hexadezimal: 4711
Binär: 0100 0111 0001 0001
Somit:
    Tag: 0110 0111 = $47
    Index: 0001 00 = $4
    Offset: 01 = $1

Man zerlegt die Binärdarstellung der Hexadezimalzahl (Erkennbar an dem $) einfach nach dem oben errechneten Layout in die einzelnen Bestandteile.

 

Marvin Sengera

Marvin Sengera

Hey! Ich bin Marvin Sengera, Inhaber der Internetagentur "Binärfabrik" aus Paderborn. Ich habe mein Bachelorstudium Informatik mit Schwerpunkt Industriespionage an der Hochschule Hamm Lippstadt abgeschlossen und absolviere derzeit meinen Master in Fachrichtung "Technical Entrepreneurship and Innovation". Ich beschäftige mich rund um die Themen Informatik, Innovation & Unternehmensgründung.

Das könnte Dich auch interessieren …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.