A cache memória

A számítástechnika fejlődésével előtérbe került az a probléma, hogy a processzorok sebessége jelentősen meghaladta a memória sebességét, tehát ha a processzornak szüksége volt a memóriából egy adatra, akkor az adat címének kiadása után sok-sok órajel cikluson keresztül várakoznia kellett, míg az adatbuszon megjelent az. A programok lokalitásának elve szerint egy programnak általában egy jól meghatározott része fut, és ha a programban funkciót váltunk, csak akkor tér át egy másik területre. Felvetődhet a megoldás, hogy a gyakran használt adatokat tároljuk egy gyorsabb (persze így jóval drágább) memóriában, ahonnan a processzor sokkal gyorsabban megkaphatja. (Hasonlít ez a telefonkönyvre és a telefonunk memóriájára. A telefonkönyvben minden telefonszám bent van, de amiket szoktunk használni, azokat a gyorsabb elérés érdekében beírjuk a telefonunkba is.) Ezt a köztes, jóval gyorsabb memóriát nevezzük cache memóriának, másik nevén gyorsítótárnak.
 
cache
 
Meg kell jegyeznünk, hogy a cache memória fogalmát ennél általánosabban is használhatjuk. Általában egy gyors és egy lassabb rendszer közti sebességkülönbség áthidalásához használjuk a cache fogalmát. (Lehet ez a merevlemez és az operatív tár között, a DVD író és az operatív tár között, stb.)

Amennyiben a processzor olvas a memóriából (a következő ábrákon ez a 183. című rekesz adata), akkor először megnézi a cache vezérlő áramkör, hogy a kért (címével azonosított) adat, megtalálható-e a cache memóriában. Első alkalommal értelemszerűen még nem lesz bent, (ennek a neve a cache-miss) így a memóriából az adatbuszra helyezett adat bekerül a processzorba és a cache memóriába is, sőt a cache memória eltárolja az adat címét is (183). Ennek a címnek lesz a neve a tag.

cache_miss
 
Memóriarekesz olvasásának folyamata, ha az adat nincsen bent a gyorsítótárban
 
Ha a későbbiek során a processzor újra erről a címről kéri be az adatot, akkor már megtalálható lesz a cache-ben is (ennek neve a cache-hit), így innen olvassa be, a főmemóriából nem lesz adatmozgás. A következő ábra ezt a folyamatot mutatja.

cache_hit
 
Memóriarekesz olvasásának folyamata, ha az adat megtalálható a gyorsítótárban

Mi történik íráskor? Annak érdekében, hogy elkerüljük azt, hogy ugyanazon címen más-más adat legyen eltárolva a kétfajta memóriában, az adott címre kiírt adatot, be kell írni mindkettőbe. Ezt vagy az adat kiírásakor megtesszük rögtön (tehát beírjuk a cache-be és a főtárba is egyszerre, ez a write-trough módszer), vagy először csak a cache-be írjuk, és majd csak később írjuk ki vissza a cache-ben felülírt címek tartalmát (ez a write-back módszer.) Mi történik, ha a cache megtelt? Ilyenkor valamilyen módszer szerint felszabadítunk a cache-ben helyet, hogy az új rekeszek címe és tartalma elférjen. Persze a kitörölt rekeszek újbóli olvasása később cache-miss-t fog okozni. (Write back módszernél a rekeszek cache-ből törlésekor íródnak vissza a memóriába, feltéve, ha menet közben megváltoztak.)
A mai rendszereknél nem is egy, hanem kettő vagy három szintű cache-t használnak (L1, L2 és L3), a többmagos processzoroknál az egyes magoknak van saját és közös cache-e is, sőt a magok közvetlen közelében (L1) megkülönböztetünk adat és kód cache-t is.

barcelona

i3cache

Kérdések

  1. Mit jelent a programok lokalitásának elve?
  2. Mi a cache? Mit old meg?
  3. Hogyan történik a memória olvasása, ha van cache memória?
  4. Mutassa be a következő fogalmakat: cache-miss, cache.hit, tag!
  5. Hogyan történik a memória írása, ha van cache memória?
  6. Mi a különbség a write-trough és a write-back között?
  7. Hol helyezkedhetnek el a cache memóriák?
  8. Milyen fajtái léteznek a cache memóriának a CPU-n bebül?
  9. Milyen tipikus mérettel rendelkezhetnek az egyes cache memóriák? (Utolsó kép!)


Advanced Programmable Interrupt Controller

​ 

Visit the new site http://lbetting.co.uk/ for a ladbrokes review.