Protsessor

Kõik protsessorid, nii erinevad kui nad ka poleks, töötavad ühtel ja samal üldisel põhimõttel. Selleks üldiseks aluseks on kahendloogika.

Kahendloogika

Ühtede ja nullide esitamiseks on kasutusel kahte erinevat pinget: tavaliselt 0V ning +5V (vastavalt 0 ja 1 tähistuses). Põhiliseks ehituskiviks protsessoris on erinevad loogikaväravad (gates), mis sooritavad erinevaid loogikatehteid, õigupoolest kõiki tehteid, mida üldse arvuti sooritada suudab. Ühte väravasse suubuvad üks või kaks juhet ning väljub üks juhe.

Näiteks inverter on värav, kuhu suubub üks juhe (joonis 1).

inverter

Kui A on 0, siis Q on 1 ning kui A on 1 siis Q on 0 (tegelikult muidugi vastavad pinged +5V ja 0V, kuid lihtsuse huvides räägime edaspidi nullidest ja ühtedest.

Näiteks kahe sisendiga väravast võiks olla NAND värav (lühend sõnadest NOT AND) (joonis 2):

NAND värav

NAND värava puhul saab Q väärtuseks 0, kui A ja B mõlemad on 1-ed, muudel juhtudel on Q väärtuseks 1.

Sarnaste väravatega võib koostada ka kõikvõimalikud ülejäänud loogikatehted nagu AND, OR, NOR, NAND, XOR, XNOR ja NOT. Tegelikult saab NAND ja NOR väravate abil konstrueerida kõik teised väravad. Näiteks on lihtne konstrueerida NAND värava abil inverter (joonis 3):

NOT kasutades NAND-i

Baasväravatest/tehetest saab edasi konstrueerida juba mitmesuguseid elektriskeeme, mis juba midagi märksa enamat teevad. Näiteks liitjad (adder), mis liidavad kaks arvu ning nn. flip-flop-id, mis suudavad "meelde jätta" ühe biti.

Väravad päriselus

Kuidas aga ehitada selliseid kahend-väravaid ka reaalselt?

Kõige lihtsam moodus, millega alustesid ka esimeste loogikaskeemide ehitajad, on kasutada releesid (elektromagneteid). Väga lihtsalt saame ehitada näiteks inverteri (joonis 4):

inverter

Jooniselt on näha, et kui juhtmes A on pinge 0V, siis magnet ei hakka tööle ning Q-sse jõuab pinge +5V, kui aga juhtmes A on pinge, siis hakkab magnet tööle ning katkestab voolu jõudmise väljundisse Q.

Analoogselt saab implementeerida ka AND, OR ja kõiki teisi väravaid. Releede kasutamisest loobuti arvutite loomisel kiiresti ning võeti kasutusele lambid. Kuid ka lambid polnud eriti efektiivsed ning seetõttu kasutatakse tänapäeval protsessorites imetillukesi ja imeväikse voolutarbega transistoreid.

Protsessori ülesehitus

Protsessori õlul lasuvad peamiselt kaht liiki ülesanded: info liigutamine mälu ja protsessori vahel ning selle info töötlemine.

Kell

Süsteemne kell dikteerib protsessori taktsageduse ja määrab sellega osaliselt viimase töökiiruse. Kella töö on äärmiselt lihtne: kindlate ajavahemike tagant vahetatakse protsessorile antavat pinget 0V, 5V, 0V, 5V jne jne... Kell on protsessori töötamiseks fundamentaalse tähtsusega, võimaldades protsessoril täita kordamööda erinevaid operatsioone - ilma kellata saaks protsessor hakkama vaid ühe tehtega.

Siinid

Info liigutamiseks on protsessor ühendatud mäluga läbi siinide. Peamised siinid on andmesiin (data bus) ning aadressi siin (address bus). Aadressi siinile pannakse mäluaadress, mille poole protsessor pöördub ning andmesiinile informatsioon, mida saadetakse. Lisaks on väike ühebitine siin, mis määrab, kas andmeid loetakse mälust või kirjutatakse sinna.

Registrid

Kui info jõuab mälust protsessorisse, siis ei lähe ta otsekohe töötlemisele vaid kirjutatakse esmalt registrisse. Registrid on protsessori kiibil paiknevad erilised mälupesad, mis koosnevad eelpool mainitud flip-floppidest ja töötavad protsessoriga samal taktsagedusel - olles seega kõige kiiremad info talletamise paigad. (Registrite mälu kutsutakse tihti zero-wait-state memory-ks, rõhutamaks selle erinevust harilikust mälust, mis töötab protsessorist hulka aeglasemalt ja mille järgi viimane tihti ootama peab.)

Registrid jagunevad üldkasutatavateks (need millele näiteks programmeerija oma programmiga ligi pääseb) ning spetsiaalseteks, mis hoolitsevad süsteemi toimimise eest. Nii näiteks ühel lihtsustatud x86 protsessoril on 4 üldkasutatavat registrit AX, BX, CX ja DX ning süsteemseteks registriteks on IP (Instruction Pointer), kus hoitakse järgmise instruktsiooni mäluaadressi ning Flags register, kus on kirjas mitmesugused süsteemsed staatused (lipud), teiste seas näiteks eelmise võrdlustehte tulemus.

Täis- ja ujukomaarvudega arvutused

Lisaks registritele on ühes korralikus protsessoris kindlasti ka osa, mis tegeleb arvutamisega. Päris kindlasti on olemas täisarvudega arvutuste tegemise moodul, aga praktiliselt kõigil tänapäeva protsessoritel on ka integreeritud ujukomaarvudega opereerimise moodul (FPU - Floating Point Unit). Vanematel protsessoritel polnud see sugugi alati nõnda. Esialgu tuli teha reaalarvulisi arvutusi kasutades harilikku täisarvumoodulit, sellised arvutused pole aga kaugeltki kiired. Edasi võeti kasutusele eraldiseisev lisaprotsessor nn. Math-coprocessor ehk matemaatikaprotsessor.

Dekooder

Kui lisada eelpoolmainitutele ka instruktsioonide dekodeerimisega tegelev moodul, siis saamegi juba midagi töötava protsessori taolist. Dekooder, nagu nimigi arvata võib, dekodeerib instruktsioonid ja "ütleb" protsessorile, mida ta tegema peab.

Kontroll-moodul

Protsessor juhib arvuti tööd, aga protsessori tööd juhib omakorda protsessori sisene kontroll-moodul (control unit). Selle ülesanne on organiseerida, et kõik toimuks korrapäraselt - dekodeerimine, andmete lugemine, arvutamine ja salvestamine. Kontroll-moodul juhib kõiki teisi protsessori osasid.

Puhvrid

Nagu juba mainitud, on protsessori vaatevinklist mälu alati ääretult aeglane, aga suure osa protsessori tegevusest muudustab mälusse kirjutamine ning sealt lugemine. Niiviisi peab protsessor pidevalt mälu järgi ootama. Programmidel on aga tendents kasutada korduvalt ühtesid ja samu mäluaadresse.

Kujutage ette raamatukoguhoidjat, kes töötab raamatukogus, kus on 1000 erinevat köidet. Raamatukogust võidakse küsida suvalist raamatut ning siis kaob too isik pikaks ajaks riiulite vahele ning väljub lõpuks koos soovitud eksemplariga. Mõned raamatud on aga populaarsemad kui teised ning saab selgeks, et pole mõtet viia alati raamatut kohe tagasi tema esialgsele kohale, kui juba järgmine külastaja suure tõenäosusega sedasama raamatut soovib. Niiviisi moodustab raamatukoguhoidja endale väikese riiuli, kuhu paneb alguses kõik tagastatud raamatud, et neid oleks vajadusel sealt jälle hea ja kerge võtta.

Samamoodi toimivad ka protsessori puhvrid. Protsessori "lähedal" asub väikene hulk mälu, kus talletatakse viimati kasutatud andmed. Kui protsessor saab instruktsiooni lugeda registrisse AX bait aadressilt 234, siis ei pöördu ta kohe mälu poole vaid "küsib" alguses puhvrist, ega sellel aadressil asuv bait juba seal olemas pole ning alles siis, kui puhvris soovitud andmed puuduvad, pöördutakse mälu poole.

Tänapäeaval kasutavad protsessorid reeglina koguni kahte puhvrit (primary cache ja secondary cache), millest esimene on väiksem ja kiirem ning teine natukene suurem ja aeglasem. Sellisel juhul pöördub protsessor alguses primaarse puhvri poole, siis teise puhvri poole ning alles seejärel mälu juurde.

Iseloomulikud parameetrid

Kõige olulisem protsessori omadus on tema töökiirus ehk see, kui palju instruktsioone ta suudab ühe ajaühiku jooksul täita. Kaks olulist komponenti, mis määravad töökiiruse on:

  1. protsessori taktsagedus (mõõdetakse Hertsides)
  2. protsessori arhitektuur (praktiliselt mittemõõdetav)

Taktsagedus

Taktsagedusega on lihtne, kui protsessoritel on sama arhitektuur, siis kõrgema taktsagedusega protsessor on kiirem. Siinkohal ei tohi segamini ajada protsessori töökiirust ja süsteemi töökiirust. Kui 2 GHz taktsagedusega protsessor on kaks korda kiirem kui sarnane 1 GHz taktsagedusega protsessor, siis praktiliselt mitte kunagi ei muutu arvuti kaks korda kiiremaks vaid sellest, kui vahetada välja vaid protsessor topelt kiirema vastu, sest kiirusvõit võib kahaneda nullilähedaseks, kui mälu on protsessoriga võrreldes väga aeglane ning kiire protsessor peab lihtsalt endamuse ajast mälu järele ootama.

Tihtipeale tähtsustatakse protsessori taktsagedust ka liialt üle, sest idee poolest ju kiirema taktsagedusega protsessor teeb oma tööd kiiremini, aga näiteks AMD protsessorid töötavad üldiselt madalamal sagedusel kui sama kiired Inteli protsessorid.

Arhitektuur

Arhitektuuriga on märksa keerukamad lood.

Esmalt võib arhitektuuri järgi jagada protsessorid perekondadesse: x86, SPARC, PowerPC, MIPS jpt. Perekondadevahelised erinevused on alati piisavalt suured selleks, et sama tarkvara ilma ümberkompileerimata erinevate arhitektuuride peal ei jookse. Tihtipeale pole abi ka lihtsast ümberkompileerimisest ja programme tuleb vastava süsteemi tarbeks spetsiaalselt kohandada.

Aga ka ühe arhitektuuri siseselt võivad olla suured probleemid ühildavusega. Eeskätt on see teada-tuntud kõige levinuma x86 perekonna koha pealt, millel on vanust juba oma 20 aastat ning esimesed protsessorid olid 16 bitised. 32 bitistele sama perekonna protsessoritele kirjutatud programm 16 bitisel protsessoril aga ei jookse. Üldiselt dikteerib kasutatav tarkvara, millise perekonna arhitektuuriga protsessori me endale ostame.

Teine, märksa selgem, tunnus arhitektuuri juures on registrite suurus. Kui räägitakse 8, 16, 32 jne bitistest protsessoritest, siis peataksegi silmas registrite suurust. Registrite suurus määrab, kui suurte arvudega protsessor suudab kiireid arvutusi teha. Reeglina on ka 16 bitine protsessor võimeline ka näiteks 32 bitiste arvudega arvutama, aga teeb seda tunduvalt aeglasemini kui 32 bitine protsessor. Ka 64 bitine protsessor suudab loomulikult 32 bitiste arvudega arvutada, kuid jällegi on see aeglasem kui 64 bitiste puhul, õnneks sugugi mitte nii aeglane kui 16 bitine masin.

Loomulikult vajavad näiteks 32 ja 64 bitine protsessor ka just neile mõeldud emaplaati ja mälu.

CISC ja RISC

ON kaks erinevat suunda protsessorite instruktsioonide kodeerimiseks:

Omal ajal oli mälu kokkuhoid väga terav teema ning protsessorite loojad üritasid ka oma protsessoreid hõlpsamini programmeeritavaks muuta tuues sisse mitmesuguseid kõrgema taseme operatsioone. Aja jooksul sai aga selgeks, et aeg mida protsessorid kulutasid keerukate CISC instruktsioonide tõlkimiseks polnud seda vaeva väärt. Selleks ajaks oli aga näiteks Inteli x86 perekond ennast CISC-i külge aheldanud. Nõnda ongi läinud nii, et uuemad x86 protsessorid, nagu näiteks Pentium 4, on oma sisemuses tegelikult RISC arhitektuuriga, ning protsessorile antavad CISC käsud tõlgitakse sobivateks RISC instruktsioonideks.

MIPSid ja FLOPSid

Märksa konkreetsemad kiiruse mõõtühikud kui taktsagedus, on see, kui palju operatsioone protsessor suudab ajaühikus täita. Sellise mõõtmise tulemused sõltuvad muidugi rangelt arhitektuurist (eelkõige protsessori instruktsioonidest (instruction-set)). Kasutusel on kaks mõõtu:

FLOPS-e kasutatakse rohkem teadusarvutite võrdlemisel (näiteks koostatakse nende põhjal Superarvutite edetabeleid), harilike personaalarvutite puhul pole see näitaja niivõrd oluline - märksa olulisem on nende puhul MIPS-ide hulk.

Protsessorite võimekuse testimine

Üldiselt annavad parima võrdluse erinevate protsessorite kiirusest ja võimekusest mitmesugused jõudlustestid (benchmark). Samas mõõdavad erinevad jõudlustestid erinevaid parameetreid, ning protsessor, mis tõuseb esimeseks täisarvudega arvutamises langeb viimaseks ujukomaarikmeetikas. Siinkohal tuleb muidugi vaadata, millist protsessorit tegelikult vajatakse - ujukomaarvutused leiavad massiivset kasutamist mitmesugustes multimeediaprogrammides, märksa väheb aga harilikus kontoritarkvaras.

Protsessoritootjad

Intel

Intel on kõige suurem protsessoritootja ning ühtlasi ka kõige esimese protsessori looja. Selleks oli Intel 4004, mis suutis vaid liita ja lahutada ning sedagi kõigest 4 bitiga. Kuid ometi oli tolle aja kohta hämmastav, et kõik see keerukas tehnoloogia asus ühel kiibil. See esimene kiip valmis 1971 aastal.

Edasi järgnesid juba mitmed märksa populaarsemad protsessorid: 8080, 8086, 80286, 80386, 80486, Pentium, P Pro, PII, PIII, P4, Celeron (mõeldud väiksema vajadusega masinatele, eelkõige sülearvuteile), Itanium (64 bitine).

Vahepeal praktiliselt ainuvalitses Intel PC protsessoriturgu. Nüüd on aga tema praktiliselt ainsaks konkurendiks tõusnud AMD.

AMD

Advanced Microdevices Inc. alustas oma protsessoritootja teekonda sellega, et tagurpidi-arendas (reverse-engineered) Inteli 8080 protsessori. Esimene AMD päris oma protsessor oli K5, mis loodi võistlemaks Inteli Pentium protsessoriga. Järgnesid K6, K6-2, k6-III, Athlon, Duron (samalaadne ideoloogia Inteli Celeroniga). AMD praegune põhistrateegia on 64-bitised protsessorid (AMD64, Opteron, Athlon 64) mille osas ta tugevasti konkureerib Inteliga.

Cyrix

Cyrix alustas Inteli 386 ja 486 protsessoreid matkivate toodetega 486SLC ja 486DLC. Cyrix konkureeris Intel Pentiumi ning AMD protsessoritega. Cyrixi eluiga jäi lühikeseks, ent ometi suutis ta oma odavate protsessoritega sundida Inteli turule paiskama oma odavama Celeroni perekonna.

Bibliograafia