e-gradiva     Sistemi Motorola Omrežja      
  logotip  
SERŠ Maribor    

Registri

Glavni pomnilnik naj bo čim večji. Zato mora biti zgrajen iz elementov, ki so cenejši in torej počasnejši od tistih v CPE. Ti pomnilniki so registri.

CPE vsebuje registre. Registre v CPE lahko razdelimo v dve skupini glede na to, ali so vidni oziroma dostopni gledano s strani programerja. V prvi skupini so programsko dostopni registri, v katere programer v skladu s potrebami shranjuje operande in nad katerimi izvaja operacije. V drugi skupini so registri, ki jih programer ne vidi, torej programsko nedostopni, vendar so nujno potrebni za delovanje CPE. Taki registri so na primer naslovni (adress register, AR), podatkovni (data register, DR), in ukazni register (instruction register, IR). Poleg njih pa še drugi, ki so skriti v logiki ritmetično-logične enote in kontrolne enote in na katerih vsebino programer ne more neposredno vplivati (čeprav ukazi vplivajo na registre posredno).

Ko govorimo o programsko dostopnih registrih mislimo na tiste registre, ki neposredno služijo za reševanje problemov in v katerih so shranjeni operandi nad katerimi se izvajajo operacije. Ti registri so nujno potrebni in z njimi je mogoče doseči pomembne prednosti (nekateri registri se nahajajo v CPE in so torej zgrajeni v hitrejši tehnologiji kot glavni pomnilnik. Dostop do operandov in ukazov v registrih je hitrejši kot dostop do operandov v pomnilniku. Ukazi, ki uporabljajo operande v registrih, se zato izvršujejo hitreje kot tisti z operandi v pomnilniku.

Registrov je malo, zato je v ukazih potrebno bistveno manj bitov za določanje operanda v registru kot za določanje operandov v pomnilniku. Od tod sledi, da so ukazi krajši in zasedajo manj prostora v pomnilniku.Kadar govorimo o registrih v CPE, običajno mislimo na programsko dostopne registre. Te spet lahko razdelimo v dve skupini:

  1. V prvi skupini so registri, ki neposredno služijo za reševanje problema v skladu z določenim algoritmom. V njih so shranjeni operandi nad katerimi se izvajajo operacije. Ker je pri večini problemov potrebno izvajati operacije tudi nad naslovi (npr. pri uporabi podatkovnih struktur kot so polja, zapisi in seznami), tudi naslovi pogosto nastopajo kot operandi. Nekateri računalniki imajo za računanje z naslovi posebne registre, pri večini pa se isti registri uporabljajo za oboje.
  2. V drugi skupini so registri, ki določajo način delovanja CPE in tudi drugih delov računalnika. S spreminjanjem njihove vsebine lahko programer izbira parametre kot so prekinitvena prioriteta, zaščitena področja v pomnilniku, različni načini delovanja nekaterih ukazov, preslikave pri navideznem pomnilniku, itd. Ti registri se običajno nastavijo po vklopu računalnika in se kasneje razmeroma redko spreminjajo. Poleg tega je v mnogih sistemih dostop do teh registrov dovoljen samo sistemskim programerjem, medtem ko ostali programerji ne morejo vplivati nanje.

zgradba CPE

Ko govorimo o programsko dostopnih registrih običajno mislimo na registre iz prve skupine. Ti registri niso nujno potrebni in poznamo tudi računalnike, kijih nimajo. Tak je bil na primer EDVAC in še več kasnejših, vključno z nekaterimi današnjimi. Vendar pa velika večina računalnikov ima programsko dostopne registre v CPE, ker je z njimi mogoče doseči pomembne prednosti. Za to sta pomembna predvsem naslednja dva razloga:

  1. Registri se nahajajo v CPE in so torej zgrajeni v hitrejši tehnologiji kot glavni pomnilnik. Dostop do operandov in ukazov v registrih je hitrejši kot dostop do operandov v pomnilniku. Ukazi, ki uporabljajo operande v registrih, se zato izvršujejo hitreje kot tisti z operandi v pomnilniku.
  2. Registrov je malo, zato je v ukazih potrebno bistveno manj bitov za določanje operanda v registru, kot za določanje operanda v pomnilniku. Od tod sledi, da so ukazi krajši in zasedajo manj prostora v pomnilniku. V ekstremnem primeru CPE z enim samim registrom na primer sploh ne potrebujemo bitov za to informacijo, če se dogovorimo, da se vsi ukazi nanašajo na operande v tem registru.

Posledica uporabe registrov je, da so programi običajno pisani na naslednji način:

  1. prenesi potrebne operande iz glavnega pomnilnika v registre CPE.
  2. izračunaj želeni rezultat v CPE
  3. shrani rezultate iz registrov CPE v glavni pomnilnik.

Takoj povejmo, da se prednosti registrov pokažejo samo, če izračun rezultata v točki 2 zahteva več ukazov. Ker zelo pogosto lahko napišemo program tako, da rezultate prejšnjega ukaza pustimo v registrih in jih uporabljamo kot operande v naslednjih ukazih (brez njihovega shranjevanja v glavni pomnilnik), je to v večini primerov res. S tem pa poleg večje hitrosti in krajših ukazov pridobimo še nekaj – zmanjša se namreč število bitov, ki jih je potrebno prenašati med CPE in glavnim pomnilnikom. V sistemih, kjer ima do pomnilnika dostop poleg CPE še več drugih delov, je tako zmanjševanje "prometa" pomembno za večjo zmogljivost računalnika.

Nekateri računalniki z registri imajo poleg ukazov z operandi v registiih tudi ukaze, ki izvajajo operacije neposredno nad operandi v glavnem pomnilniku. Vedeti moramo, da se tudi pri teh ukazih operandi najprej prenesejo v CPE, operacija izvrši v CPE in nato prenese rezultat nazaj v glavni pomnilnik, čeprav programer tega izrecno ne zahteva. V določenih primerih so taki ukazi koristni, vendar se pri njihovi uporabi že omenjene prednosti registrov seveda izgubijo. Če bi na primer napisali program, ki uporablja samo take ukaze, bi s tem dosegli, da računalnik deluje kot da nima programsko dostopnih registrov.

Vsi programsko dostopni registri skupaj tvorijo takoi menovano stanje CPE (CPU context). Med izvajanjem programa se stanje CPE seveda spreminja. Če izvajanje programa prekinemo, na primer zato, da izvedemo nekega drugega, moramo pred pričetkom izvajanja drugega programa shraniti trenutno stanje CPE. S tem omogočimo, da lahko po zaključku drugega

Programa nadaljujemo prvega tako, da shranjeno stanje prenesemo nazaj v registre. V splošnem lahko na ta način dosežemo, da CPE izmenično izvaja poljubno število programov ne da bi to vplivalo na njihove rezultate. Temu "preklapljanju" med programi, ki mora vsebovati shranjevanje stanja CPE, pravimo preklapljanje stanja (context switching).

Preklapljanje stanja je na večini računalnikov razmeroma pogosto opravilo. Veliko CPE ima zato vgrajene posebne mehanizme, ki preklapljanje poenostavijo in posešijo. Danes se v ta namen največkrat uporablja sklad. Drugo možnost predstavlja uporaba večkratnih naborov registrov (angl.multiple set registers). Na računalnikih z večkratnimi nabori registrov imamo v CPE več identičnih skupin registrov od katerih je v vsakem trenutku delujoča in za programerja vidna samo ena. Ostale skupine so nevidne, tako daje CPE za programerja videti enako kot, da ima samo eno skupino registrov. Pri preklopu se vključi naslednja skupina, vsebina prejšnje pa ostane nedotaknjena. Če želimo nadaljevati prejšnji program preprosto vključimo njegovo skupino registrov.

Zelo hitro preklapljanje stanja je največja prednost večkratnih naborov registrov. Poleg tega jih je mogoče realizirati tako, da se deloma prekrivajo – del registrovene skupine je lahko podmnožica registrov druge skupine. S tem lahko poenostavimo in pospešimo prenos parametrov med programi, na primer pri klicih procedur ali podprogramov. Cena za te prednosti je seveda v večjem številu registrov, ki jih mora vsebovati CPE. Zato ni presenetljivo, da jih srečujemo prevsem pri novejših računalnikih. Zaradi uporabe vezij velike gostote integracije, namreč cena za veliko število registrov danes ni več tako velika.

SERŠ Maribor, Strokovna gimnazija, leto: 2002, avtor: Leon Borko