Documente Academic
Documente Profesional
Documente Cultură
Exemplu simplu
4 intrebari importante:
1. Cand este copiat un bloc de date, din memoria principala in cache, unde este plasat el?
2. Cum se stabileste daca un cuvant (bloc) este deja in cache, sau trebuie adus mai intai din
memoria principala?
Exemplu:
memorie principala
Memory
Address
0
Memorie principala de 16 byte 1
Memorie cache de 4 byte 2 memorie cache
3
4
Locaţiile de memorie 0, 4, 8 si 12 5
Index
vor fi mapate in blocul 0 6 0
7 1
Locaţiile de memorie 1, 5, 9 si 13 2
8
vor fi mapate in blocul 1 9 3
10
11
12
13
Cum se calculeaza? 14
15
Se foloseste operatorul de calculare a restului!
Daca memoria cache contine 2k blocuri
atunci cuvantul aflat in memoria principala la adresa i va fi copiat in cache in
locatia indicata de index : memorie principala
Memory
index = i mod 2k Address i
0
1
( i%2k ) 2 memorie cache
3
In exemplul nostru 4
Index
5
adresa 14 va fi mapata 6 0
7 1
in blocul 2. 8 2
9 3
14 mod 4 = 2 10
11
12
13
14
15
O cale echivalenta: identificarea celor mai putin semnificativi biţi din adresa
In cazul nostru: ultimii 2 biti
Se poate observa ca
Memory memorie principala
adresa 14 (1110 in binar) Address
Prin folosirea metodei inverse: soluţia este nedeterminata (nu este unica!)
0000
0001
0010
0011
0100
0101 Index Tag Data
0110 00 00
0111 01 ??
1000 10 01
1001 11 01
1010
1011
1100
1101
1110
1111
0000
0001
0010
0011
0100
0101 Index Tag Data
0110 00 00
0111 01 11
1000 10 01
1001 11 01
1010
1011
1100
1101
1110
1111
Main memory
Index Tag Data address in cache block
00 00 00 + 00 = 0000
01 11 11 + 01 = 1101
10 01 01 + 10 = 0110
11 01 01 + 11 = 0111
Tag+Index=adresa
O informaţie suplimentara bitul de prezenţa (valid bit)
“lupta impotriva gunoiului”
In cache pot ramane informaţii din operaţiuni anterioare care nu mai sunt valide
(de exemplu fac parte din alt program, cu execuţie finalizata, sau care au fost
inlocuite in memoria principala)
Tag
= Hit
Ce se intampla in caz de cache miss
Daca CPU nu primeste semnalul hit, (adica primeste 0 si nu 1) initiaza operatiunea de citire din
memoria de rang imediat inferior. (in cazul sistemului cu un singur cache, citeste direct din
memoria principala)
Incarcarea unui bloc in cache
...
Data ...
1
Memorii cache cu blocuri mai mari de 1 byte
Memory
Address
0
1
2
3
4 Index
5
6 0
7 1
8 2
9 3
10
11
12
13
14
15
Adrese de bloc
Byte Cache
Address Byte 0 Byte 1 Block
12 2
13
Localizarea datelor in cache
Sa presupunem ca avem un cache cu 2k blocuri continand 2n byte.
Putem determina pozitia in cache a unui octet plecand de la adresa sa din memoria principala.
Cei mai putin semnificativi n biti vor determina offset-ul care decide pozitia octetului in bloc.
Cei k biti vor identifica unul din cele 2k blocuri din cache (index)
Mux
Hit Data
spre CPU
Un alt exemplu
Cache cu 1024 blocuri si blocuri de 4 byte 2 bits
Address (32 bits)
Memorie cu adrese de 32 biti
20 10
Hit Data
Address (32 bits) 2 bits
Hit Data
Dezavantajele maparii directe
= Hit
=
Maparea directa in seturi asociative
Indexul blocului
din set
2-way set associative cache
Address (m bits)
Block
Tag Index
offset
(m-k-n) k
2n 2n
= =
2-to-1 mux
Hit 2n
Data
RA= read address
MMU=“MEMORY MANAGEMENT UNIT”