Priručna memorija

Izvor: Wikipedija
Skoči na: orijentacija, traži

Priručna memorija, predmemorija 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.

Zašto se koristi predmemorija[uredi VE | uredi]

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 predmemorija, 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.

Funkcioniranje cache memorije[uredi VE | uredi]

Glavna se memorija sastoji od 2n adresibilnog prostora riječi, kod kojeg svaku riječ dohvaćamo pomoću n-bitne adrese. Da bismo podatke prebacili u priručnu memoriju, a glavnu memoriju dijelimo na odgovarajuće blokove riječi fiksne dužine K. Stoga je ukupan broj blokova M=\frac {2^n}{K}. Priručna memorija je podijeljena na C linija u koje može stati K riječi. Kako je priručna memorija manji od glavne 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 priručnoj memoriji. Ako se čita neka riječ iz određenog bloka tada se čitav taj blok prebacuje u jednu liniju priručne 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 priručne memorije. Oznaka se stvara od dijela bitova koji naznačavaju adresu bloka u glavnoj memoriji

Efikasnost cache memorije[uredi VE | uredi]

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


Vanjske poveznice[uredi VE | uredi]