CISC-protsessor

**Kompleksne käsukomplektne arvuti** (ingl *complex instruction set computer*, lühend **CISC**) on mikroprotsessor, kus üksikute käskudega saab teostada mitut madalama taseme toimingut. CISC-protsessorid on võimelised käivitama keerukaid käske, kasutades vähem koodiridu. Selle arhitektuuriga protsessorid on üldiselt keerulisema ehitusega kui RISC-protsessorid.

## Mis on protsessor?

Protsessor (ingl *Central Processing Unit*, lühend CPU) on arvuti komponent, mis loeb mälust käske ja töötleb andmeid nii, et terve arvuti saaks töötada. Protsessorit kutsutakse ka arvuti ajuks. Protsessor on umbes tikutopsi suurune ristkülikukujuline arvutikiip, millest ulatuvad välja kümned metallnõelad, millest igaüks suunab kiibile elektroonilisi signaale ehk taktsignaale. Kiip ühendatakse arvuti trükkplaati, kus ta suhtleb mälu, kõvaketaste, ekraanide ja muude protsessoriväliste seadmetega. Taktsignaali järgi toimub protsessorisse käskude lugemine ja nende täitmine. Taktsignaali sagedus määrab ära protsessori töökiiruse, mida mõõdetakse tänapäeval gigahertsides.

Protsessorite ülesandeks on käivitada masinkoodi ja koordineerida arvuti teiste üksuste tööd. Protsessorid jaotuvad käsustiku arhitektuuri alusel kolmeks: CISC-protsessorid, RISC-protsessorid ja ARM-protsessorid. CISC-protsessor on mitmekülgse käsustikuga protsessor ja RISC-protsessor on vähendatud käsustikuga protsessor. ARM-protsessor on RISC-protsessorite edasiarendus, mida kasutatakse enamasti mobiilseadmetes.

Protsessor on ühendatud arvutisüsteemiga läbi juht-, andme- ja aadressisiini abil. Programmi täitmiseks käib protsessor läbi järgmised etapid: käsu lugemine mälust, käsu dekodeerimine operatsioonideks, käsu täitmine, tulemuse salvestamine. Programmi täitmisel võivad esineda ka erandjuhtumid, kus süsteem reageerib välistele sündmustele, mis pole programmile teada. Näiteks suhtlemine operatsioonisüsteemidega, andmevahetus erinevate seadmetega, silumise operatsioonid, käsu viga, jne. Neid erandeid nimetatakse katkestusteks, mille korralikuks haldamiseks on vaja spetsiaalseid käske, mis suudavad ajutiselt peatada programmi rakendamise, käivitada alamprogrammi, mis seda katkestust haldab ja kui rutiin on lõppenud, siis ka taastada ajutiselt peatatud programm samast punktist, kust see peatati.

### Millest protsessorid koosnevad?

Protsessorid koosnevad tavaliselt järgmistest komponentidest:
* Sisemised andmeregistrid
* Juhtregistrid
* Töötlemisplokk (ingl *Processing Unit*), mis sisaldab aritmeetilise loogika üksust (ing *Arithmetic Logic Unit*, lühend ALU). Töötlemisplokk suudab teostada nii lihtsaid arvutustehteid, nagu liitmine, lahutamine, korrutamine, kui ka keerulisi arvutustehteid tänu ujukoma seadmele (ingl *Floating Point Unit*, lühend FPU), mis ei ole sooritavad ALU abil. Töötlemisplokk kasutab spetsiaalseid registreid: olekuregister ja akuregister.
* Juhtplokk (ingl *Control Unit*), mis dekodeerib käsu operatsioonideks ja annab käsu täitmiseks protsessori teistele osadele vastavad korraldused. Juhtplokk kasutab spetsiaalseid registreid: programmiloendur ja käsuregister.
* Käsustik

Registrid jagunevad omakorda:
* Üldotstarbelisteks registriteks, mis on mõeldud käskude poolt kasutatavate andmete ja/või operandide hoidmiseks.
* Spetsiaalseteks registriteks:
:* Akuregister, mis hoiab käskude täitmise vahetulemusi.
:* Käsuloendur, mis sisaldab järgmise käsu mäluaadressi. Seda suurendatakse automaatselt iga käsutsükli ajal.
:* Käsuregister, mis sisaldab mälust loetud käske.
:* Olekuregister, mis sisaldab protsessori tehete teostamise olekut.
:* Pinuviit, mis sisaldab järgmist registrite seisu vaba aadressi.

### Operatsioonide tegemine samaaegselt

Kui tavaliselt tehakse protsessoris operatsioone ühe kaupa, siis tegelikult saab operatsioone teha ka samaaegselt. Selle tehnika nimi on toru ehk konveier, kus ühe elemendi väljund on järgmise elemendi sisendiks. Tavaliselt on arvutites konveieri registrid, kuhu pärast igat etappi salvestatakse täidetud käskude tulem, et järgmised käsud saaksid kasutada samu andmeid. Selle korralduse puhul saab protsessor täita käske ühe takti jooksul. Käsu töötlemise saab jagada viieks etapiks (käsu lugemine, käsu dekodeerimine, käsu täitmine, mälu poole pöördumine ja tulemuste salvestamine), mille tulemusena saame protsessoris korraga täita viit käsku, mis kõik on samal ajahetkel erinevates käsu täitmise etappides. Erinevate etappide täitmisele kuluv aeg on erinev, seega kui mõne etapiga saadakse kiiremini valmis, siis on seade ülejäänud aja ooterežiimis. Seega konveieri kasutamine pole eriti efektiivne, kui kõik etapid on väga erinevate pikkustega. Kõige aeganõudvam operatsioon on mälust lugemine, mis on umbes 10 korda aegavõtvam, kui protsessorisisesed operatsioonid.

