Sunteți pe pagina 1din 3

Munteanu Alexandru

FAIMA 1541E

Structurarea, asociativitatea si translatarea


adreselor memoriei cache

Memoria cache (sau simplu un cache) este o colectie de date ce sunt o


"copie la indigo" a valorilor originale stocate altundeva sau calculate mai
devreme, unde procesul de aducere din memorie a datelor originale este
costisitoare (datorita timpilor mari de acces la memorie) sau costul recalcularii
acestora este mare, in comparatie cu costul citirii acestora din cache. Cu alte
cuvinte, un cache este o arie temporara de stocare unde datele utilizate in mod
frecvent pot fi depozitate pentru un acces rapid la acestea. Odata ce datele sunt
stocate in cache, in viitor vor fi luate de aici si utilizate in loc sa se incerce
readucerea datelor originale sau recalcularea acestora, astfel incat timpul mediu
de acces este mai mic.
Principiul memoriei cache :Exista o memorie principala de dimensiuni
relativ mari, dar mai lenta, si o memorie cache mai redusa, dar mai rapida.
Memoria cache conine o copie a unor parti din memoria principala. Atunci cand
UCP incearca citirea unui cuvant din memorie, se testeaza daca respectivul
cuvant se afa in memoria cache. In caz afirmativ, cuvantul este furnizat unitatii
centrale. In caz contrar, se incarca in memoria cache un bloc al memoriei
principale, constand dintr-un numar fix de cuvinte, iar apoi cuvantul este returnat
unitatii centrale. Se cunoaste ca programele nu fac acces la memorie in mod
complet aleator.
Daca se face o referire la o anumita adresa, este probabil ca urmatoarea
referire la memorie va fi in vecinatatea acestei adrese. In spaiul adreselor de
memorie, cateva regiuni au o probabilitate ridicata de a fi accesate, cateva au o
probabilitate moderata, iar celelalte au o probabilitate foarte mica de a fi
accesate in viitorul apropiat.
Memoria principal const din 2n cuvinte adresabile, fiecare cuvnt avnd
o adres unic de n bii. Se consider c aceast memorie este format dintr-un
numr de blocuri de lungime fix de K cuvinte fiecare. Exist deci 2n/K blocuri.
Memoria cache const din blocuri de cte K cuvinte fiecare, un asemenea bloc
fiind numit linie. Exist L linii n memoria cache, numrul de linii fiind mult mai
mic dect numrul blocurilor din memoria principal (L << K). n orice moment, o
anumit parte a blocurilor de memorie se af n liniile memoriei cache. Dac se
citete un cuvnt al unui bloc din memoria principal, blocul respectiv este

transferat ntr-una din liniile memoriei cache. Deoarece exist mai multe blocuri
dect linii, o anumit linie nu poate fi dedicat n mod unic i permanent unui
anumit bloc. De aceea, fiecare linie conine un marcaj care identific blocul pe
care l conine linia respectiv. Marcajul este de obicei o parte a adresei din
memoria principal.
O caracteristic de baz a memoriei cache este funcia de mapare (de
translatare), care atribuie locaii din memoria cache blocurilor din memoria
principal. Se pot utiliza trei tehnici: direct, asociativ i asociativ pe
seturi. Ca si exemplu pe care il vom folosi ulterior putem lua o memorie cache
de 1024 (1 K) octeti. Datele se transfera intre memoria principala si memoria
cache in blocuri de cte 8 octeti. Aceasta inseamna ca memoria cache are 128 de
linii de cate 8 octeti fiecare. Memoria principala consta din 64 K octeti, fiecare
octet fiind direct adresabil printr-o adresa de 16 biti. Se poate considera ca
memoria principala consta in 8 K blocuri de cte 8 octei fiecare.

Maparea directa

Adresa din memoria principala (adresa fizica) se compune din campurile :


