Pomnilniška hierarhija

Vsi pomnilniki so v današnjih računalnikih urejeni v pomnilniško hierarhijo. Pomnilniki se med seboj razlikujejo po tehnologiji izdelave, ceni in velikosti. Z njihovo ureditvijo v hierarhijo skušamo doseči, da bi velik, poceni, a hkrati počasen pomnilnik videti skoraj tako hiter kot majhen pomnilnik z bistveno hitrejšo in dražjo tehnologijo.

Najbližje centralni procesni enoti, ponavadi kar na istem čipu kot CPE, je majhen in hiter pomnilnik s tehnologijo SRAM. Imenuje se predpomnilnik (ang. cache). Na sliki je označen z L1 (ang. level 1). Običajno se danes med predpomnilnikom L1 in glavnim pomnilnikom RAM uporablja še en nivo (ali dva nivoja) predpomnilnika (L2, L3). Vsak je večji, a počasnejši od prejšnjega. Pomnilnik RAM s tehnologijo DRAM je nato povezan s pomnilnikom za trajno skladiščenje, npr. diskom SSD, ki je največji in najpočasnejši člen v verigi.

Centralna procesna enota v današnjih računalnikih lahko dostopa le do predpomnilnika L1. Če podatkov oz. ukazov, ki jih CPE potrebuje za nadaljevanje izvajanja programa, ni v predpomnilniku L1, jih je vanj treba prenesti iz predpomnilnika L2. Če podatka ni niti v predpomnilniku L2, ga je najprej treba prenesti iz glavnega pomnilnika v predpomnilnik L2 in nato iz L2 v L1. V skrajnem primeru je podatek samo v pomožnem pomnilniku. Pritisni gumb Začni prenos, da si ogledaš, kako se v tem primeru podatek prenaša med nivoji.


Dostope, pri katerih je potreben prenos podatkov s počasnejših nivojev hierarhije, imenujemo zgrešitve v predpomnilniku in se jim skušamo v čim večji meri izogniti. Pri tem nam pomaga lastnost von Neumannovih računalnikov, da pogosto dostopajo do naslovov v pomnilniku, ki so si blizu med seboj, in da se posamezni naslovi v kratkem časovnem intervalu pojavljajo večkrat. Tej lastnosti pravimo tudi lokalnost pomnilniških dostopov.

Lokalnost pomnilniških dostopov je posledica lastnosti von Neumannovih računalnikov, ki smo jo omenili že v prejšnjem poglavju, namreč da centralna procesna enota ukaze iz pomnilnika enega za drugim prevzema z zaporednih naslovov. Prav tako k nastanku lokalnosti dostopov pripomore način programiranja z uporabo podprogramov, zank in tabel, ki smo jih spoznali v poglavjih o programiranju.

Lokalnost je hkrati predpogoj, da pomnilniška hierarhija učinkovito deluje oz. da je takšna ureditev pomnilnika sploh smiselna. Lokalnost s pridom izkoristimo tako, da ob zgrešitvi v predpomnilniku iz glavnega pomnilnika ne prenesemo samo vsebine z enega samega naslova, ampak hkrati prenesemo še vsebino z več sosednjih naslovov. Centralni procesni enoti tako že vnaprej »tlakujemo« predpomnilnik z vsebino, ki jo bo najverjetneje že kmalu potrebovala. S tem ji bistveno pohitrimo naslednje dostope do pomnilnika, vse dokler ne pride do nove zgrešitve v predpomnilniku. Le tako nam uspe z majhnim, hitrim in dragim predpomnilnikom delno prikriti počasnost velikega, poceni pomnilnika.