Tänapäeval on konveierite kasutamine maailmas laialdaselt levinud pigem RISC- ja ARM-protsessorite puhul, sest CISC-protsessorid tegutsevad erineva arvu bittidega, mis teeb nende saatmise järgmisesse sammu ja kohe nendega mingi muu käsu alustamise raskemaks.

## Ajalugu

1960. aastatel hakkasid tehnoloogiatööstuses populaarseks saama esimesed transistoripõhised arvutikiibid. See viis ka mikroprotsessorite ja CISC arhitektuurini. CISC-protsessorid võeti kasutusele 1970. aastate alguses, kus seda kasutati lihtsate elektrooniliste platvormide jaoks nagu kalkulaatorid, videomängud, stereosüsteemid. CISC-protsessorid loodi algselt, siis, kui mälu oli väga kallis ja suhteliselt aeglane.

CISC-protsessorid olid abiks koodi lihtsustamisel ja lühendamisel, et vähendada mälunõudlust. Kuna CISC-protsessoris saab teha üksikute käskudega mitu madalama taseme toimingut, siis muudab see käsustiku lühikeseks, kuid keerukaks.

1971. aastal lõi Intel esimese kõigile kättesaadava mikroprotsessori, mis kannab nime Intel 4004. Sellel pisikesel mikroprotsessoril on andmete laius 4 bitti, 16 pinni ja mikroprotsessori enda suurus 10 mikromeetrit. Intel 4004 polnud aritmeetiliste arvutuste jaoks üldse praktiline, sest 4-bitine seade suudab ainult arvutada vahemikus -8 kuni +7. Aga sellest hoolimata leidis see mikroprotsessor rakenduse seadmete juhtimisel.

Aasta hiljem tuli Intel välja oma uue 8-bitise mikroprotsessoriga, mille nimeks on Intel 8008. Kohe pärast seda tuli välja ka Intel 8080, mis oli esimene kaubanduslikult populaarne 8-bitine mikroprotsessor. Ka seda protsessorit kasutati vaid seadmete juhtimiseks, sest see polnud aritmeetiliste arvutuste jaoks samuti piisavalt praktiline oma arvutusvahemikuga -128 kuni +127.

Umbes 1978 lõi Intel esimese 16-bitise mikroprotsessori Intel 8086, mis oli esimene x86-protsessor. 16-bitise seadme arvutusvahemik on -32768 kuni +32767. Tänu sellele muutus see mikroprotsessor väga populaarseks mitte ainult seadmete juhtimisel, vaid ka aritmeetiliste arvutuste tegemisel. Intel 8086 protsessori kiirus oli neli korda kiirem, kui Intel 8080 kiirus.

## CISC ja RISC

CISC-protsessoreid kasutatakse enamasti lauaarvutites, sülearvutites, turvasüsteemides ja koduautomaatika tehnoloogias ning RISC-protsessoreid kasutatakse enamasti nutitelefonides, mängukonsoolides, MP3-mängijates jne.

Tänapäeval on CISC ja RISC protsessorite vahel vähem erinevusi kuna nad võtavad üle üksteise omadusi.
CISC-protsessorite näited: Intel x86 protsessorid, AMD x86 protsessorid, Motorola 68000 pere, CDC 6600, IBM System/360, VAX, PDP-11.

RISC-protsessorite näited: IBM Power Arcitecture, MIPS, ARM, HP PA-RISC, Sun SPARC, Sun UltraSPARC, DEC Alpha.

### Koodi pikkused

Oletame, et meil on operatsioon A = B + C.

RISC koodis toimuks see nii:
 Load R2, B
 Load R3, C
 Add R4, R2, R3
 Store R4, A

CISC koodis toimuks see nii:
 Move A, B
 Add A, C

## CISC

### Eelised ja puudused

Eelised:
* Lubab lihtsaid väikesi skripte
* Keerulised käsud on loetavad
* Enamik koode on kirjutatud CISC-s rakendamiseks

Puudused:
* Võrreldes RISC-protsessoritega on CISC-protsessorid väga aeglased
* Suuremad, kuna sisaldavad rohkem transistoreid
* Ühel koodireal võib kuluda mitu tsüklit, mis vähendab tõhusust
* Keerukamad ja kallimad kui RISC-protsessorid

### Erinevad kasutusalad

Kuna CISC-protsessoritel on keerulised juhised ja käsud, siis kasutatakse neid ka keerulisemates seadmetes nagu lauaarvutid, sülearvutid jne.
* Intel ja AMD x86 protsessorid - Inteli ja AMD protsessorid on ühed tuntumad protsessorid üle terve maailma. Kasutatakse laua- ja sülearvutites.
* Motorola 68000 pere - Kasutati erinevates lauaarvutites ja mängukonsoolides. Tänapäeval ei ole enam populaarne.
:* Mängukonsool Sega Genesis
:* Mängukonsool Atari Jaguar
:* Lauaarvuti Apple Macintosh (enne kui Apple läks üle ARM tehnoloogiale)
* CDC 6600 - Kasutati umbes 2-3 miljoni CERNi mullikambri piltide vaatlemiseks. Peetakse esimeseks edukaks superarvutiks.
* IBM System/360 - Kasutati 1960. arvutites. See oli esimene arvutite perekond, mis kavandati hõlmama rakendusi alates väikestest kuni suurteni, kui ka äriliste ja teaduslikeni.
* PDP-11 - Algselt miniarvuti 1970. ja 1980. aastatel. Lõpuks kutsuti mikroarvutiks.
* VAX - 1970. ja 1980. aastate tehnoloogia. Kutsuti miniarvutiks. Loodi, et konkureerida PDP-11-ga.

## Viited