marcaj, bloc i cuvant.
In acest caz blocul i din memoria principala este asociat cu blocul din
memoria cache. Fiecare bloc din cache are asociat un camp de marcaj (primii 7
biti mai semnificativi ai adresei fizice in memoria principala).
Campul de marcaj din adresa memoriei principale se compara cu fiecare
camp de marcaj al memoriei cache. Dupa gasirea corespondentei dintre
campurile de marcaj se alege campul bloc din adresa memoriei principale i
campul cuvant din aceeasi adresa pentru selectarea octetului ce va fi transferat
din blocul memoriei cache (dat de marcaj) in blocul memoriei principale (dat de
campul bloc i campul cuvant al adresei in memoria principala). Functia de
mapare directa poate fi implementata simplu utiliznd adresa de 16 biti. Cei 3 biti
mai putin semnificativi identifica un cuvant (octet) unic in cadrul unui bloc al
memoriei principale. Restul de 13 biti specifica unul din cele 213 = 8 K blocuri ale
memoriei principale. Campul de 7 biti, numit linie, indica numarul blocului,
modulo 128. Astfel, blocurile 0, 128, 256, , 8064 vor fi amplasate in linia 0;
blocurile 1, 129, , 8065 vor fi amplasate in linia 1, si asa mai departe, pana la
blocurile 127, 255, , 8191, care vor fi amplasate in linia 127. Campul de 6 biti,
numit marcaj, are rolul de a identifica in mod unic blocul din linie. Astfel, blocurile
0, 128, 256, , 8064 au numerele de marcaje 0, 1, 2, , respectiv 63. Memoriei
cache i se prezinta o adresa de 16 biti. Numrul liniei de 7 biti este utilizat ca un
index in memoria cache pentru accesul la o anumita linie. Daca marcajul de 6 biti
este egal cu marcajul liniei respective, atunci numrul de 3 bii al cuvantului este
utilizat pentru a selecta unul din cei 8 octei ai liniei respective. In caz contrar,
marcajul si numarul liniei (in total 13 biti) se utilizeaza pentru a incarca un bloc
din memoria principala.
Avantajul acestei mapari directe este accesul simultan la datele dorite si la
campul de marcaj (nu se face o cautare asupra campului de marcaj). Daca
campul de marcaj nu exista in memoria cache, datele vor fi suprimate. Un

dezavantaj al maparii directe apare atunci cand dou sau mai multe blocuri din
memoria principala, utilizate alternativ, sunt asociate aceluiasi bloc din cache,
atunci blocurile vor fi interschimbate in mod continuu in memoria cache, si rata
de succes va fi redusa.

Maparea asociativa

Adresa din memoria principala (adresa fizica) se compune din campurile:


marcaj si cuvant.
In acest caz, orice bloc din memoria principala poate fi asociat cu orice
bloc din memoria cache. Adresa memoriei principale consta dintr-un marcaj de 13
biti si un numar al cuvantului de 3 biti. Un bloc din memoria principala se poate
incarca in oricare linie, iar marcajul sau de 13 biti se memoreaza impreuna cu
blocul. Pentru a determina daca un bloc se afa in memoria cache, sunt necesare
circuite pentru a compara simultan marcajul sau cu marcajele fiecarei linii.
Aceasta este metoda cea mai buna, dar si metoda cea mai scumpa. Acest tip de
mapare elimina confictele de acces intre blocuri, dar timpul de acces creste
datorita faptului ca este necesara o cautare asociativa.
In cazul maparii asociative, exist o fexibilitate in privina inlocuirii unui bloc
atunci cand un nou bloc este incarcat in memoria cache. Principalul dezavantaj al
acestei metode l reprezint circuitele complexe necesare pentru a examina
marcajele tuturor liniilor din memoria cache.

Maparea asociativa pe seturi

Adresa din memoria principala (adresa fizica) se compune din campurile:


marcaj, set si cuvant.
Aceasta mapare reprezinta un compromis intre maparea directa si maparea
asociativa. Memoria cache este impartita in I seturi. Blocul i, din memoria
principala, poate corespunde cu orice bloc din memoria cache apartinand setului.
Numarul de seturi, I, determina costul cautarii (specifice maparii asociative). In
acest caz, memoria cache fiind impartita in I seturi, si fiecare din acestea
continand J linii.
Avem:
L=IJ
K = A mod I
unde K = numarul setului. Cu aceasta metoda, blocul continand adresa A poate fi
mapat in oricare din liniile setului I. De observat c n cazul extrem n care I = L, J
= 1, maparea asociativ pe seturi se reduce la maparea direct, iar atunci cnd I
= 1, J = L, se obine maparea asociativ.
Utilizarea a dou linii pe set este cea mai utilizat organizare asociativ pe
seturi, care mbuntete semnificativ rata de succes fa de maparea direct.

S-ar putea să vă placă și