Priručna memorija (predmemorija,[1] brza memorija;[1] engl. cache), mala je memorija koja služi za pohranu podataka koji se često koriste u nekom računalskom sustavu. U nju se, za razliku od međuspremničke memorije, u priručnu memoriju može pisati/čitati na koje mjesto/lokaciju iz bilo kojeg mjesta iz ili u glavnu memoriju. Priručna memorije mogu biti izvršene u sklopovlju koje mogu biti pri CPU, GPU, DSP, ili nekoj računarskoj mreži ili slično. Dok kod programatske priručna memorije koja je izvedena u softveru mogu vršiti funkcije kao recimo diskovna pričuvna memorija, web pričuvna, memorija za baze podataka.
Povijest
Pojavom jefitnijih ali sporijih dinamičkih DRAM memorijskih većeg kapaciteta kola zasnovanim na kondenzatorskoj tehnologiji koje je prvo razvila i patentiral tvrtka IBM 1967 godine [2]. DRAM skopovlje se počelo pojavljivati tržištu u ranim 1970-tim, primjer Intel 1103, što je do prave revolucije u razvoju računarskih sustava. Do tada najveća prepreka u razvoju računarstva bila je skupoća memorijskih skopova jer je većina memorija za računarske sustave je bilo zasnovano na tehnologijama magnetskih jezgri ili tranzistora (SRAM). Zbog sve veće dostupnosti boljih i jeftinijih DRAM memorijskih integriranih krugova, dizajeri su počeli razvijati računalne sustave s većim adresnim kapacitetom, kraćim ciklusima za izvršavanje naredbi koje su zauzimale sve manji i manji prostor. Pošto tehnologija silikonskih i DRAM integriranih krugova nemaju iste performanse kao i mikroobradnici to je ubrzo dovelo je to neravnoteže između brzine obradnika i brzine glavne memorije. Pošto ova neravnoteža je izražena u brojkama koja je 2, 10 ili 100 puta većom osobito ako se uzme u obzir brzina sekundarne memorije tada dizajneri računalskih sustava imaju dilemu kako učiniti cijeli sustav efikasnjim a da najbrže komponente imaju što veću iskoristivost tokom svoga rada a da su ekonomski isplativi.
Razvoj programskih priručnih memorija
Zašto se koristi priručna memorija pri skopovlju
Priručna se koristi da bi se ubrzalo izvršavanje programa u nekom računalu ili računalnom sustavu tako da se pojedini podatci, programi ili dijelovi programa koji se često rabe drže u memoriji koja je brža za pristup mikroobradniku ili procesoru. Ovo je sobito važno su računalskim sustavima u kojima je brzina mikroobradnika ili obradnika mnogostruko viša od brzine glavne memorije (RAM-a).[3] Ako se u priručnoj memoriji (predmemoriji) spremaju dijelovi memorije koje se mnogostruko koriste, i na taj način ubrzaju izvođenje pojedinih programa. Spremanje i odabiranje dijelova memorije koje se pohranjivaju u predmemoriji mnogo puta podlježu nekom algoritmu za odbabir ili uklanjanja obično nekog fiksnog memorijskog bloka ili stranice kao jednog od strukturalnih načina upravljanja priručnom memorijom.
L1 i L2 priručna memorija
Priručna je inače drugi stupanj memorijske hijerarhije. U mnogim modernijim računarskim sustavima memorijska hierarhija ima četiti stupnja:
Stupanj | Ime | Mjesto | Opaska |
---|---|---|---|
1 | registar | nalazi se na na čipu mikroobradnika | brzina takta mikroprocesora |
2 | priručna memorija | L1 (na čipu), L2 izvan čipa | |
3 | glavna memorija | RAM | |
4 | sekundarna memorija | Disk, optički |
Priručna memorija obično vrši službu posrednika između procesora (obradnika) i glavne memorije, no nekada i ulogu posrednika između obradnika
i sekundarne memorije. Uloga memorijske hierarhije je stvaranje strukture i sistematizacije rada memorijskih sustava u računalskim sustavima u cilju poboljšanja rad cijeline sustava te efikasnijim kori u svojoj cijeni i izvedbi. Inače, hijerarhijska organizacija memorije pokazala se učinkovitim jer se dodavanjem malenog kapaciteta brze memorije (SRAM tehnologije) moge ubrzati velika količina sporrije i jeftinije memorije. Tako je na samom procesoru ugrađen tzv. L1 predmemorija, mala priručna memorija čiji sadržaj s lokacija procesora dobavlja jednako brzo kao i iz svojih registara (spremnika), 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.
Primjer i način rada
Ako imamo glavnu memoriju koja se sastoji od 2n adresibilnog prostora riječi, kod kojeg svaku riječ dohvaćamo pomoću n-bitne adrese. I ako na primjer imamo sustav sa sljedećim svojstvima:
- Brzina glavne memorije (RAM) (ciklus): 60ns
- Brzina mikroobradnika (ciklus): 2ns
- Opaska: mikroobradnik ima ciklus koji je 30 puta kraćin neki ciklus glavne memorije
Kada procesor dobavlja podatke iz glavne memorija (RAM-a), treba mu prosječno oko 60ns za svaku operaciju. Pošto mikroprocesor radi puno brže (u ciklusima od 2 ns, tj 30 puta) znači da gubi jako puno vremena čekajući na podatke iz RAM-a, tj. za jedno memorijsku operaciju mikroobradnik može obaviti 30 operacija. 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 smanjila ta razlika u brzini između brzog mikroprocesora i sporih memorija i ostalih komponenti računala, uvodi se cache memorija.
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 . Priručna memorija je podijeljena na C linija u koje može stati K riječi. Kako je priručna memorija manja 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. Pošto je priručna memorija mnogostruko brža od glavne memorije, za svako čitanje i zapisivanje u glavu memoriju potrebno je čekati određeno vrijeme. 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
Učinkovitost priručne memorije
Učinkovitost priručne 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 izraz kao što je pogodak (engl. 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 (engl. miss).
Postoje tri različita tipa promašaja:
- nezaobilazni (engl. compulsory) promašaj pri prvom posezanju za podacima iz memorije kada je cache još prazan;
- kapacitetni (engl. 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 priručne memorije.
- konfliktni promašaj je onaj koji nastaje zbog primijenjene strategije prebacivanja podataka u cache. Naime ako više blokova iz RAM-a pretendira na isto mjesto u priručnoj (cache) memoriji, ne mogu se svi učitati odmah nego ih se dobavlja kasnije. Ponekad se ova vrsta promašaja zove promašajem kolizije (sudara) ili interferencije.
Vrijeme potrebno za dobavljanje podatka iz priručne memorije je vrijeme pogotka (engl. hit time). Ako 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 međuspremnik. Vrijeme koje protekne da se dohvati blok iz niže memorijske strukture, a zatim prebaci u priručnu memoriju 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 priručne memorije u odnosu na ukupan broj posezanja, neuspješnost (engl. 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 sljedeće:
- brzina dohvaćanja podataka iz L1 priručne memorije je 10 ns
- brzina dohvaćanja podataka iz glavne memorije je 100ns
- uspješnost pogađanja 90 %, to znači da će tijekom 10 posezanja za podacima, 9 biti u priručnoj memoriji, a 1 u RAM-u.
Bez priručne memorije, trebalo bi nam ukupno
T1=10*100ns=1000ns
vremena za dobavljanje podataka. U slučaju priručne memorije, treba nam
T2=1*100+9*10=190ns,
što znači da smo čitav postupak ubrzali za 1000/190=5,3 puta.
S 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 priručne memorije
- funkcije koje preslikavaju podatke iz RAM-a 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 priručnih memorija memorija (L1,L2...)
Algoritmi za upravljanje predmemorijom
- Béládyev algoritam
- FIFO
- LIFO ili FILO
- LRU
- TLRU
- MRU
- P-MRU
- RR
- SLRU
- LFU
- LFRU
- LFUDA
- LIRS
- Clock-PRO
- ARC
- AC
- CAR
Izvori
- ↑ 1,0 1,1 Miroslav Kiš, Joško Buljan, Sanja Vuković, Ozren Anić, Englesko – hrvatski informatički rječnik : s računalnim nazivljem, Školska knjiga, Zagreb, 1993., str. [71.]
- ↑ https://www.ibm.com/ibm/history/ibm100/us/en/icons/dram/
- ↑ Smith, AJ 1982, "Cache Memorijes", 1982, Computing Surveys, Vol. 14, No. 3, rujan