Kompiuterių architektūra ======================== $Author: saulius $ $Date: 2020-08-24 14:51:15 +0000 (Mon, 24 Aug 2020) $ $Id: projektas.txt 7635 2020-08-24 14:51:15Z saulius $ 1. Kodėl reikia studijuoti kompiuterių architektūrą? -- Tik kompiuterius, kurių architektūrą suprantame, galime efektyviai programuoti! -- Bendra kompiuterio architektūros apžvalga. -- Kompiuterio komponentų sąveika. 2. Trumpa pažintis su fizikine skaičiuojančių mechanizmų realizacija -- Elektrinės loginės schemos (pavyzdys: relės (lengvai suvokiamas); komplementarūs MOP-tranzistoriai (šiuolaikinė technika)). -- Loginės schemos, Būlio algebra. Pilnà loginių funkcijų sistema. Kombinacinės schemos, Būlinės funkcijos. Aritmetika, sumatoriai, daugintuvai. -- Schemos su būsena. Trigeriai, registrai, atmintis (RAM, ROM). -- Magistralės, atviras kolektorius/atvira ištaka; 3-būsenų (0/1/Z) magistralės. 3. Skaičiavimo sistemos -- optimali (aparatūros prasme) skaičiavimo sistema -- dvejetainė, trejetainė skaičiavimo sistemos. Sistemos, kurių pagrindas 2^n. Vertimas į ir iš dešimtainės skaičiavimo sistemos. 4. Informacijos atvaizdavimas -- Dvejetainis duomenų atvaizdavimas. --- Dvejetainė aritmetika sveikų skaičių. Skaičiai su ženklu ir be ženklo. Sign-magnitude representation. Papildinys iki 2. Papildinys iki 1. BCD (binary coded decimal). --- Aritmetinis perpildymas. Specifikuotas procesorių ir programų elgesys skaičiams su ženklu ir be ženklo. --- Big-endian, Little-endian, Mixed-endian architektūros. --- Slankaus kablelio aritmetika, jos standartai (IEEE floating point standard) ir ypatybės. Tikslumas, perpildymas. Specialios reikšmės (+/- Inf, Nan). --- Rečiau naudojamos aritmetikos rūšys: Fiksuoto kablelio aritmetika. "Slankios trupmenos" aritmetika (floating slash arithmetic). Racionalių skaičių aritmetika. Neriboto tikslumo aritmetika. -- Informacijos atvaizdavimas teksto pavidalu (simbolių eilutėmis) --- Simbolių ir simbolių eilučių atvaizdavimas. Kintamo ilgio eilutės. --- Simbolių koduotės: ASCII, ISO8859-*, Unicode, UTF-8, UCS-2. 5. Programuotojui matoma kompiuterių architektūra (computer architecture visible to a programmer) -- Registrai -- Aritmetinis-loginis įrenginys (įrenginiai) (ALU, arithmetic-logic unit) -- Komandos, komandų skaitiklis (PC, IP) -- Stekas/-ai (Stack) -- Akumuliatoriai -- Indeksiniai registrai -- Atmintis, adresai, mašinos žodis -- Magistralės 6. Komandų sistema (ISA, Instruction Set Architecture) -- Architektūros klasės: akumuliatorinė, atmintis-atmintis, atmintis-registras, load/store, stekinė; 0-adresinės, 1-adresinės, 2-adresinės, 3-adresinės, 4-adresinės komandos. -- Komandų tipai (aritmetinės, loginės, valdymo perdavimo, supervizoriaus, blokinės komandos). Privilegijuoti režimai. Programos būsenos žodis (PWS). Valdantys registrai. -- Adresavimo tipai (addressing modes): register, direct, indirect, immediate, auto-increment/decrement -- Aukšto lygio kalbų palaikymas: aparatinis stekas, steko kadras (BP, FP) -- Išimtinės situacijos procesoriaus lygmenyje (INTO, Segfault). 7. Atminties architektūra. Fizinė ir virtuali atmintis. Segmentai ir atminties segmentavimas. Atminties pusliapiavimas (paging). Puslapių iškėlimas į diską (Swap). Atminties apsauga – puslapiai su skirtingomis priėjimo teisėmis. Jei liks laiko: šifruota atmintis, „curtained memory“. 8. Įvestis/įvestis. Tiesioginis priėjimas prie atminties (DMA, Direct memory Access). Pertraukimai ir jų apdorojimas. 9. CISC procesoriai (pvz.: Pentium; x86; amd64); -- Komandų sistemos ypatybės. Skirtingo pločio komandos. Adresavimo režimai. -- Daugelio procesorių sistemos. SMP. Sinchronizacija. Magistralės rakinimas. Komanda XCHG. -- Konvejeriai, JMP įtaka konvejerio darbui; spekuliatyvus vykdymas 10. RSIC architektūra (pvz.: RISC-V) -- Komandų sistemos ypatybės. Vienodo pločio komandos. Adresavimo režimai. -- Load/Store architektūra -- Konvejeriai, JMP įtaka konvejerio darbui; uždelsimo slotas (delay slot); spekuliatyvus vykdymas; 11. Mikrovaldikliai ir jų architektūros ypatybės (pvz. Atmega) -- Komandų sistemos ypatybės. -- Vieno kristalo ESM (CPU, RAM, Flash) -- Programuojami taimeriai, impulso pločio moduliacija; -- Analoginiai-skaitmeniniai ir skaitmeniniai-analoginiai keitikliai 12. Naujos architektūros, egzotika (trumpa apžvalga) -- Kvantiniai kompiuteriai; apgręžiami skaičiavimai; -- Neuroniniai tinklai -- Lygiagrečios sistemos, CUDA -- FPGA -- Tagged architectures; LISP machines -- Programuojamos terpės: Cell Matrix; ląsteliniai automatai -- Minimali ISA: SISC :) Pilnumas pagal Tiuringą. Praktinis darbas ================ 1. Parašyti pasirinkta kalba (Perl, C, C++, Java, C#, Python) nurodytos paprastos virtualios mašinos emuliatorių; parodyti, kad jis vykdo programas, parašytas primityviu asembleriu/autokodu. Paliesti programas auto-trasavimo režime. 2. (sudėtinga) Parašyti realiai egzistuojančio ar egzistavusio procesoriaus (įskaitant D. Knuto MIX :) dalinį emuliatorių. Parodyti, kad jis vykdo programas, parašytas primityviu asembleriu/autokodu. Paliesti programas auto-trasavimo režime. Nuorodos ======== 1. Donald D. Givone, Robert P. Rosser. Microprocessors and microcomputers – an introdcution Microprocessors/Microcomputers: An Introduction. McGraw-Hill, 1980. 2. John L. Hennessy and David A. Patterson. Computer Architecture: A Quantitative Approach (5th ed.), 2011. 3. Э. Таненбаум, Т. Остин. Архитектура компютера (6-е уздание). Питер, 2013.