510 likes | 869 Views
KOMPIUTERIŲ ARCHITEKTŪRA ir OPERACINĖS SISTEMOS. Doc. Stasys Maciulevičius Kompiuterių katedra stasys.maciulevicius@ktu.lt. An kstesn ė s paskaitos santrauka. kompiuterių našum as į vertinimo principai MIPS, MFLOPS, ... procesorių numeriai pagreitėjimas
E N D
KOMPIUTERIŲ ARCHITEKTŪRA ir OPERACINĖS SISTEMOS Doc. Stasys Maciulevičius Kompiuterių katedra stasys.maciulevicius@ktu.lt
Ankstesnės paskaitos santrauka • kompiuterių našumas • įvertinimo principai • MIPS, MFLOPS, ... • procesorių numeriai • pagreitėjimas • kompiuterių našumo įvertinimo testai • SPEC • TPC • procesorių testai
Šios paskaitos turinys • komandų sistema • pagrindiniai komandųsistemų tipai • bendrosios paskirties registrų tipo architektūra • komandų formatai • operandų adresavimo būdai • komandų formatų pavyzdžiai • CISC ir RISC
Programuotojo požiūris į skaičiavimus Taikomieji uždaviniai Nuo mašinos nepriklausoma Aukšto lygmens kalba Asemblerio kalba Nuo mašinos priklausoma Žemo lygmens kalbos Mašinos kalba Kompiuterio techninė įranga
Programos pavyzdys Aukšto lygmens programavimo kalba išraiška užrašoma paprastai, pavyzdžiui: A = B + C D – E + F + A; Asembleriu ta pati išraiška užrašoma išskaidyta į smulkesnius veiksmus, pavyzdžiui: operacijos mnemonika Komanda kommentaras mult T,C,D; T = CD add T,T,B; T = B+CD sub T,T,E; T = B+CD-E add T,T,F; T = B+CD-E+F add A,T,A; A = B+CD-E+F+A rezultatas operandai
Komandų sistema Skaičiavimams reikalingą operacijų rinkinį kompiuteryje realizuoja komandų sistema, kurioje vieną operaciją gali atitikti ir kelios komandos, besiskiriančios operandų tipais, adresacijos būdais ir pan. Daugumos kompiuterių komandų sistemos apima tokias komandų grupes:
Komandų sistema • Duomenų persiuntimo (registrų įkrovimas, įrašymas į atmintį) • Aritmetinės ir loginės(sveikųjų skaičių: +, -, *, /; loginės: IR, ARBA, ...) • Slankaus kablelio (slankaus kablelio skaičių: +, -, *, /) • Dešimtainės(dešimtainių skaičių: +, -, *, /) • Valdymo (perėjimai, procedūrų iškvietimas ir grįžimas, ciklai) • Eilučių apdorojimo(eilučių persiuntimas, palyginimas, paieška) • Sisteminės (OS iškvietimas, virtualios atminties valdymas)
Komanda Taigi, kompiuterio komanda yra dvejetaine forma koduotas žodis, kuris procesoriui nurodo vieną veiksmą, kuris turi būti atliktas sprendžiant uždavinį Todėl kompiuterio komandoje gali būti nurodyta tokia informacija: kokia operacija turi būti atlikta (tai būtinoji kiekvienos komandos dalis) operacijojedalyvaujančių operandų nuorodos, sąlyga,apsprendžianti perėjimą prie paskesnėsoperacijos paskesnėsoperacijos adresas
Pagrindiniai komandų sistemų tipai Nagrinėjant komandų sistemas, galima išskirti 5 požymius,pagal kuriuos būtų galima jas klasifikuoti: 1) Operando saugojimas CPU: kur dar (be atminties) saugomi operandai? 2) Komandoje aiškiai nurodomų operandų skaičius. 3) Operandų vieta: ar aritmetinių ir loginių komandų operandai gali būti atmintyje, ar visi operandai turi būti CPU viduje (registruose)? Jei operandai yra atmintyje, tai kaip nurodoma jų vieta? 4) Operandų tipas ir dydis: kokie ir kaip jie nurodomi? 5)Operacijos: kokios operacijos įeina į komandų sistemą?
Pagrindiniai komandų sistemų tipai Vidinės CPU atminties tipas yra pagrindinis skiriamasis požymis. Čia yra 3 alternatyvos: 1) stekas, 2) akumuliatorius, 3) registrų grupė. Stekas – specialiai suprojektuota atmintis, į kurią informacija įrašoma nuosekliai, iš jos informacija perskaitoma taip pat tik nuosekliai. Informacijos vietą steke rodo steko rodyklė (stack pointer)
Stekas Steku vadinama speciali duomenų ir atminties struktūra (last in, first out- LIFO) Informacija į steką įrašoma nuosekliai, iš jo nuskaitoma – taip pat nuosekliai Informacijos vietą steke nurodo steko rodyklė (stack pointer - SP) SP
Stekas Sutarsime, kad: SP rodo steko viršūnę – laisvą elementą steke operacija Push SP reikšmę padidina vienetu ir į steką įrašo žodį operacija Pop iš steko nuskaito žodį ir SP reikšmę sumažina vienetu SP
SR SR ALU Steko tipo architektūra Procesorius Procesorius Stekas: operandai saugomi steke, rezultatas - taip pat, operandų išrinkimas ir įrašymas - procedūros push, pop • SR – steko rodyklė • ALU – aritmetinis-loginis įtaisas (Arithmetic-Logic Unit) Stekas SR ALU push pop Atmintis Atmintis
Pagrindiniai komandų sistemų tipai Akumuliatorius: vienas iš operandų saugomas akumuliatoriuje, rezultatas - taip pat, operandų išrinkimas ir įrašymas - load, store. Pavyzdžiai: PDP-8,Motorola 6809 Kai kuriuose procesoriuose (pvz., Intel 8080) tai vienas iš registrų
Procesorius Procesorius SR SR AC ALU ALU store load Atmintis Atmintis Akumuliatoriaus tipo architektūra Akumuliatorius (AC): specialus registras (kaupiantysis registras), į kurią informacija įrašoma prieš operaciją; iš jo rezultatai grąžinami į atmintį
Pagrindiniai komandų sistemų tipai Registrų grupė: operandai saugomi registruose, rezultatas - taip pat, operandų išrinkimas irįrašymas - load, store. Pavyzdžiai: IBM 370, DEC VAX, PowerPC Galimi du atvejai: • Registre privalo būti tik vienas iš operandų • Registruose privalo būti abu operandai
Procesorius Rk SR SR Ri ALU ALU store load Atmintis Atmintis Reg-Atm tipo architektūra Registre privalo būti tik vienas iš operandų, o kitas imamas tiesiai iš atminties Registrų failas: 8-16-32-… - registrų grupė procesoriuje, į kuriuos vienas iš operandų įrašomas prieš operaciją Ri, Rk – registrai
Procesorius Procesorius Rk SR Rj SR Ri ALU ALU store load Atmintis Atmintis load-store tipo architektūra Čia abu operandai prieš aritmetinę ar loginę operaciją turi būti įkelti į registrus Ri, Rj,Rk – registrai
Pagrindiniai komandų sistemų tipai Operatorius C := A + B šiose keturiose klasėse realizuojamas tokiomis komandų sekomis: Steko Akumuliatoriaus Reg-Atm load-store PUSH A LOAD A LOAD R1, A LOAD R1, A PUSH B ADD B ADD R3, R1, B LOAD R2, B ADDSTORE C STORE C, R3 ADD R3,R1,R2 POP CSTORE C, R3 Čia vienos ar kitos architektūros pranašumai nėra akivaizdūs. IšraiškaiA*B + B*C - A*D paskaičiuoti juos jau pastebėtume
Steko tipo komandų sistema Operatorius F = A×B + B×C - A×Dšiuo atveju galėtų būti realizuojamas tokia komandų seka: Steko viršūnė PUSH A A PUSH D D A MULTD×A PUSH A A D×A PUSH BB A D×A MULT B×A D×A PUSH BB B×A D×A PUSH C CB B×A D×A MULTC×B B×A D× A ADDC×B+B×A D× A SUB C×B+B×A-D× A POP F
Akumuliatoriaus tipo komandų sistema OperatoriusF = A×B + B×C - A×Dšiuo atveju galėtų būti realizuojamas tokia komandų seka: Akumuliatoriaus turinys T turinys LOAD A A ? MULT DD×A ? STORE T D×A D×A LOAD A A D×A MULT BB×A D×A SUB T B×A - D×A D×A STORE T B×A - D×A B×A - D×A LOAD BB B×A - D×A MULTC B×C B×A - D×A ADD T C×B+B×A - D×A B×A - D×A STOREFC×B+B×A - D×A B×A - D×A
Reg-Atm tipo komandų sistema Operatorius F = A×B + B×C - A×Dšiuo atveju galėtų būti realizuojamas tokia komandų seka: R1 R2 turinys turinys LOADR1, A A ? MULT R1, BB×A ? LOADR2, A B×A A MULT R2, DB×A D×A SUB R1, R2 B×A - D×A D×A LOADR2, BB×A - D×A B MULT R2, CB×A - D×A B×C ADD R1, R2 B×A - D×A + B×C B×C STOREF, R1B×A - D×A + B×C B×C
Load-Store tipo komandų sistema Operatorius F = A×B + B×C - A×Dšiuo atveju galėtų būti realizuojamas tokia komandų seka: R1 R2 R3 R3 turinys turinys turinys turinys LOADR1, A A ? ? ? LOADR2, BA B ? ? LOADR3, CA B C ? LOADR4, DA B C D MULT R4, R1A B C D×A MULT R3, R2A B B×C D×A MULT R1, R2 B×A B B×C D×A SUB R1, R4B×A - D×A B B×C D×A ADD R1, R3 B×A - D×A + B×C B B×C D×A STOREF, R1B×A - D×A + B×C B B×C D×A
Palyginkime skirtingųtipų architektūras Palyginkite šio operatoriaus realizacijasskirtingų tipų architektūrose: 1) komandų skaičiaus atžvilgiu; 2) kreipinių į atmintį skaičiaus atžvilgiu
Bendrosios paskirties registrų tipo architektūra Pastaruoju metu vyrauja bendrosios paskirties registrų tipo architektūra. Tai paaiškinama tuo, kad: 1) registrai, kaip ir kiti CPU mazgai, pasiekiami greičiau, nei atmintis; 2) kompiliatoriai efektyviau juos panaudoja kodo generavimui, nei kitas vidines CPU atminties formas (pvz., steką); 3) saugant operandus ir tarpinius rezultatus registruose, sumažėja kreipinių į atmintį skaičius, tuo išlaisvinant ją kitiems tikslams (pvz., įvedimui ar išvedimui); 4) generuojamas kompaktiškesnis kodas, nes registrams nurodyti reikia mažiau vietos.
Bendrosios paskirties registrų tipo architektūra Kiek gi registrų turėtų būti procesoriuje? Atsakymas priklauso nuo to, kaip juos panaudoja kompiliatorius. Dauguma kompiliatorių dalį registrų rezervuoja išraiškoms skaičiuoti, kai kuriuos naudoja parametrams perduoti, o likusius - kintamiesiems saugoti. Kiek gi registrų yra žinomuose procesoriuose? • x86 procesoriuose – 8 • IBM/360 sistemos procesoriuose - 16 • RISC procesoriuose - 32 • IA-64 procesoriuose - 128
Komandų formatai • Aukščiau pateiktuose pavyzdžiuose sutikome tokias procesorių komandas: • LOAD A • LOAD R1, A • ADD • ADD B • ADD R3, R1, B • ADD R3,R1,R2 • Kaip matome, visose pirmojoje pozicijoje yra operacijos pavadinimas (LOAD – įkrovimas, ADD – sudėtis), o po jos – operandų nuorodos, kurių skaičius pateiktuose pavyzdžiuose įvairus – nuo 0 iki 3
Komandų formatai Bendruoju atveju procesorių komandų formatą galima būtų pavaizduoti taip: • Čia: • OpK – operacijos kodo laukas, • Op1, …, Opn – operandų nuorodos • Nuorodų skaičius priklauso nuo konkretaus atvejo ir gali būti lygus 0, 1, 2 ir t.t.
registras ar ląstelė, nurodomi adresu Operandų nuorodos • Operando nuorodos pavidalas priklauso nuo to, koks yra operandas, kur jis saugomas. • Operandu gali būti: • kurio nors registro turinys, • atminties ląstelės turinys, • konstanta, • adresas, • sąlyga. • Nuo to priklausooperando nuorodai skirto lauko ar laukų skaičius ir ilgis
Operandų adresavimo būdai Operandų vietai nurodyti kompiuteriuose naudojama daug įvairių adresavimo būdų, kurie tinka vienai ar kitai situacijai. Aprašydami juos, pateiksime ir pavyzdžius, iliustruojančius operando išrinkimą. ATM[A] žymės atminties ląstelę, kurios adresas A 1. Registrinė adresacija - operandas yra registre, kurio numeris nurodytas komandoje, pavyzdžiui: Add R4, R1 R4 := R4 + R1
Operandų adresavimo būdai 2. Netiesioginė registrinė - operando adresas yra registre, kurio numeris nurodytas komandoje, pavyzdžiui: Add R4, (R1) R4 := R4 + ATM[R1] 3. Santykinė (bazinė arba su poslinkiu)- operando adresas paskaičiuojamas prie registro turinio pridedant nurodytą poslinkio reikšmę; tinka lokaliniams kintamiesiems pasiekti. Pavyzdžiui: AddR4, 9(R1) R4 := R4 + ATM[R1+9]
Operandų adresavimo būdai 4. Indeksinė - operando adresas paskaičiuojamas sumuojant bazės ir indekso registrų turinius; tinka masyvo elementams išrinkti (R1 - masyvo bazinis adresas, R2 - indekso reikšmė). Pavyzdžiui: AddR4, (R1)[R2]R4 := R4 + ATM[R1 +R2] 4a. Indeksinė masteliuоta - nuo indeksinės skiriasi tik tuo, kad indekso reikšmė padauginama iš koeficiento, atitinkančio duomenų elemento ilgį (m). Pavyzdžiui: AddR4, 8(R1) [R2] R4 := R4 + ATM[8+R1+R2*m]
Operandų adresavimo būdai 5. Tiesioginė arba absoliutinė - adreso reikšmė (pilna ar jo dalis) nurodoma komandoje; tinka statiniams duomenims nurodyti. Pavyzdžiui: AddR4, (704) R4 := R4 + ATM[704] 6. Betarpiškoji - operandas yra komandos formato dalis. Tai gali būti interpretuojama, kaip adreso nuoroda yra komandų skaitiklyje. Pavyzdžiui: AddR4, #7 R4 := R4 + 7
Operandų adresavimo būdai 7a. Autoinkrementinė - operando adresas yra registre, kurio turinys automatiškai didinamas, pvz.: Add R4, (R1)+ R4 := R4 + ATM[R1] R1 := R1 + d 7b. Autodekrementinė - operando adresas yra registre, kurio turinys automatiškai mažinamas, pvz.: Add R4, -(R1)R1 := R1 -d R4 := R4 + ATM[R1] Patogu apdorojant masyvus. Pradžios adresas įrašomas į lauke R1 nurodytą registrą
Komandų adresavimo būdai • Komandoms adresuoti perėjimuose gali būti naudojami tokie būdai: • Tiesioginėarba absoliutinė adresacija- perėjimo adresas nurodomas komandoje. Pavyzdžiui: • Jmp addr PC := addr • Santykinė PC atžvilgiu - komandoje nurodomas poslinkis PC atžvilgiu. Pavyzdžiui: • Jmp offset PC := PC + offset
IBM/360 komandų formatai Kai kurie IBM/360 šeimos kompiuterių komandų formatai (procesorius turi 16 registrų):
IBM/360 komandų pavyzdžiai IBM/360 šeimos kompiuterių sudėties komandų variantai: AR 5, 9 A 4, 8(1,2)
Intel 8080 procesoriaus komandos OpK Registrų kodai: 000 - B 100 - H 001 - C 101 - L 010 - D 110 - M 011 - E 111 - A Registrų porų kodai: 00 - BC 10 - HL 01 - DE 11 - SP Santrumpos: DDD - imtuvas (Destination) SSS - šaltinis (Source) OpK - operacijos kodas RP - registrų pora I - operandas (Immediate) B0, B1 - adreso baitai OpK DDD SSS OpK DDD OpK OpK SSS OpK RP OpK OpK DDD OpK I B1 OpK RP OpK B0
Intel komandų formatai Intel šeimos procesorių komandų formatai: Kaip matome, 32 bitų procesorių komandų formatai skiriasi: a) čia į kai kurias komandas įvestas SIB (Scale, Index, Base) baitas, specifikuojantis indeksaciją; b) kai kurie laukai gali būti ilgesni.
Intel x86 procesorių komandos d = 0 - imtuvas - r/m, d = 1 - imtuvas - reg w = 0 - baitas, w = 1 - žodis
Intel x86 komandų pavyzdžiai • add r/m, m/r :000000dw mod reg r/m • variantai: • add ax, bx (ax:= ax + bx):0000001111000011 • add ah, bl (ah := ah + bl):0000001011100011 • add adr, ax(ATM(adr) := ATM(adr) + ax; vieta atmintyje nustatoma sumuojant bp, si ir poslinkio disp8=96turinį):0000001101 000001 01100000 • add ax, adr (ax := ATM(adr) + ax; vieta atmintyje nustatoma sumuojant bp, si ir poslinkio disp8=96turinį):0000000101 000001 01100000 w bitas d bitas
Itanium Čia VLIW komanda - 3“normalių” komandų grupė (bundle): 2 komanda 1 komanda 0 komandaT 41 41 41 5 T – Templatelaukas, nurodantis: • komandų nukreipimą į funkcinius įtaisus • stops – galimus konvejerio darbo trikius dėl resursų priklausomybės tarp prieš ir po “stop” esančių komandų Galimos ir išplėstos komandos (long intermediate integer, long branch), kurios užima dvi pozicijas komandų grupėje
CISC ir RISC CISC - Complex Instruction Set Computing - sudėtinga komandų sistema RISC - Reduced Instruction Set Computing - supaprastinta komandų sistema Kodėl CISC?Prielaidos: • turtingesnė sistema - trumpesnė programa (pvz., 8080 - nėra daugybos) • turtingesnė sistema - lengviau sukurti kompiliatorių Pasekmė - kuriami kompiuteriai, orientuoti aukšto lygmens programavimo kalboms palaikyti
CISC požymiai Siūlomi tokie 8 požymiai: • komandų skaičius – kiek galima daugiau • adresacijos būdų skaičius – kiek galima daugiau • komandų formatų skaičius – kiek galima daugiau • komandų trukmė taktais – CPI>1 • į atmintį kreipiasi įvairių tipų komandos • yra specialios paskirties registrai • valdymas – mikroprograminis • komandos būna aukštesnio lygio, artimos aukšto lygio programavimo kalboms (ALPK)
CISC ir RISC Ką parodė praktika? • sunku pasiekti komandų visišką atitikimą ALPK operatoriams • CISC atveju sunkiau optimizuoti kodą, užtikrinti efektyvų konvejerio darbą • kompiliatoriaus sugeneruotame kode panaudojama tik dalis komandų • programos ilgis (komandų skaičius) svyruoja nedaug:
CISC ir RISC Šie duomenys paimti iš D.Patterson tyrimo (11 C kalba parašytų programų). Ar tik dėl 10-20% verta rinktis CISC?
CISC ir RISC Kodėl RISC? • trumpos komandos (dauguma įvykdomos per 1 ciklą) • registras-registras tipo komandos (load/store architektūra) • paprastesni adresavimo būdai • paprastesni komandų formatai • efektyvūs kompiliatoriai • efektyvus konvejerizavimas
OpK D/S A immediate OpK D/S A B OpK RC OpK D/S A B C OpK RC RISC: PowerPC PowerPC: • 3 operaciniai įtaisai • 32 bendrosios paskirties registrai • 32 bitų komandos; jų formatų pavyzdžiai: 0 5 6 10 11 15 16 20 21 31 RC=1 – požymių reikšmės įrašomos į požymių registrą, RC=0 – ne