Kompiuterių architektūra: ISA, mikroarchitektūra ir sistemos projektavimas
Kompiuterių inžinerijoje kompiuterių architektūra – tai koncepcinis dizainas ir pagrindinė kompiuterių sistemos veikimo struktūra. Tai techniniai brėžiniai ir funkcinis visų projektavimo reikalavimų (ypač spartos ir jungčių) aprašymas: kaip suprojektuoti ir įgyvendinti įvairias kompiuterio dalis. Daugiausia dėmesio skiriama tam, kaip centrinis procesorius (CPU) veikia viduje ir kaip jis kreipiasi į atminties adresus, taip pat kaip įvairūs aparatūros komponentai sąveikauja tarpusavyje.
Kompiuterių architektūrą galima apibrėžti kaip mokslą ir meną – tai, kaip parinkti ir tarpusavyje sujungti aparatinės įrangos komponentus, kad būtų sukurta sistema, atitinkanti funkcinius, našumo ir kainos tikslus. Be to, architektūra dažnai apibrėžia ribas tarp aparatinės įrangos ir programinės įrangos, pavyzdžiui, kokias instrukcijas gali vykdyti procesorius ir kokius išteklius jis teikia programoms.
Architektūros pakategorės
Kompiuterių architektūrą sudaro bent trys pagrindinės pakategorės:
- Instrukcijų rinkinio architektūra (ISA) – tai abstraktus kompiuterinės sistemos modelis, kurį mato programuotojas, rašantis mašininės kalbos arba asemblerio lygmeniu. ISA apima instrukcijų rinkinį, atminties adresų režimus, procesoriaus registrus, adresų ir duomenų formatus, taip pat paskirtį ir semantiką, kurią turi įvykdyti kiekviena instrukcija. ISA lemia, kaip programuotojas arba kompiliatorius gali naudotis aparatūros ištekliais ir dažnai nulemia suderinamumą tarp procesorių šeimų.
- Mikroarchitektūra (taip pat vadinama kompiuterio organizacija) – žemesnio lygio, detalus sistemos aprašymas, pakankamas apibūdinti, kaip visi skaičiavimo sistemos blokai dirba ir kaip jie sujungti, kad būtų įgyvendinta ISA. Mikroarchitektūra apima duomenų kelią (datapath), valdymo logiką, spartinančiosios atminties dydį ir organizaciją, vamzdinimą (pipelining), eilutes, out-of-order vykdymą, spėjimą šakų (branch prediction) ir kt. Pavyzdžiui, spartinančiosios atmintinės dydis yra organizacinis klausimas, kuris paprastai neturi nieko bendra su ISA, bet turi didelę įtaką našumui.
- Sistemos projektavimas – apima visus kitus kompiuterių sistemos aparatūros komponentus ir jų tarpusavio sąveiką, tokius kaip:
- Sistemos jungtys, pavyzdžiui, kompiuterių magistralės ir komutatoriai (interconnects).
- Atminties valdikliai ir hierarchijos (pagrindinė atmintis, L1/L2/L3 talpinės atmintys, NVMe atmintis, virtuali atmintis).
- Procesoriaus apkrovos mechanizmai, pavyzdžiui, tiesioginė prieiga prie atminties (DMA) ir pertraukčių valdymas.
- Daugiaprocesorinio apdorojimo klausimai: veikla daugiaprocesorinėse sistemose, spinduliuotės tvarkymas, užduočių paskirstymas, atminties nuoseklumas ir talpyklų suderinamumas.
Instrukcijų rinkinio architektūra (ISA) – kuo ji svarbi?
ISA yra sutartis tarp programinės ir aparatinės įrangos. Ji apibrėžia:
- Instrukcijų tipus ir formatą (pvz., R-type, I-type), opkokodus.
- Registrų rinkinį: kiek registrų yra, kokio pločio (pvz., 32 bitų, 64 bitų) ir kaip jie naudojami.
- Adresavimo režimus – kaip apskaičiuojami operandų adresai (immediate, register, direct, indirect, base+offset ir kt.).
- Atminties tvarką ir endianumą (byte order).
- Sistema palaikomas sąsajas – pertraukčių sistema, įvesties/išvesties instrukcijos, privilegijų lygiai (vartotojo/kernel režimai).
ISA gali būti orientuota į paprastumą ir greitą vykdymą (pvz., RISC) arba į turtingą instrukcijų rinkinį, leidžiantį sumažinti programavimo lygį (pvz., CISC). Sprendimas, kokia ISA naudoti, lemia tiek programavimo modelį, tiek mikroarchitektūrinius sprendimus.
Mikroarchitektūros elementai
Mikroarchitektūroje nagrinėjami tokie pagrindiniai blokai:
- Datapath (duomenų kelias): registrai, ALU, daugybiniai vienetai, tarpinių rezultatų saugyklos.
- Valdymo vienetas: sinchronizuoja veiksmus, generuoja kontrolės signalus. Valdymas gali būti įgyvendintas hardwired (kietos logikos) arba mikroprogramavimo būdu.
- Pipelining: instrukcijų padalijimas į etapus (pvz., fetch, decode, execute, memory, writeback) leidžia padidinti pralaidumą. Tačiau susidaro hazard’ai (duomenų, kontrolės, struktūriniai), kuriuos reikia valdyti.
- Spėjimas šakų (branch prediction): mažina vamzdinimo praradimus spėjant šakų rezultatus ir leidžia atlikti spekuliacinį vykdymą.
- Out-of-order vykdymas ir superskalinis vykdymas: leidžia vienu metu vykdyti kelias instrukcijas, padidina instruction-level parallelism ir našumą.
- Atminties hierarchija ir talpyklos (caches): L1, L2, L3 talpyklos, jų asociatyvumas, susiesčiai (write-through/write-back). Talpyklų dydis ir vėlavimai stipriai veikia programos našumą.
- Įvesties/išvesties mechanizmai: DMA, pertraukčių valdymas, periferiniai valdikliai.
Sistemos projektavimas: magistralės, atmintis ir daugiaprocesorinės sistemos
Sistemos projektavimas apima:
- Interconnects – magistrales, kryžminius komutatorius, tinklus (NoC – network-on-chip). Jie lemia, kaip greitai ir efektyviai blokuose teka duomenys.
- Atminties valdikliai ir hierarchijos – nuo greitos talpyklos L1 iki lėtesnės, didelės pagrindinės atminties; virtualios atminties mechanizmai, adresų vertimas (MMU).
- Daugiaprocesoriniai sprendimai – simetrinis daugiaproc. (SMP), klasteriai, NUMA architektūros; talpyklų suderinamumo protokolai (pvz., MESI), atminties nuoseklumo modeliai (memory consistency).
- Priedai ir I/O – magistralės, tokios kaip PCIe, periferijų valdikliai, tinklo adapteriai bei jų programinės sąsajos.
Įgyvendinimas: nuo idėjos iki fizinės grandinės
Nustačius ISA ir mikroarchitektūrą, reikia suprojektuoti tikrąją skaičiavimo sistemą. Šis projektavimo procesas vadinamas įgyvendinimu. Įgyvendinimas paprastai yra techninės įrangos inžinerijos procesas ir gali būti skirstomas į tris tarpusavyje susijusias dalis:
- Loginis įgyvendinimas: mikroarchitektūroje apibrėžtų blokų (registrų failai, kontrolės logika, duomenų kelias) projektavimas, dažnai aprašomas registrų perkėlimo ir vartų lygiu. Šiame etape kuriami HDL (pvz., Verilog, VHDL) modeliai, atliekama loginė simuliacija ir funkcionalus patikrinimas.
- Grandinės įgyvendinimas: kai kurių didesnių blokų (ALU, spartinančiosios atminties ir kt.) projektavimas tranzistorių arba standartinių elementų (standard cell) lygyje dėl našumo ar energijos valdymo priežasčių. Tai apima spartos optimizacijas, tranzistorių dydžiavimą ir analogiškus sprendimus.
- Fizinis įgyvendinimas: fizinių grandinių nubraižymas, komponentų išdėstymas mikroschemos plane arba plokštėje (floorplanning), sluoksnių išdėstymas, laidų (routing) nutiesimas, laikrodžio paskirstymo tinklo dizainas, maitinimo ir žemės linijų (power/ground) planavimas bei toliau sekantis maskų ir užsakomosios gamybos etapas.
Dažnai diegimo procesas apima ir papildomus etapus:
- Verifikacija ir testavimas: modeliavimas, formalus patikrininmas, funkcionalūs ir našumo testai, FPGA prototipavimas prieš litografiją.
- Pakavimo ir derinimo: signalo integracija, elektros charakteristikų patikra, temperatūros ir patikimumo testai.
- Programinė parama: kompiliatoriai, OS palaikymas, tvarkyklės, kurie užtikrina, kad ISA ir mikroarchitektūra veiks kaip numatyta realiame naudojime.
Našumo ir kitų rodiklių optimizacija
Svarbūs dizaino rodikliai:
- Sparta (latencija, pralaidumas): matuojama dažniausiai klokaip CPI (cycles per instruction), IPC (instructions per cycle), užbaigimo laikas.
- Energijos sąnaudos ir energijos efektyvumas: ypač svarbu mobiliuose įrenginiuose ir dideliuose duomenų centruose.
- Kaina ir plotas: silicio plokštelės išlaidos, pakavimo kaštai, gamybos sudėtingumas.
- Tvarumas ir patikimumas: temperatūros valdymas, trikčių tolerancija, testavimo galimybės po gamybos.
Optimizacijos sprendimai dažnai remiasi kompromisais: pavyzdžiui, didesnė talpykla sumažina atminties vėlavimus, bet didina kainą ir plotą; agresyvus vamzdinimas padidina pralaidumą, bet reikalauja sudėtingesnės kontrolės ir hazardų valdymo. Taip pat svarbi algoritimų ir programinės įrangos optimizacija – geras kompiliatorius ir programos struktūra gali daug pasiekti net su paprastesne mikroarchitektūra.
Daugiaprocesoriškumas ir koherencija
Dizaino iššūkiai daugiabrandėse ir daugiasluoksnėse sistemose apima:
- Talpyklų suderinamumo protokolus (pvz., MESI), kurie užtikrina, kad procesoriai nematytų nesuderintų duomenų kopijų.
- Atminties nuoseklumo modelius (pvz., sequential consistency), kurie apibrėžia, kaip atminties operacijos matomos skirtingų procesorių atžvilgiu.
- Skirstytos atminties architektūros (NUMA) ir jos optimizavimo strategijos – kaip paskirstyti užduotis, kad būtų sumažintas vėlavimas pasiekti atmintį.
Saugumas ir patikimumas
Šiuolaikinėje architektūroje svarbūs ir saugumo klausimai: izoliuoti privilegijų lygiai, saugūs paleidimo grandiniai, apsauga nuo spekuliacinio vykdymo pažeidžiamumų (pvz., Spectre/Meltdown) ir aparatūriniai mechanizmai, skirti išvengti informacijos nutekėjimo. Taip pat dizainas turi užtikrinti atsparumą gedimams ir palaikyti diagnostikos mechanizmus (watchdog, ECC atmintyje).
Apibendrinimas
Kompiuterių architektūra apima platų sričių spektrą: nuo abstrakčių ISA apibrėžčių iki žemo lygio fizinio įgyvendinimo. Sėkmingas dizainas reikalauja pusiausvyros tarp funkcionalumo, spartos, energijos sąnaudų ir kainos. Nuo ISA pasirinkimo (pvz., RISC ar CISC) per mikroarchitektūrinius sprendimus (pipelining, talpyklos, out-of-order vykdymas) iki sisteminių sprendimų (interconnect, atminties hierarchija, daugiaprocesoriškumas) – kiekvienas sprendimas daro didelę įtaką galutinės sistemos elgsenai ir našumui.
Procesorių atveju visas diegimo procesas dažnai vadinamas procesoriaus projektavimu; tai gali apimti ir procesorių šeimas, pavyzdžiui, RISC ir CISC, bei daugybę sprendimų tarp jų priklausomai nuo naudojimo srities (mobilūs įrenginiai, darbastalio kompiuteriai, serveriai, įterptinės sistemos).
Daugiau subapibrėžčių
Kai kurie kompiuterių architektūros specialistai naudoja smulkesnes subkategorijas:
- Makroarchitektūra: ISA: architektūriniai sluoksniai, kurie yra abstraktesni nei mikroarchitektūra, pvz., ISA.
- Instrukcijų rinkinio architektūra (ISA): Kaip apibrėžta pirmiau.
- UISA (mikrokodo instrukcijų rinkinio architektūra): Todėl vadinama UISA.
- Surinkimo ISA: Išmanusis asembleris gali konvertuoti abstrakčią asemblerio kalbą, bendrą grupei procesorių, į šiek tiek kitokią mašininę kalbą skirtingoms procesorių realizacijoms.
- Programuotojo matoma makroarchitektūra: Aukštesnio lygio kalbų įrankiai, pavyzdžiui, kompiliatoriai, gali apibrėžti konkrečią sąsają juos naudojantiems programuotojams, abstrahuojant skirtumus tarp bazinių ISA, UISA ir mikroarchitektūrų; pavyzdžiui, C, C++ arba Java standartai apibrėžia tris skirtingas konkrečias programavimo sąsajas.
- Kaiščių architektūra: Tai funkcijų, kurias mikroprocesorius turi atlikti, rinkinys aparatinės įrangos platformos požiūriu. Pavyzdžiui, signalai, kuriuos procesorius turėtų skleisti vykdydamas instrukciją.
Kompiuterių architektūrų pavyzdžiai
- "Intel" ir AMD sukurtas x86.
- "Sun Microsystems" ir kitų gamintojų SPARC.
- "PowerPC", kurį pagamino "Apple", IBM ir "Motorola".
Susiję puslapiai
- Kompiuterių techninė įranga
- Programinės įrangos architektūra
- Mikroarchitektūra
Klausimai ir atsakymai
K: Kas yra kompiuterių architektūra?
A: Kompiuterių architektūra - tai konceptuali kompiuterių sistemos konstrukcija ir pagrindinė veiklos struktūra. Ji apima techninius brėžinius ir funkcinį visų projektavimo reikalavimų, pavyzdžiui, spartos ir jungčių, aprašymą, siekiant sukurti kompiuterius, atitinkančius našumo, kainos ir funkcinius tikslus.
K: Kokios yra trys pagrindinės kompiuterių architektūros subkategorijos?
A: Trys pagrindinės kompiuterių architektūros pakategorės yra instrukcijų rinkinio architektūra (ISA), mikroarchitektūra (dar vadinama kompiuterio organizacija) ir sistemos projektavimas.
K: Ką apima ISA?
A.: Instrukcijų rinkinio architektūra (ISA) apima abstraktų kompiuterinės sistemos modelį, kurį mato mašinų kalbos arba asemblerio kalbos programuotojas. Tai apima instrukcijų rinkinį, atminties adresų režimus, procesoriaus registrus, adresų ir duomenų formatus.
K: Ką apima mikroarchitektūra?
A: Mikroarchitektūra apima žemesnio lygio detalų sistemos aprašymą, kurio pakanka, kad būtų galima visiškai aprašyti visų skaičiavimo sistemos dalių veikimą ir tai, kaip jos tarpusavyje sujungtos ir sąveikauja viena su kita, kad būtų įgyvendinta ISA.
K: Ką apima sistemos projektavimas?
A: Sistemos projektavimas apima visus kitus kompiuterių sistemos aparatinės įrangos komponentus, tokius kaip sistemos jungtys, pavyzdžiui, kompiuterių magistralės ir komutatoriai, atminties valdikliai, procesoriaus iškrovos mechanizmai, pavyzdžiui, tiesioginė prieiga prie atminties, daugiaprocesorinio apdorojimo klausimai ir t. t.
K: Kaip įgyvendinimas suskirstomas į tris dalis?
A.: Įgyvendinimą galima suskirstyti į loginį įgyvendinimą, kuris apima mikroarchitektūroje apibrėžtų blokų projektavimą registrų perdavimo arba vartų lygmenimis; grandinių įgyvendinimą, kuris apima pagrindinių elementų arba didesnių blokų projektavimą tranzistorių lygmeniu; fizinį įgyvendinimą, kuris apima fizinių grandinių brėžinius, įvairių grandinių komponentų išdėstymą lusto plane arba plokštėje, juos jungiančių laidų nukreipimą.