Priručna memorija
Izvor: Wikipedija
Priručna memorija ili cache je mala memorija koja služi za pohranu podataka koji se često koriste. U nju se, za razliku od buffer memorije može pisati na koje mjesto se želi i čitati s kojeg mjesta se želi.
Sadržaj |
[uredi] Zašto cache memorija
Kada procesor dobavlja podatke iz RAM-a, treba mu prosječno oko 60ns. Kako mikroprocesor radi puno brže (u ciklusima od 2 ns) znači da gubi jako puno vremena čekajući na podatke iz RAM-a. Problem se pojavio zbog nerazmjera u povećanju brzine rada između procesora i memorije. Naime, veći broj komponenti na jedinici površine integriranog sklopa rezultira većim povećanjem brzine rada procesora u odnosu na memoriju, a da bi se na neki način donekle anulirala ta razlika u brzini između brzog mikroprocesora i sporih memorija i ostalih komponenti računala, uvodi se cache memorija.
Zbog toga je trebalo postojeći sustav sistemske memorije poboljšati ili ugradnjom brže memorije, što bi značajno poskupilo cijenu sustava ili odgovarajućim tehničkim inovacijama. U ovom slučaju, hijerarhijska organizacija memorije,pokazala se kao idealna jer se dodavanjem malenog kapaciteta brze memorije (SRAM tehnologije) trebala ubrzati velika količina spore i manje skupe memorije. Tako je na samom procesoru ugrađen tzv. L1 cache, mala priručna memorija čiji sadržaj sa lokacija procesor dobavlja jednako brzo kao i iz svojih registara, a izvan procesora ugrađuje se u računarski sustav tzv. L2 cache, brzi memorijski spremnik u koji se pohranjuje dio podataka iz RAM-a za koje se pretpostavlja da će ih procesor ubrzo zatražiti. L2 cache otprilike je duplo brži od RAMa i ima kapacitet od 512KB do 1MB.
[uredi] Funkcioniranje cache memorije
Glavna se memorija sastoji od 2^n adresibilnog prostora riječi, kod kojeg svaku riječ dohvaćamo pomoću n-bitne adrese. Da bismo podatke prebacili u cache, memoriju dijelimo na odgovarajuće blokove riječi fiksne dužine K. Stoga je ukupan broj blokova M=2^n/K. Cache je podijeljen na C linija u koje može stati K riječi. Kako je cache manji od memorije to će i broj raspoloživih linija biti manji od ukupnog broja blokova (C<<M) što znači da će samo određeni broj blokova moći biti u cacheu. Ako se čita neka riječ iz određenog bloka tada se čitav taj blok prebacuje u jednu liniju cache memorije. Kako ima više blokova nego linija, jedna se linija nikada ne može trajno pridjeliti samo jednom bloku nego svaka linija sadrži oznaku koja govori o tome koji memorijski blok trenutno zauzima određenu liniju cachea. Tag je formiran od dijela bitova koji specificiraju adresu bloka u glavnoj memoriji
[uredi] Efikasnost cache memorije
Efikasnost cache memorije određuje broj koji govori koliko je puta procesoru stvarno i isporučen podatak nakon što ga je zatražio. U tom kontekstu često se koriste termini kao što je pogodak (hit) koji označava da je podatak kojeg procesor traži stvarno i pronađen u cache memoriji. U slučaju da ga tamo nema kažemo da je riječ o promašaju (miss).
Postoje tri različita tipa promašaja:
* Nezaobilazni (compulsory) promašaj pri prvom posezanju za podacima iz memorije kada je cache
još prazan; * Kapacitetni (capacity) promašaj koji se javlja ako se svi potrebni blokovi ne mogu smjestiti
odmah u cache nego ih se dobavlja kasnije. Uzrok promašaja je nedostatna veličina cache memorije. * Konfliktni promašaj je onaj koji nastaje zbog primijenjene strategije prebacivanja podataka
u cache. Naime ukoliko više blokova iz RAM-a pretendira na isto mjesto u cache memoriji, ne mogu
se svi učitati odmah nego ih se dobavlja kasnije. Ponekad se ova vrsta promašaja zove promašajem
kolizije ili interferencije;
Vrijeme potrebno za dobavljanje podatka iz cachea je vrijeme pogotka (hit time). Ukoliko se podatak ne dohvati, govorimo o promašaju, pa u tom slučaju dohvaćaju se podaci iz hijerarhijski niže memorijske strukture i premještaju u cache. Vrijeme koje protekne da se dohvati blok iz niže memorijske strukture, a zatim prebaci u cache i iz njega dohvati podatak, nazivamo globom za promašaj (miss penalty). Uspješnost pogađanja (hit ratio) mjeri se kao postotak uspješno dobavljenih podataka iz cachea u odnosu na ukupan broj posezanja, neuspješnost (miss ratio) je komplementarna vrijednost i računamo je kao 1-hit_ratio. Cilj je da uspješnost pogađanja bude što je moguće veća.
Primjer:
Pretpostavimo da za dohvaćanje podataka iz L1 cachea treba 10 ns, a iz glavne memorije 100ns. Ukoliko je upsješnost pogađanja 90%, to znači da će tijekom 10 posezanja za podacima, 9 biti u cacheu, a 1 u RAMu. Bez cachea, trebalo bi nam ukupno
T1=10*100ns=1000ns
vremena za dobavljanje podataka. U slučaju cache-a, treba nam
T2=1*100+9*10=190ns,
što znači da smo čitav postupak ubrzali za 1000/190=5.3 puta.
Sa ciljem da se što više poveća postotak uspješnosti, razvijene su različite tehnike, koje djeluju na različite uzroke promašaja. Tehnike se odnose na:
* veličinu cachea * funkcije koje preslikavaju podatke iz RAMa u cache * algoritme temeljem kojih se postojeći blokovi iz cachea zamjenjuju novima * načinom na koji se upisuju blokovi * odabirom veličine blokova * brojem cache memorija

