V dosedanjem opisu zgradbe in delovanja računalnika smo obravnavali posamezne dele, njihovo delovanje in medsebojno povezovanje. Če želimo spoznati računalnike dovolj dobro, da razumemo probleme pri njihovem razvoju in realizaciji, je to tudi edini način. Gledano s stališča računalniškega arhitekta, ki mora izbirati in se odločati za razne rešitve, je znanje o podrobnostih delovanja posameznih delov in celote bistvenega pomena.
Precej drugačne pa so potrebe ljudi, ki računalnike uporabljajo. Gledano s stališča velike večine uporabnikov so podrobnosti o posameznih delih in njihovem delovanju običajno nepomembne, ker vidijo računalnik predvsem skozi lastnosti programskega jezika, ki ga uporabljajo. Nek programski jezik lahko praktično vedno realiziramo na zelo različnih računalnikih, ki s tem postanejo za uporabnika bolj ali manj enaki. Ker je uporabnikov veliko več kot tistih, ki računalnike delajo, se očitno kaže potreba po drugačnem načinu gledanja na računalnik.
To delo je sicer namenjeno ljudem, ki naj bi računalnike delali, ali vsaj razumeli kako se delajo, in se zato v njem podrobnostim ne moremo izogniti. Kljub temu si je koristno ogledati računalnik tudi z druge plati.
Na sliki je računalnik prikazan kot šest-nivojska zgradba. Na vsakem od nivojev vidimo računalnik skozi drugačen programski jezik, ki si ga uporabnik lahko predstavlja kot strojni jezik nekega navideznega računalnika. Pri tem je jezik, ko gremo po nivojih navzdol, bolj in bolj primitiven. Na nivoju 0, imenovanem nivo digitalne logike o jeziku skoraj ne moremo govoriti. Tu v logična vrata in flip-flope organizirana elektronika neposredno izvaja mikroukaze.
Nivo 5 | Višji programski jezik | |
Prevajanje | ↓ | |
Nivo 4 | Zbirni jezik | |
↓ | ||
Nivo 3 | Operacijski sistem | |
↓ | ||
Nivo 2 | Običajni strojni jezik | |
Interpretiranje | ↓ | |
Nivo 1 | Mikroprogramski jezik | |
Interpretiranje | ↓ | |
Nivo 0 | Digitalna logika |
Šest nivojev večine današnjih računalnikov.
Nivo 1 je prisoten pri večini današnjih računalnikov, čeprav ne pri vseh. Vsak ukaz tako imenovanega običajnega strojnega jezika se med izvrševanjem razbije na zaporedje mikroukazov. Mikroprogramski jezik je v bistvu pravi strojni jezik. Ker pa v začetku računalniki tega nivoja niso poznali in ker ga še danes pri nekaterih računalnikih nimamo, se pojem strojni jezik uporablja za nivo 2. Poleg tega so pri vezni računalnikov v mikroprogramskem jeziku napisani programi (imenovani tudi mikroprogrami) vnaprej napisani pri proizvajalcu računalnika in jih uporabniki navadno sploh ne morejo spreminjati.
Na nivoju 2 vidi uporabnik računalnik skozi običajni strojni jezik. Besedo "običajni" uporabljamo zato, ker smo ravnokar videli, da je pravi strojni jezik v resnici mikroprogramski (če je računalnik mikroprogramiran). Nivo 2 je zelo pomemben s stališča računalniške arhitekture, ki je določena z zgradbo in lastnostmi računalnika, kot jih vidi programer na tem nivoju. V običajnem strojnem jeziku ima programer popolen nadzor nad vsemi deli računalnika. Jezik sam pa je tako primitiven, da je programiranje zelo težko in se zato redko uporablja.
Nivo 3 imenujemo nivo operacijskega sistema. Jezik na tem nivoju vsebuje vse ukaze iz nivoja 2, ki so jim dodani novi ukazi za lažje delo z računalnikom (npr. delo z vhodno/izhodni napravami, diagnostika, paraleino izvajanje več programov, zaščita sistemskih programov, itd). Ti novi ukazi so realizirani z interpreterjem, ki mu običajno pravimo operacijski sistem. Ukazi, ki so enaki tistim na nivoju 2, se izvajajo enako kot na nivoju 2. Na tem nivoju imamo pogosto prisotno tudi delitev upor,abnikov na skupine z različno pravico uporabe ukazov. Običajno so nekateri ukazi nivoja 2 na nivoju 3 dovoljeni samo za takoimenovane sistemske programerje, medtem ko so za ostale uporabnike prepovedani. Zanje bi torej veljalo, da nivo 3 ne vsebuje vseh ukazov nivoja 2. Za veliko večino programerjev je nivo 3 najnižji nivo računalnika.
Na nivoju 4 vidi uporabnik računalnik skozi zbirni jezik. Zbirni jezik ni nič drugega kot človeku bližja simbolična oblika jezika nivoja 3 (in s tem tudi nivoja 2, če upoštevamo, da jezik nivoja 3 vsebuje tudi jezik nivoja 2). Programe, napisane v zbirnem jeziku, je potrebno pred izvajanjem prevesti v jezik nivoja 3. To prevajanje opravlja program, ki mu pravimo zbirnik (assembler). Programiranje v zbirnem jeziku je bilo včasih zelo pomembno, danes pa se uporablja razmeroma redko.
Nivo 5 sestavljajo jeziki, ki so namenjeni za uporabo večine programerjev. Te jezike običajno imenujemo višji programski jeziki ali tudi problemsko usmerjeni jeziki. Danes poznamo več sto različnih jezikov te vrste. Najbolj znani med njimi so: FORTRAN, PASCAL, COBOL, PL/1, ALG OL, BASIC, C, LISP, PROLOG, in Java. Programe, napisane v takem jeziku, je potrebno prevesti na jezik nivoja 4 ali nivoja 3. To prevajanje običajno opravlja program, ki mu pravimo prevajalnik (compiler), pri nekaterih jezikih pa se uporablja interpretiranje s programom, ki mu pravimo interpreter. Pogosto lahko v nekem računalniku ugotovimo še višje nivoje. Tako bi na nivoju 6 imeli v enern od višjih programskih jezikov napisane uporabniške programe, ki so prilagojeni določeni aplikaciji in ki imajo definiran svoj jezik. Primer takega uporabniškega programa je npr. v COBOLu napisan program za delo s podatkovnimi bazami.
Vsak nivo si lahko predstavljamo kot navidezni računalnik, ki ima za strojni jezik kar jezik tega nivoja. Dejstvo, da je v resnici potrebno programe, napisane v jeziku navideznega računalnika, na nek način pretvoriti v zaporedje ukazov strojnega jezika, je za večino uporabnikov nepomembno. Pogosto se tega pretvarjanja sploh ne zavedajo - zanje je to, kar smo imenovali navidezni računalnik, v resnici resnični računalnik.
Tak način gledanja na računalnik je koristen za uporabnike, ki lahko brez škode zanemarijo množico zanje ne pomembnih podrobnosti. Da je tako gledar:je možno morajo proizvajalci računalnikov poskrbeti za mehanizem, ki omogoča prehajanje iz enega jezika v drugi. Ta mehanizem lahko, kot je razvidno iz slike in iz predhodnih opisov posameznih nivojev, realiziramo na dva načina: s prevajanjem ali z interpretacijo.
Na spodnji sliki je prikazan postopek prehoda iz programa v jeziku L1 (ta program imenujemo "izvorni program") v običajno primitivnejši jezik L2 s prevajar:jem in z interpretacijo.
Dva mehanizma za prehajanje iz jezika L2 v L1
Razlika med prevajanjem in interpretacijo je pomembna. Pri prevajanju dobimo kot rezultat prevedeni program v jeziku L1, ki mu pravimo tudi "ciljni program" (object program). Ciljni program v jeziku L1 lahko izvršujemo na računalniku s strojnim jezikom L1, medtem ko izvornega programa v jeziku L2 v času izvrševanja ne potrebujemo več. Obstoj ciljnega programa, ki nadomesti izvorni program, je osnovna značilnost prevajanja.
Pri interpretaciji ciljni program ne obstoja. Namesto tega se vsak ukaz izvornega programa sproti prevede v L1 in takoj izvrši. Prevod se ne shrani in izvorni program potrebujemo ves čas izvrševanja. Kadar se isti ukazi večkrat izvršujejo (n.pr. v zankah), se torej že prevedeni ukazi spet prevajajo in izvršujejo.
V obeh primerih potrebujemo poseben program za prevajanje, ki mu pri prevajanju pravimo prevajalnik, pri interpretaciji pa interpreter. Seveda bi namesto s programom lahko prevajalnik ali interpreter realizirali tudi z elektroniko. Razlogi, zaradi katerih je realizacija programska, so predvsem ekonomski. Na večini računalnikov namreč uporabljamo več različnih prevajalnikov in interpreterjev, ki bi zahtevali vsak svojo elektroniko in dosti dražji računalnik.
Tako prevajanje kot interpretacija se veliko uporabljata na današnjih računalnikih. Kot je razvidno s slike, se na spodnjih nivojih vedno uporablja interpretacija, na nivoju zbirnega jezika vedno prevajanje in na nivoju višjih programskih jezikov oboje. Za nekatere jezike (n.pr. BASIC) obstajajo tako interpreterji kot prevajalniki, medtem ko se drugi običajno samo prevajajo (n.pr. FORTRAN, COBPL, C, PASCAL, PLlI) ali samo interpretirajo (n.pr. LISP, APL). Iz opisa delovanja W. očitno, da bo izvrševanje s prevajalnikom dobljenega programa hitrejše od interpretiranja, ker odpade sprotno prevajanje. Nasprotno pa je interpretirane programe mogoče hitreje in lažje popravljati in spreminjati, ker se vpliv sprememb pokaže takoj in ne šele po vmesnem prevajanju.
Da digitalna logika interpretira in ne prevaja mikro ukaze z nivoja 1 je očitno, ker nimamo prevoda. V resnici je govoriti o interpretaciji na tem nivoju nekoliko nenavadno, ker jo opravlja elektronika neposredno. Nobenega dvoma tudi ni, da se ukazi običajnega strojnega jezika interpretirajo z mikroprogrami - to sledi tako iz tega, ker nimamo prevoda, kot tudi iz samega delovanja mikroprogramov. Podrobnosti o višjih nivojih smo podali že pri njihovem opisu.
Delitev računalnika na njegov fizični del, ki mu pri nas pravimo tudi materialna ali strojna ali aparaturna oprema (hardware) in na njegov programski del ( software), je močno prisotna v današnjem računalniš tvu. Poleg tega včasih govorimo tudi o takoimenovanih "trdnih programih" (firmware), ki se vgradijo v računalnik med izdelavo in se kasneje le redko ali nikoli ne spreminjajo. Mikroprogrami so npr. pogosto realizirani na ta način, ki predstavlja vmesno stopnjo med fizičnim in programskim delom.
Delitev na vsebino in njeno fizično predstavitev, v našem primeru na programe in digitalno elektroniko, je pravzaprav nekaj samoumevnega in jo poznamo tudi pri vrsti drugih področij; n.pr. vsebina knjige in knjiga kot fizični papir, vsebina filma in film kot fizični trak, itd. Osnovno ozadje zanjo je želja po osredotočenju na bistveno z začasno zanemaritvijo nepomembnih podrobnosti, kar omogoča spremeniti zapleteno stvar v nekaj, kar je lažje razumljivo.
V nasprotju z drugimi področji pa moramo pri računalnikih omeniti še drugačno vsebino te delitve. Ta vsebina je v tem, da meja med fizičnim delom in programskim delom računalnika ni trdna in jo lahko premikamo. Drugače povedano, vsakega od nivojev na sliki 3.20 lahko realiziramo tako fizično kot tudi programsko.
Za marsikoga je ta trditev presenetljiva, ker je videti samoumevno, da mora biti vsaj nivo O realiziran fizično. Vendar to ni nujno. Pogosto imamo n.pr. nivo O realiziran s programom, ki teče na nekem drugem računalniku. Danes celo velja, da velika večina novih računalnikov prvič deluje prav na ta način. Seveda je res, da v praksi na koncu vedno obstoja nek fizični stroj, ki fizično izvršuje ukaze in ki je danes realiziran z elektroniko. Razumeti pa moramo, da je za večino uporabnikov to dejstvo nepomembno in da bi bil, gledano z njihovega stališča, fizični del lahko realiziran tudi z zobatimi kolesi in parnim strojem. Obratno velja, da bi vsakega od nivojev na sliki lahko v celoti realizirali tudi fizično. Tak računalnik bi bil sicer veliko dražji od običajnih in ne dosti zmogljivejši, vendar ni nobenega dvoma, da ga je mogoče zgraditi. V resnici je bilo narejenih nekaj eksperimentov računalnikov, ki so imeli za strojni jezik enega od višjih programskih jezikov. Razlogi za to, da se niso uveljavili, so ekonomski - njihova zmogljivost ni toliko večja od običajnih rešitev, da bi upravičila višjo ceno.
Primer za kompromise pri odločitvah o tem kaj naj dela fizična oprema in kaj programska, so operacijski sistemi. Operacijski sistem je program, ki vodi in nadzoruje izvajanje programov ter služi kot vmesnik med uporabnikom in računalnikovo strojno opremo. Z njim želimo doseči naslednja dva cilja:
Vse funkcije operacijskega sistema bi bilo namesto s programom mogoče realizirati fizično, vendar je v večini primerov programska izvedba. veliko ekonomičnejša. Pač pa se izvedbe istega operacijskega sistema nil različnih računalnikih pogosto razlikujejo v tem, da so nekatere funkcije na enih realizirane programsko, na drugih pa fizično. Večji računalniki praviloma uporabljajo več fizičnih rešitev kot manjši; kljub temu so te za uporabnika običajno videti enake. Veliko današnjih uporabnikov računalnikov sploh ne ve natančno, kaj od tistega, kar delajo, opravlja fizična oprema in kaj programska oprema. Težko bi tudi rekli, da bi s poznavanjem takih podrobnosti kaj pridobili. Pač pa je odločanje o tem, kaj naj bo realizirano fizično in kaj programsko, osnovna naloga za ljudi, ki računalnike razvijajo. Tako za prve kot za druge ponovimo našo ugotovitev, ki se bo še večkrat pojavljala v tem delu:
Fizična in programska oprema sta logično ekvivalentni.
Drugače povedano: vse, kar lahko naredimo programsko, lahko naredimo tudi aparaturno in obratno. To pa tudi pomeni, da morajo ljudje, ki se ukvarjajo z računalniško arhitekturo, poznati oboje.
SERŠ Maribor, Strokovna gimnazija, leto: 2004/05, avtor: Kristjan Gomboc