Beispiel Cache-Architektur
Gegeben Cache Größe: 32 KByte Blockgröße: 4 Byte Organisationsform: direkt abbildend Anzahl Einträge im Cache ≙ Anzahl Cache Zeilen = Cache-Größe / Blockgröße 32 * 1024 Byte / 4 Byte = 25 * 210 / 22 = 213 Cache-Zeilen → 13 Bits für Adressen notwendig Daten Tag 0x0000 ... 0x1FFF
Zugriff auf Speicher an der Adresse Größe: 1 MByte ≙ 220 Byte Zugriff auf Speicher an der Adresse 0x00000 Memory ... 0x10345 0xFFFFF 0x12 0x42 0x18 0x50 0x10345 → 0b 0001 0000 0011 0100 0101
{ Welche Cache-Zeile, welches Tag? 4 = 22 Byte Blockgröße 213 Cachezeilen 0b 0001 0000 0011 0100 0101 Byte-Nr 0b 0001 0000 0011 0100 0101 0x00010 0x00D1 Tag Cache-Zeile Memory 0x00010 0x00000 ... ... ... Tag Daten ... ... 11 10 01 00 ... 0x0000 ... ... { 0x10344 0x12 0x12 ... ... ... ... ... ... 0x10345 0x42 0x42 0x10346 0x18 0x18 0x00D1 0x10347 0x50 0x50 ... ... ... ... ... ... ... ... ... 0x1FFF ... 0xFFFFF
Gegeben Cache Größe: 32 KByte Blockgröße: 4 Byte Organisationsform: jetzt 2-fach assoziativ Anzahl Einträge im Cache ≙ Anzahl Cache Zeilen = Cache-Größe / Blockgröße / Assoziativitätsgrad (32 * 1024 Byte / 4 Byte) / 2 = 25 * 210 / 23 = 212 Cache-Zeilen → 12 Bits für Adressen notwendig Daten Tag 0x000 ... 0xFFF 0x001
In beiden Zeilen ablegbar Welche Cache-Zeile, welches Tag? 4 = 22 Byte Blockgröße 212 Cachezeilen 0b 0001 0000 0011 0100 0101 Byte-Nr 0b 0001 0000 0011 0100 0101 0x000100 0x0D1 Tag Cache-Zeile Memory 0x000100 0x00000 ... ... ... Tag Daten ... ... 11 10 01 00 ... 0x000 ... ... { 0x10344 0x12 0x12 In beiden Zeilen ablegbar ... ... ... ... ... ... 0x10345 0x42 0x42 0x000100 0x12 0x42 0x18 0x50 0x10346 0x18 0x0D1 0x000100 0x12 0x42 0x18 0x50 0x10347 0x50 0x50 ... ... ... ... ... ... ... ... ... ... 0xFFF 0xFFFFF