Vdaka skutocnosti, ze rychlost CPU rastla rychlejsie, ako rastla rychlost pamate, tak sa menil aj sposob programovania a architektura pocitacov. Ak by sme mali len procesor a disk, kde procesor je rychly (mikro - mili sekundy na vykonanie programu) a vyzaduje pristup k datam, ktore su ulozene na velkom disku, ktoreho rekacna doba je v milisekundach, tak by sme procesor unudili k smrti, pretoze by na disk vzdy cakal.
V tej dobe, sa prislo s DRAM ako s hlavnou pamatou. DRAM je znacne rychlejsia ako disk a znacne mensia. Tym padom nespomaluje procesor tak, ako disk. Obsahuje podmnozinu dat z disku, zvycajne casti programu, ktore su aktualne vykonavane. Problem je, ze v tom, ze je stale pomala (meriame v mikrosekundach).
Urobime dalsiu iteraciu pridania mensej a rychlejsej pamate a pridame skrytu pamat, cache. Na tu procesor nemusi cakat skoro vobec a to ma este v zalohe registre. Na obrazku su naznacene 2 cache, ktore su dnes uz v radovych pocitacoch bezne (ba aj viac :) ). Pamatajte si, ze kazda pamat obsahuje podmnozinu dat vacsej pamate.
Z vyssie uvedeneho teda vyplyva, ze cim je pamat blizsie k CPU v pamatovej hierarchii, tak tym je
- rychlejsia
- mensia
- podmnozinou vsetkych nizsich urovni (smerom doprava)
- obsahuje minimalne vsetky data vyssej urovne (smer zprava dolava)
Ako bolo povedane, cim je pamat na vyssej urovni v hierarchii, tym je mensia a obsahuje podmnozinu dat nizsej urovne. Z toho ale vyplyva, ze neobsahuje vsetky data. Procesor si moze vyziadat data a tie na prvej urovni bud su (potom sme v pohode), alebo nie su a musime siahnut do nizsej urovne, az kym nedorazime na same pekelne pomale dno. A to k tej pomalosti este musime pripocitat dobu prenosu medzi urovnami. Ak procesor data najde, tak tomu nadavame Hit. Ak ich nenajde, tak to bude Miss a bude to vyjadrovat, ze data neboli najdene na danej urovni a musime mrknut, ci su na niszsej urovni. Nepotrebne data vyssej urovne nahradime datami z nizsej urovne (replacement). Procesor v tejto chvili caka. Aby sme mohli pocitat a vyjadrovat, aky je nas system rychly, tak musime zaviest par pojmov
- Hit - bingo! data najdene!
- Hit rate - pomer uspesnych zasahov (uspesne zasahy / celkove zasahy)
- Hit time - vybavovacia doba vyssej urovne (vybavovacia doba pamate + cas na urcenie hit/miss)
- Miss - hups, data nie su. Hladame na nisej urovni
- Miss rate - pomer neuspesnych zasahov (1 - hit rate)
- Miss penalty - cas na ziskanie dat z nizsej urovne pamate + cas na prenesenie dat do vyssej urovne + cas na dorucenie dat procesoru
Otazkou je, ako vieme, ktore data dat do vyssich urovni a ktore do nizsich. Rozhodujeme sa na zaklade principov lokality a to bud casovej lokality alebo prostorovej lokality.
Princip casovej lokality vravi, ze ak procesor pouziva nejaku polozku v pamati, tak je velka pravdepodobnost, ze ju bude pouzivat znovu. (slucky, vysledky nedavnych operacii a pod.). A preto podla tohto principu umiestnujeme najpouzivanejsie polozky, co najblizsie k procesoru.
Princip priestorovej lokality zase vravi, ze ak procesor pracuje s nejakou polozkou v pamati, tak polozky, ktore su umiestnene v blizkosti prave pouzivanej polozky budu, s vysokou pravdepodobnostou, tiez pouzite (instrukcie, prvky pola a pod.). Tento princip teda vravi, ze mame umiestnovat bloky poloziek iducich za sebou do vyssej urovne pamate.