SZÁMÍTÓGÉP ARCHITEKTÚRÁK & HARDVERKÖZELI PROGRAMOZÁS 1 Dr. Varga Imre Debreceni Egyetem Informatikai Rendszerek és Hálózatok Tanszék 2019. május 23.
Követelmények Gyakorlat (aláírás, csak HKP1) Óralátogatás (maximum hiányzás: 3) 2 gyakorlati ZH A két ZH átlaga legalább 60% Mindegyik legalább 50% 1 javítási lehetőség (teljes féléves anyag) Elmélet (kollokvium, SzA & HKP1) Írásbeli vizsga Teszt + számolás/programértés + kifejtős Számítógép architektúrák 2
Figyelmeztetés A diasoron alapuló lexikai tudás szükséges, de nem elegendő a sikeres teljesítéshez. Az anyag megértése is szükséges, emiatt az előadásokon való aktív részvétel ajánlott. Egyéb irodalom is hasznos lehet. Számítógép architektúrák 3
Mérnökinformatikus képzés mérnök informatikus Fizika Elektronika Digitális technika Jelek és rendszerek Számítógép architektúrák Beágyazott rendszerek Assembly programozás Operációs rendszerek Rendszerközeli programozás Programozási nyelvek 1-2 Adatbáziskezelés Számítógép architektúrák 4
Tematika Számábrázolás, adattípus implementáció CPU alapvető felépítése és működése Modern processzorok Konkrét processzor architektúra Utasításkészlet, programozás A programozás operációsrendszerhez kapcsolódó hardverközeli aspektusai Digitális elektronika alapjai hardver szempontból Assembly programozás Magas szint programozás leképezése alacsonyra Számítógép architektúrák 5
A tárgy célja Hardver ismeretek átadása Összeköttetés teremtése A program és az elektronika között Az absztrakt és az alapozó ismeretek között Magas szintű programozás mélyebb megértése Hatékonyabb programozás Az assembly programozás bemutatása Szemléletformálás Átfogó kép kialakítása a számítógép rendszerekről Számítógép architektúrák 6
Számábrázolás, adattípusok Fixpontos számábrázolás Lebegőpontos számábrázolás Főbb adattípusok
Adatok Információtároláshoz különböző adattípusok A számítógépen minden adat végül bitsorozat numerikus infó szöveg kép kódolás hang videó számok bitsorozat dekódolás adatbázis programok Számítógép architektúrák 8
Bináris számok Csak két számjegy: 0 és 1 Jelentőség: 2 állapot (igen/nem, van/nincs, stb.) Konverzió 69,375 10 = 1000101,011 2 69 2 34 1 17 0 8 1 4 0 2 0 1 0 0 1 2 375 0 750 1 500 1 000 64 32 16 8 4 2 1 1/2 1/4 1/8 2 6 2 5 2 4 2 3 2 2 2 1 2 0 2-1 2-2 2-3 1 0 0 0 1 0 1 0 1 1 Számítógép architektúrák 9
Hexadecimális számok 16 számjegy: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F Szoros kapcsolat a binárissal, de rövidebb alak Jelölés: 1FA 16, 0x1FA, $1FA Konverzió 1*256 15*16 10*1 =506 10 16 2 16 1 16 0 1 F A 0 0 0 1 1 1 1 1 1 0 1 0 2 11 2 10 2 9 2 8 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 2048 1024 512 256 128 64 32 16 8 4 2 1 =506 10 0x1FA = 0b 1 1111 1010 = 506 Számítógép architektúrák 10
Adatszervezés Adategységek Bit (binary digit): két állapot (0, 1) Nibble (fél bájt): 4 bit Bájt : 8 bit Félszó: 16 bit Szó: (többnyire) 32 bit Dupla szó: 64 bit 18.446.744.073.709.551.616 4.294.967.296 65.536 256 16 2 Számítógép architektúrák 11
Megadás Reprezentáció Tartomány Műveletek Főbb adattípusok Adattípus Egyszerű típusok: egész, valós, karakter, mutató, logikai, felsorolásos Összetett típus: tömb, rekord, halmaz Számítógép architektúrák 12
Ábrázolás Egész típus Fixpontos számábrázolás (2, 4 vagy 8 bájt) Előjeles vagy előjel nélküli BCD Pakolt vagy pakolatlan Bájtsorrend Little-endian Big-endian Megadás különböző módokon Pl. C nyelven: 30=30u=30l=036=0x1E=0b11110 * *ISO C99 Számítógép architektúrák 13
Fixpontos számábrázolás Egész értékek reprezentálása Előjel nélküli eset (csak nem negatív szám) ábrázolandó szám kettes számrendszerben adott számú biten Példa (1 bájt esetén) 41 10 101001 2 0 0 1 0 1 0 0 1 N biten ábrázolható legkisebb szám: 0 legnagyobb szám: 2 N -1 Számítógép architektúrák 14
Előjeles eset Fixpontos számábrázolás Nem negatív érték esetén: előjel nélküli logika Negatív érték esetén: kettes komplemens Abszolút érték bitjeinek invertálása (egyes komplemens) A kapott érték növelése 1-gyel Példa (1 bájt esetén) -41 10-101001 2 N biten ábrázolható legkisebb szám: -(2 N-1 ) Legnagyobb szám: 2 N-1-1 1 1 0 1 0 1 1 1 meghatározza az előjelet Számítógép architektúrák 15
Számolás fixpontos számokkal Összeadásra és kivonásra ugyanaz az algoritmus használható Példa (1 bájtos adatok esetén) 67+54=121 01000011 +00110110 01111001 67-54=13 67+(-54)=13 01000011 +11001010 00001101 Absolútérték (+54): 00110110 Egyes komplemens: 11001001 Kettes komplemens (-54): 11001010 Számítógép architektúrák 16
Számolás fixpontos számokkal Szorzás Példa: két 16 bites érték szorzása: 30 000*4 000 30 000: 4 000: 120 000 000: 0x75 0x30 A B C D + 0x1E 0x00 0x49 0x20 0x02 0xD0 0x06 0xDB 0x07 0x27 0x0E 0x00 0x0F 0xA0 Eredmény két regiszterben vagy túlcsordulás (hiba) B*D A*D B*C A*C 2 16 AC+2 8 (AD+BC)+BD Számítógép architektúrák 17
Aritmetikai túlcsordulás Két féle hibalehetőség Előjel nélkül: több bit lenne szükséges (carry) 4,295E+09 4G 01011010 90 2,147E+09 2G +11110001 +241 0-2,15E+09-2G 101001011 75 331 >255 0 2,147E+09 4,295E+09 6,442E+09 8,59E+09 1,074E+10 1,288E+10 1,503E+10 1,718E+10 Előjeles: nem várt előjelváltás (overflow) 4,295E+09 4G 01011010 90 2,147E+09 2G +01110001 +113 0-2,15E+09-2G 11001011-53 203 > 127 0 2,147E+09 4,295E+09 6,442E+09 8,59E+09 1,074E+10 1,288E+10 1,503E+10 1,718E+10 Számítógép architektúrák 18
Kiterjesztés Néha szükség van egy adatot a korábbinál több biten ábrázolni úgy, hogy az értéke ne változzon Nulla kiterjesztés: kitöltés nullával unsigned short x=5; unsigned long y=x; Rövid előjel nélküli értékből hosszú előjelnélküli 8 bit: 01101001 16 bit: 0000000001101001 8 bit: 11010010 16 bit: 0000000011010010 Előjel tartó kiterjesztés: kitöltés előjel bittel Rövid előjeles értékből hosszú előjeles 8 bit: 01101001 16 bit: 0000000001101001 8 bit: 11010010 16 bit: 1111111111010010 short int q=-17; long int z=q; Számítógép architektúrák 19
Bájtsorrend Több bájtos adatok esetén a bájtok sorrendje Little-endian: (gazdagép bájtsorrend) Legkisebb helyi értékű bájt (LSB) elől Big-endian: (hálózati bájtsorrend) Legnagyobb helyi értékű bájt (MSB) elől Példa: 523124044 = 0b11111001011100011110101001100 = 0x1F2E3D4C Little-endian: Big-endian: 25 32 17 24 9 16 1 8 0x4C 0x3D 0x2E 0x1F 0x1F 0x2E 0x3D 0x4C 1 8 9 16 17 24 25 32 Számítógép architektúrák 20
BCD ábrázolás Binárisan kódolt decimális Minden számjegy 4 biten ábrázolva Vannak kihasználatlan bitkombinációk Pakolatlan BCD 1 számjegy - 1 bájt : 0000 vagy (0011 * ) bevezető 1395 00000001 00000011 00001001 00000101 Pakolt BCD 2 számjegy - 1 bájt : nibble alapú 1395 00010011 10010101 *ASCII miatt Számítógép architektúrák 21
Értékei karakter kódok Karakter típus C: Fixpontos számábrázolás, 1 bájt, előjeles/előjel nélküli, egészként használható (ASCII) Java: 2 bájt, előjel nélküli (Unicode) Karakter kódtáblák ASCII: 7bit ISO-8859-2 Latin 2 : 8bit Unicode: 16bit Számítógép architektúrák 22
ASCII kódtábla Karakter kódtáblák 0x00-0x1F: vezérlő karakter 0x30-0x39: számjegy 0x41-0x5A: angol nagy betű 0x61-0x7A: angol kis betű ISO-8859-2 Latin 2 0x00-0x7F: ASCII (kompatibilitás) 0x80-0xFF: közép/kelet európai nyelvek speciális karakterei Számítógép architektúrák 23
Karakter kódtáblák Unicode 16 bites kódsíkok (17 db) Több mint 1 millió kódpont (17*65536) 1. sík: Basic Multilingual Plane (BMP) ASCII kompatibilitás Kódolási technikák (változó hosszúság) UTF-8 UCS-2 UTF-16 UTF-32 Számítógép architektúrák 24
UTF-8 ASCII: Minden bájt egy ASCII kód unicode00000000 00000000 00000000 0abcdefg UTF-8 0abcdefg Nem ASCII: Egyik bájt sem ASCII kód unicode00000000 00000000 00000abc defghijk UTF-8 110abcde 10fghijk unicode00000000 00000000 abcdefgh ijklmnop UTF-8 1110abcd 10efghij 10klmnop unicode00000000 000abcde fghijklm nopqrstu UTF-8 11110abc 10defghi 10jklmno 10pqrstu Számítógép architektúrák 25
Karakter: UTF-8 példa (egyszerűsített kínai, pinyin: jing) Unicode: 4EAC Bináris: 01001110 10101100 UTF-8: 11100100 10111010 10101100 HTML: 京, 京 URL: %E4%BA%AC Latin-1: Latin-2: äº äşź Számítógép architektúrák 26
Valós típus Ábrázolás: lebegő pontos Méret: 4, 8, 10 bájt Megadás különböző formában Pl. C nyelven: 0.25, 0.25f, 0.25L,.25, +0.25, 25e-2, 0.025e1 Műveletek Operátor túlterhelés Pl. a + operátor lehet egész-egész vagy valós-valós Egyes műveletek nem használhatóak valós típussal Pl.: nincs maradékos osztás, léptetés Számítógép architektúrák 27
Lebegő pontos számábrázolás Valós számok ábrázolása Alapja a normalizálás: 123,45 = 1,2345 10 2 Minden (2 számrendszerbeli) szám felírható így: (-1) S M A K ahol a mantissza (M) 1.H alakú, azaz 1 2 M < 10 2 karakterisztika (K) pozitív és negatív is lehet Nem tároljuk: alap (A=2), rejtett bit, K előjele E=K+B adott számú biten nem negatív (B: nulla pont) Tárolandó: S, H, E Számítógép architektúrák 28
Lebegő pontos szabvány IEEE 754/1985 szabvány (ISO/IEC/IEEE 60559:2011) Előjel Pozitív: 0; Negatív: 1 Formátumok Egyszeres pontosság Dupla pontosság Kiterjesztett pontosság méret S hossz E hossz H hossz 32 bit 1 bit 8 bit 23 bit 127 64 bit 1 bit 11 bit 52 bit 1023 80 bit 1 bit 15 bit 63(+1) bit 16383 Számítógép architektúrák 29 B
Lebegő pontos számábrázolás Példa: -13.8125 egyszeres pontossággal -13.8125 10 = -1101.1101 2 = -1 1 1.1011101 2 3 Előjel: S = 1 Karakterisztika: K = 3 10 = 11 2 Mantissza: M = 1.1011101 Hasznos bitek: H = 10111010000000000000000 Eltolt karakterisztika: E = 3 10 +127 10 = 10000010 2 1 1 0 0 0 0 0 1 0 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 S E H Számítógép architektúrák 30
Kerekítési hiba Ok: hasznos bitek tárolás véges számú biten Túl sok hasznos bit esetén kerekítés szükséges Ha az utolsó tárolható hasznos bit után 0 áll, akkor a további biteket levágjuk Különben felfelé kerekítünk Kerekítési hiba: nem pontos ábrázolás Példa: 0.3 ábrázolása egyszeres pontossággal hasznos bitek: 00110011001100110011001100110 tárolt bitek: 00110011001100110011010 0.3 0.300000011920929 Számítógép architektúrák 31
Kerekítési hiba Valós számok: folytonos halmaz, végtelen sok elemmel Lebegőpontos számok: diszkrét halmaz, véges sok elemmel Például: 1.0000000000; 1.0000001192; 1.0000002384; 1.0000003576 Az ábrázolható számok sűrűsége nem állandó A tárolt értékek csak néhány számjegyig pontosak Számítógép architektúrák 32
Speciális lebegőpontos értékek +0 és -0 előjel bit 0 (+) vagy 1 (-), minden más bit 0 Pl.: 0.0/-1.0, -1.0*0.0 ±végtelen (Inf) karakterisztika csupa 1, mantissza csupa 0 Pl.: 1.0/0.0, inf+1.0, túl nagy érték nem szám (NaN) karakterisztika csupa 1, mantissza nem csupa 0 Pl.: 0.0/0.0, inf-inf, 0.0*inf, NaN+1.0 denormalizált szám (subnormal) karakterisztika csupa 0, mantissza nem csupa 0 Számítógép architektúrák 33
Számolás lebegő pontos számokkal Összeadás: fixpontostól nagyon eltérő módszer Példa: 7,5 + 0,625 7,5 = 01000000 11110000 00000000 00000000 0,625 = 00111111 00100000 00000000 00000000 3 10000001 > 01111110 11110000 + 10100 100000100 1+10000001 = 10000010 01000001 000000100 00000000 00000000 (-1) 0 * 1,000001 *10 11 = 8,125 Számítógép architektúrák 34
Példa: bitsorozat értelmezés Mit jelenthet az alábbi big-endian bitsorozat? 11101001 10110000 10100101 01000110 32 bites előjeles egész: -374 299 322 32 bites előjel nélküli egész: 3 920 667 974 16 bites előjeles egészek: -5 712; -23 226 16 bites előjel nélküli egészek: 59 824; 42 310 lebegőpontos: -26693928249241673000000000.0 Latin 1 szöveg: é F Latin 2 szöveg: é ĽF Unicode szöveg UTF8 kódolással: 鰥 F Pakolt BCD:?9?0?546 (érvénytelen) vagy +9-0+546 Számítógép architektúrák 35
Mutató és rekord típusok Mutató vagy referencia Indirekt hivatkozásra szolgálnak Tartományának elemei tárcímek Gyakorlatilag előjel nélküli egészek A mutató típusú változónak is van saját címe Rekord Különböző típusú tárterületek együtt Mindegyik mező a saját reprezentációjával Számítógép architektúrák 36
Tömb típus Azonos típusú elemek folytonosan tárolva Minden elem az adott reprezentációval A tömb neve C nyelven: az első elemre mutató nevesített konstans Egyes nyelveken: az összes elemre hivatkozás Egydimenziós tömb i. elemének a címe (A i ) A i = A 1 + i 1 E ahol E egy adatelem mérete és A 1 a tömb kezdőcíme Számítógép architektúrák 37
Több dimenziós tömbök Sorfolytonos tárolás M 3,2 = e 1,1 e 1,2 e 2,1 e 3,1 e 2,2 e 3,2 M 6 = e 1,1 e 1,2 e 2,1 e 2,2 e 3,1 e 3,2 Az i. sor j. elemének címe (A i,j ) egy NxM-es mátrixban A i,j = A 1,1 + M i 1 E + j 1 E ahol E egy adatelem mérete és A 1,1 a mátrix első elemének címe Számítógép architektúrák 38
Karakterek sorozata Sztring típus Elemei a megfelelő belső reprezentációban (pl. C: 1 bájt, ASCII; Java: 2 bájt, Unicode) Hossza Fix hosszúságú Változó hosszúságú A sztring elején hossz tárolás (pl. Pascal) A sztring végén speciális lezárójel (pl. C) Kombinált (pl. Delphi) Számítógép architektúrák 39
A számítógép vázlatos felépítés Architektúra szintek Processzor Buszrendszer Memória Perifériák
Számítógép rétegmodell 0. szint: digitális logikai áramkörök (logikai kapu, flip-flop) 1. szint: mikro-architektúra (konkrét ALU, buszok) 2. szint: utasításkészlet architektúra (ISA) 3. szint: operációs rendszer (ütemezés, tárkezelés) 4. szint: programozási nyelvek (alkalmazások) Számítógép architektúrák 41
Neumann architektúra Princeton architektúra (Neumann János) Neumann elvek (1945): Elektronikus működés Kettes számrendszer használata Tárolt program elve Adat és program tárolás ugyanott/ugyanúgy Soros programvégrehajtás Univerzális felhasználhatóság Számítógép architektúrák 42
Harvard architektúra Külön adat és program memória Eltérő felépítés, címtartomány, típus is lehet Párhuzamos adat és utasítás elérés miatt nagyobb teljesítmény Főként mikrokontrollerekben használt Első alkalmazás: Mark I (1944) Módosított Harvard architektúra Külön adat/utasítás gyorsítótár, közös memória Modern CPU-k esetén elterjedt Számítógép architektúrák 43
A számítógép alapvető felépítése Processzor Memória Input-Output interfész Buszrendszer Perifériák Perifériák Processzor Memória I/O interfész Buszrendszer Számítógép architektúrák 44
Processzor Központi feldolgozó egység A számítógép agya Vezérlés Utasítás végrehajtás (Mikro)processzor integrált áramköröket tartalmaz Műveletek és az egységek szinkronizálásához órajelet használ Számítógép architektúrák 45
Operatív tár Memória Aktuális műveletekhez szükséges rövidtávú memória Elsődleges tároló, nem háttértár Címezhető adattároló rekeszek Adatok és utasítások tárolása Elektronikus működés Integrált áramkör Számítógép architektúrák 46
Buszrendszer Busz (sín): vezetékek egy csoportja, amelyeken digitális jelet lehet továbbítani Buszrendszer logikai részei Címbusz: a címek bitsorozatának átvitelét biztosítja Adatbusz: adatok átviteléért felelős Vezérlő busz: részegységek működésének összehangolását segítő vezérlő jelek továbbítása címbusz adatbusz vezérlő busz Processzor Memória I/O interfész Számítógép architektúrák 47
I/O interfész A számítógép központi része és a külső egységek (perifériák) közötti adatátvitelre szolgál A kimeneti/bemeneti eszközök portokhoz kapcsolódnak A portok címezhetőek (hasonlóan a memóriához) Az adatátvitel során gyakran puffereket használunk Szoftveres szinten driverekre van szükség Számítógép architektúrák 48
Perifériák Input Tároló Billentyűzet Egér Szkenner Kamera Háttértár (HDD, SSD) CD/DVD/Blu-ray USB tároló Memória kártya Output Monitor Nyomtató Projektor Audio rendszer Hálózat Ethernet kártya Wi-Fi kártya Számítógép architektúrák 49
A processzor felépítése és működése CPU Regiszterek Fetch-execute ciklus RISC / CISC processzorok
Processzor Központi Feldolgozó Egység Central Processing Unit (CPU) Részei: Vezérlő egység (CU) Aritmetikai és logikai egység (ALU) Címző egység (AU) és Busz illesztő egység (BIU) Regiszterek Belső buszrendszer Belső gyorsítótár Egyéb (pl. órajel generátor) Végrehajtó egység (EU) Számítógép architektúrák 51
Regiszterek Kis méretű (flip-flop-szerű) tároló áramkör Mérete általában a busz szélességével egyenlő Általában 8-512 bit tárolására alkalmas Gyors hozzáférésű (elérési idő < 1ns) Darabszámát a processzor határozza meg (10-100) Gyakran regisztertömböket alkot Van nevűk (néha átnevezhetőek) 3 kategória: Rendszer-, általános célú- és speciális célú regiszter Számítógép architektúrák 52
Regiszterek Programszámláló regiszter (PC vagy IP) A következő utasítás memóriacímét tartalmazza Az utasítás végrehajtása során átáll (általában) a következő utasítás címére, azaz az aktuális utasítás méretével növekszik Szekvenciális végrehajtás eszköze Értékét egyes utasítások is állíthatják (vezérlés átadás) Vezérlőegységhez (CU) kapcsolódik Számítógép architektúrák 53
Utasítás regiszter (IR) Regiszterek A memóriából beolvasott utasítás műveleti kódját tartalmazza A vezérlőegységhez kapcsolódik A CU ez alapján dönti el milyen műveletet kell végeztetni milyen adaton kell dolgozni és az hogyan érhető el A programozó által nem hozzáférhető Számítógép architektúrák 54
Regiszterek Akkumulátor (ACC, W, AX) Általános munka regiszter az ALU-ban Aritmetikai és logikai műveletek operandusait tartalmazza legtöbbször Általában az ilyen műveletek eredménye is itt tárolódik Újabb processzorokban több hasonló regiszter ugyanerre a célra (kevesebb memória művelet) Általában egész típusú adatokat tartalmaznak Számítógép architektúrák 55
Regiszterek Állapot regiszter (SR, FLAGS) Processzor állapottal, művelet eredményével kapcsolatos jelző/vezérlő biteket tartalmaz Feltételes vezérlésátadásnál (is) nagyon fontos Átvitel (CF) Nibble átvitel (AF) Túlcsordulás (OF) Előjel (SF) Megszakítási maszk (IF) Nulla (ZF) Paritás (PF) Számítógép architektúrák 56
Regiszterek Verem mutató regiszter (SP) A hardveres rendszerverem használatához A verem tetejének memóriacímét tartalmazza Általában a verem előrefelé nő Általában SP a legutóbb betett elemet címzi (Intel) Speciális célú regiszter A push és pop művelet automatikusan változtatja az SP értékét Számítógép architektúrák 57
Regiszterek Címzéssel kapcsolatos speciális regiszterek Operandusok címének meghatározásánál egy alap címhez képesti relatív cím (eltolás) megadásához használható Az AU-hoz (BIU-hoz) kapcsolódnak Tömbök, sztringek és lokális változók esetén illetve memória szegmens kezelésnél hasznos Például: BP, X, SI, DI, CS, DS, SS, ES Számítógép architektúrák 58
Regiszterek Memória cím regiszter (MAR) Összeköti a rendszer (külső) és belső címbuszt Azt a címet tartalmazza, amelyhez legközelebb hozzá kell férni (írásra vagy olvasásra) A címző egység hajtja meg Címbusz szélességű Számítógép architektúrák 59
Regiszterek Memória adat regiszter (MDR) Összeköti a rendszer (külső) és belső adatbuszt Azt az adatot tartalmazza amelyet legközelebb ki kell írni a memóriába vagy amely legutóbb be lett olvasva a memóriából Kétirányú regiszter Adatbusz szélességű Számítógép architektúrák 60
Aritmetikai és logikai egység Számítási műveleteket végez Tartalmaz: fixpontos összeadót, komplemens képzőt, léptető regisztereket, bitenkénti logikai művelet végző, stb. áramköröket A operandus B operandus utasítás ALU állapot eredmény Számítógép architektúrák 61
Vezérlő egység Az IR-ben lévő érték alapján irányítja, szabályozza a többi egység (pl. ALU) működését Fontos regiszterei: IR, PC, SR A vezérlés történhet Huzalozott logikával (közvetlenül) Minden utasításhoz létrehozott bonyolult digitális elektronika segítségével Mikroprogramozott (közvetett) módon Minden műveleti kód elindít egy apró (ROM-ban tárolt) mikroprogramot Számítógép architektúrák 62
Címző egység Addressing Unit (AU), Address Generation Unit (AGU) Az utasítások sokféle címzési mód segítségével határozhatják meg hol található az operandus Az AU az operandus címét állítja elő és helyezi el az MAR-ban Az utasításban található címet képezi le fizikai memóriacímre Tárolóvédelmi hibák felismerése Kapcsolat: BIU Számítógép architektúrák 63
Órajel Periodikus négyszög hullám Órajel generátor (oszcillátor) állítja elő Szinkronizálja az egységek működését Frekvenciája arányos a CPU által disszipált hővel Periódusidő nagyobb, mint a jelterjedési idő 1 MHz 4 GHz Gyakran változtatható (turbo, powersave) Egyéb sebesség jellemzők: MIPS, FLOPS Számítógép architektúrák 64
A CPU működése Egy művelet sorozat ismételgetése Fetch-execute ciklus Órajel szinkronizált CU vezényel Végtelen, monoton, gépies ismétlés során Adatmozgatás Műveletvégzés Fontos a regiszterek (PC, IR, SR, ACC, MAR, MDR, stb.) tartalma és annak változása Számítógép architektúrák 65
Fetch-Execute ciklus 1. Utasítás beolvasása A PC-ben található érték megmondja, hol található a memóriában a következő utasítás. Ezt be kell olvasni az IR-be. 2. Dekódolás A beolvasott műveleti kódot értelmezni kell. Milyen művelet? Milyen adatokon? Eredmény hová kerül? Utasításkészlet architektúra (ISA) definiálja Lehet huzalozott vagy mikroprogramozott Számítógép architektúrák 66
Fetch-Execute ciklus 3. Operandus beolvasása Az operandus címének meghatározása és onnan beolvasása a megfelelő regiszterbe 4. Művelet végrehajtása például az ALU által, az eredmény egy átmenti regiszterbe kerül 5. Eredmény tárolás regiszterbe vagy memóriacímre 6. Következő utasítás címének meghatározása Számítógép architektúrák 67
Olvasási ciklus DIY Calculator architektúra esetén C. Maxfield, A. Brown: The Official DIY Calculator Data Book Számítógép architektúrák 68
Írási ciklus DIY Calculator architektúra esetén C. Maxfield, A. Brown: The Official DIY Calculator Data Book Számítógép architektúrák 69
CISC processzor Komplex utasításkészletű számítógép Sok, összetett utasítás Sokféle címzési mód Változó hosszúságú utasítások Egy utasítás több gépi ciklust igényel Mikroprogramotott Kevés regiszter Utasítások elérhetik közvetlenül a RAM-ot Pl.: IA-32, Motorola 68k Számítógép architektúrák 70
RISC processzor Csökkentett utasításkészletű számítógép Kevés, egyszerű utasítás Kevés címzési mód Állandó hosszúságú utasítások Utasítás egy gépi ciklust igényel Huzalozott vagy mikroprogramotott Sok regiszter Csak a Load/Store utasítás éri el a RAM-ot Pl.: ARM, AVR, PIC Számítógép architektúrák 71
CISC vs RISC Példa: A[i] = x-32; r1: tömb kezdőcíme (A); r2: i címe; r3: x címe CISC ADD r4, (r1), (r2) SUB (r4), (r3), 32 adat a regiszterben eredmény adat címe a regiszterben operandus konstans adat RISC LDR r5, (r1) LDR r6, (r2) ADD r4, r5, r6 LDR r7, (r3) SUB r8, r7, 32 STR (r4), r8 Számítógép architektúrák 72
Megszakítási rendszer és input/output Megszakítás, kivétel Megszakításkezelés Input/output Buszrendszerek, perifériák
Szükségesség Az általános célú számítógépek fontos képessége, hogy kölcsön hat az I/O eszközökkel (billentyűzet, egér, hálózati interfész, monitor). Ezek az eszközök azonnali választ várnak a processzortól, függetlenül attól mivel foglalkozik éppen. Váratlanul bekövetkező eseményekre a CPU-nak reagálnia kell. A megszakítás szolgál a CPU figyelmének felhívására. Számítógép architektúrák 74
Megszakítás Speciális jelzés a CPU számára Egy esemény bekövetkeztét jelzi Azonnal reagálni kell rá A normál végrehajtást meg kell szakítani Később tudni kell folytatni Forrás Hardver Processzor Szoftver Számítógép architektúrák 75
Aszinkron Megszakítás típusok Külső forrásból (például I/O eszköz) származik Független az aktuálisan végrehajtott utasítástól Szinkron (másként kivétel ) Processzor által kiváltott kivétel Hiba: kijavítható probléma, újra próbálkozás Elvetés: jelentős, javíthatatlan (hardver) hiba Csapda: pl. nyomkövetés, programozott kivétel (rendszerhívás) Számítógép architektúrák 76
Megszakítás típusok Aszinkron megszakítás utasítás1 utasítás2 utasítás3 utasítás4 Csapda utasítás1 syscall utasítás3 utasítás4 Hiba utasítás1 utasítás2 utasítás3 utasítás4 Elvetés utasítás1 utasítás2 utasítás3 utasítás4 Számítógép architektúrák 77
Megszakítási vonal Fogalmak Egy (vagy több) CPU vezérlő busz vezeték Megszakítási kérelem (IRQ) A megszakítások egész számokkal (0-255) azonosíthatók Lehet prioritásuk Programozható megszakítás vezérlő (PIC, APIC) Azonosítja a megszakítás forrását, aktiválja a megszakítási vonalat, kezeli prioritásokat Számítógép architektúrák 78
Megszakítási rutin (ISR) Fogalmak Az a programrész, amely megszakítási kérelem esetén aktiválódik, kezeli a speciális helyzetet Hívás nélküli alprogramhoz hasonlít Kontextus Ahhoz, hogy folytatni tudjuk a normál végrehajtást a kivételkezelés után először el kell menteni, majd vissza kell állítani az eredeti környezetet, regisztertartalmakat Számítógép architektúrák 79
Maszkolás Fogalmak Egyes megszakítási kérelmek figyelése kikapcsolható Egyszerre, globálisan a processzorban Külön-külön, a PIC-ben lévő IMR segítségével Vannak nem maszkolható megszakítások (NMI) Nested interrupt ( fészkelt megszakítás ) Megszakítási rutint megszakító újabb IRQ Megszakítás megszakítása Számítógép architektúrák 80
Megszakításkezelés Utasítás beolvasás Utasítás dekódolás Kontextus mentés Utasítás végrehajtás Eszköz azonosítás nem Megszakítás? Rutin (ISR) keresés igen igen NMI? nem Maszk tilt? igen nem Rutin (ISR) végrehajtás Kontextus visszaállítás Számítógép architektúrák 81
Megszakításkezelési technikák Vektoros megszakításkezelés Megszakítási vonal aktiválás A megszakítás kérő azonosítja magát Buszrendszeren egyedi kódot/címet küld ISR címek egy tömbben Lekérdezéses (polling) megszakításkezelés Megszakítási vonal aktiválás A CPU sorozatos lekérdezésekkel kideríti kinek van megszakítási igénye Számítógép architektúrák 82
vektor Megszakításkezelési technikák Vektoros megszakításkezelés IRQ n ISR 1 címe ISR n címe Lekérdezéses megszakításkezelés IRQ megszakítás lekérdező eljárás programkódja ISR 1 programkódja ISR 1 programkódja ISR n programkódja ISR n programkódja Számítógép architektúrák 83
Input/Output Kapcsolat a külvilággal Hardveres I/O interfészek Szoftver interfész (device driver) Perifériás eszközök Periféria 1 Periféria 2 buffer buffer Processzor Memória Külső buszok I/O interfészek Rendszer busz Számítógép architektúrák 84
Input/output interfészek Összeköttetés a CPU és a perifériák között Címezhető eszközök Memóriára leképezett I/O (MMIO) Portra leképezett I/O (PMIO) Különböző adatsebesség Különböző fizikai jelek Soros illetve párhuzamos átvitel Az eszközvezérlés nem a CPU feladata Számítógép architektúrák 85
Programozott I/O (PIO) I/O technikák Speciális I/O utasításokkal (in, out) A program írja le mikor kell a perifériához fordulni (függetlenül annak állapotától) Utasításonként csak egy szó átvitele az I/O buffer és a CPU regiszterei között I/O adat és címregiszterek a CPU-ban Sok CPU időt felemészt az eszközök állapotának sorozatos elkérdezése Számítógép architektúrák 86
Megszakítás vezérelt I/O I/O technikák A periféria megszakításokkal jelez a CPU-nak Ha van új input vagy Ha kész van az outputtal A CPU nem figyel folyamatosan Közben tud mással foglalkozni Az adatmozgás a CPU és az I/O modul között történik Számítógép architektúrák 87
I/O technikák Direkt memória hozzáférés (DMA) Külön vezérlő révén közvetlen RAM-I/O kapcsolat (RAM-RAM, RAM-I/O) A CPU kéri fel a DMA vezérlőt a műveletre Ha a DMA vezérlő kész van megszakítást kér CPU nem vesz részt az adatmozgatásban Blokkos átviteli mód I/O processzor (IOP) DMA kiterjesztése nagyobb önállósággal Számítógép architektúrák 88
Buszrendszerek Párhuzamos ISA PCI ATA (ATAPI, UATA, IDE) VESA Local Bus (VLB) SCSI AGP Soros I 2 C PCI Express Serial ATA USB Serial Attached SCSI FireWire Számítógép architektúrák 89
PCI busz Peripheral Component Interconnect Párhuzamos belső busz Sínszélesség: 32 vagy 64 bit Átviteli sebesség: 133-533 MB/s Fejlesztés: 1992-2002 Külön vezérlőáramkör szükséges Forrás: en.wikipedia.org/wiki/conventional_pci Számítógép architektúrák 90
PCIe busz Peripheral Component Interconnect Express Soros belső busz 1 link 1, 2, 4, 8, 16 vagy 32 sávból áll Átviteli sebesség: 250-63000 MB/s (v5.0) Fejlesztés: 2003- Minden eszköznek külön link (nem osztoznak, switching) Forrás: en.wikipedia.org/wiki/pci_express Számítógép architektúrák 91
(Parallel) ATA busz (Parallel) AT Attachment Párhuzamos belső busz Szinonimák : PATA, ATAPI, UATA, IDE, EIDE Átviteli sebesség: 3,3-166 MB/s Fejlesztés: 1986-2003 HDD, FDD, CD és DVD meghajtó csatlakoztatás Forrás: en.wikipedia.org/wiki/parallel_ata Számítógép architektúrák 92
Serial ATA Soros belső busz Pont-pont kapcsolat SATA busz Átviteli sebesség: 150-1969 MB/s (v3.2) Fejlesztés: 2000- Hot swapping HDD, SSD, CD és DVD meghajtó csatlakoztatás Forrás: hu.wikipedia.org/wiki/serial_ata Számítógép architektúrák 93
Universal Serial Bus Soros külső busz USB busz Plug-and-Play, elosztható (hub) Átviteli sebesség: 0,18-5000 MB/s (v4.0) Fejlesztés: 1996- Csatlakozók: standard-a, standard-b, mini-a, mini-b, micro-a, micro-b Forrás: en.wikipedia.org/wiki/usb Számítógép architektúrák 94
Vezérlő hub-ok Az alaplap fontos chip-jei Northbridge (memóriavezérlő hub) Southbridge (I/O vezérlő hub) CPU Front-side bus (FSB) AGP RAM Northbridge Southbridge BIOS PCI IDE USB LAN I/O Számítógép architektúrák 95
Eszközmeghajtó Device Driver: szoftver interfész a hardverhez Eszköztípusok Karakteres, blokkos, hálózati, egyéb A programok hardvertől független rendszerhívásokat alkalmaznak open, read, write, close, Az eszközmeghajtók töltik meg ezt konkrét hardver specifikus tartalommal Számítógép architektúrák 96
Adattárolás Operatív memória Cache Háttértárak
Tárolók osztályzása Írhatóság szempontjából Csak olvasható, olvasható-írható Hierarchiabeli helye szerint Elsődleges, másodlagos, harmadlagos Tárolási közeg szerint Félvezető, mágneses, optikai Adatmegőrzés szerint Megmaradó, nem megmaradó Elérés szerint Soros elérésű, tetszőleges elérésű Számítógép architektúrák 98
Elsődleges memória A processzor és a futó programok által aktívan használt tároló Gyors elérésű Nem maradandó memória Méret erősen korlátos Ide tartoznak Regiszterek Gyorsítótárak Operatív tár / memória Számítógép architektúrák 99
Másodlagos memória Háttértároló Az elsődleges memória kiterjesztése Nagy tároló kapacitás Kisebb elérési sebesség Maradandó tárolás Ide tartoznak HDD, SSD CD-, DVD-meghajtó Memóriakártya Számítógép architektúrák 100
Harmadlagos memória Többnyire eltávolítható adathordozókra épít Robotikus eszközök csatlakoztatják a kívánt tároló médiumot ( wurlitzer ) Ritka hozzáférés Óriási tároló kapacitás Cél hosszú távú archiválás Ide tartoznak Mágnesszalagos tárolók Optikai tárolók Számítógép architektúrák 101
Félvezető memóriák Read-Only Memory (ROM) Gyártás során kerül bele a tartalom, ami később nem változtatható Tartalmat sokáig megőrzi, tápfeszültség hiányában is Programmable Read-Only Memory (PROM) Gyártás után üres. Speciális eszközzel egyszer beégethető a tartalom Az írás folyamata lassú (a RAM-hoz képest) Számítógép architektúrák 102
Félvezető memóriák Erasable Programmable ROM (EPROM) Erős UV fénnyel (lassan) törölhető a tartalom Majd ismét újraírható Electrically Erasable Programmable ROM (EEPROM) Elektronikusan, bájtonként törölhető tartalom Flash memória Speciális továbbfejlesztett EEPROM Blokkonként (gyorsabban) törölhető Számítógép architektúrák 103
Félvezető memóriák Random Access Memory (RAM) Véletlen/közvetlen elérés Elérési idő nem függ az elhelyezkedéstől Írható/olvasható tetszőleges számban Elveszti a tartalmát tápfeszültség hiányában Nagy írási/olvasási sebesség Static Random Access Memory (SRAM) Frissítés nélkül is megtartja a flip-flipokban a tartalmat a tápellátás megszűnéséig (pl. cache) Számítógép architektúrák 104
Félvezető memóriák Dynamic Random Access Memory (DRAM) Rendszeresen frissíteni kell, hogy a kondenzátor révén tárolt információ megmaradjon SRAM-nál lassabb (pl. operatív tár) Olyan gyorsan válaszol ahogy tud Synchronous Dynamic RAM (SDRAM) Órajellel szinkronizált válasz Gyorsabb az aszinkron DRAM-nál (pipeline működés) Számítógép architektúrák 105
Félvezető memóriák Double Data Rate (DDR) Gyorsított SDRAM Az órajel fel és leszálló élére is szinkronizál DDR2, DDR3, DDR4 Egyre nagyobb sebesség Egyre nagyobb adatsűrűség Egyre kisebb feszültség Nem kompatibilis DIMM (SDRAM, DDR, DDR2, DDR3, DDR4) Számítógép architektúrák 106
Gyorsítótár Egyes eszközök rendszeresen adatot cserélnek Az eszközök adatátviteli sebessége nagyon eltér A lassú eszköz miatt a gyors is lelassul Pl. a CPU kb. 10-szer gyorsabb a RAM-nál CPU cache, GPU cache, Web cache, DNS cache Megoldási ötlet Köztes tároló beiktatása (cache) Gyorsabb, mint a lassú eszköz (SRAM, közeli) Magas ára miatt teljesen nem helyettesíti a lassút Létjogosultság: lokalitási elvek Számítógép architektúrák 107
Térbeli lokalitás elve Gyorsítótár Ha egy program hivatkozik egy memóriacímre (adat vagy utasítás), akkor nagy valószínűséggel hamarosan hivatkozik a szomszédos címekre is Szekvenciális végrehajtás, tömbök Időbeli lokalitás elve Ha egy program hivatkozik egy memóriacímre, akkor nagy valószínűséggel hamarosan ismét hivatkozik rá Ciklusok Számítógép architektúrák 108
Gyorsítótár Leggyakrabban használt adatok tárolása Kisebb tárolókapacitás, gyorsabb elérés (SRAM), mint az operatív memória esetén Átlátszóak a felhasználó számára Asszociatív (CAM) memóriát tartalmazhat CPU cache Többszintű: L1, L2, L3 cache On-chip vagy off-chip Számítógép architektúrák 109
Gyorsítótár felépítése A tárolás egysége a Sor (vagy Blokk ) A Sorhoz Tag (toldalék) és Flags mezők A Tag a Blokk főtárbeli címéhez kötődik A Blokk a főtár egy részének a másolata CPU Cache Tag F Blokk 128 DEF 131 MNO 129 GHI RAM ABC 127 DEF 128 GHI 129 JKL 130 MNO 131 Számítógép architektúrák 110
A cache működése A processzor a szükséges adatot a cache-ben keresi (átadja a tárcímet a cache vezérlőnek) Ha az adott cím el van tárolva a Tag-ben (cache hit), akkor válaszol a Blokk tartalma alapján Ha a cím nincs eltárolva (cache miss), akkor beolvassa a megfelelő területet a főtárból, dönt arról, melyik sorba mentse és elmenti (felülírva valamelyik cache sort), majd válaszol a Blokk tartalma alapján Számítógép architektúrák 111
A cache működése Asszociativitás: Egy adott memóriacímen lévő adat hány cache sorban tárolódhat. Közvetlen leképezésű (direct-mapped) Egy RAM címről csak 1 sorra történhet leképezés. Teljesen asszociatív (fully associative) Bármely címről származó adat bármely cache sorban. Csoport asszociatív (N-way set-associative) Egy RAM címről néhány sor egyikébe kerül az adat. Speciális esetek: közvetlen leképezés, teljes associatív Számítógép architektúrák 112
A cache működése Helyettesítési szabályok felülírási igény esetén Véletlen gyors, de nem hatékony Legkevésbé használt (LRU) hatékony, de komplikált 0 3 1 2 Nem legutóbb használt Hatékony és egyszerű 0 0 1 0 Számítógép architektúrák 113
A cache működése Az írás művelete során figyelni kell a főtár és a gyorsítótár tartalmának konzisztenciájára Megoldások Közvetlen írás Visszaírás Közvetlen írás (write through) Gyorsítótár írásával egyidejűleg a főtár is íródik Az írást a cache nem gyorsírja Számítógép architektúrák 114
Visszaírás (write back) A cache működése Gyorsítótár minden írás esetén módosul A Tag vezérlő részében ezt jelezzük ( dirty ) Ha a cache adott sorát felül kell írni újabb olvasási művelet miatt, és a sor dirty visszaírjuk a tartalmát a főtárba Majd megtörténik a sor felülírása az újjal Többprocesszoros rendszerekben probléma a külön cache-ek miatt. Probléma DMA esetén is. Számítógép architektúrák 115
A cache működése olvasás Igény? írás Cache hit? nem igen igen Cache hit? nem Felülírandó sor keresés Felülírandó sor keresés Dirty? nem igen Felülírandó sor visszaírása Felülírandó sor visszaírása igen Dirty? nem Alsóbb memória olvasás a választott sorba Státusz: nem dirty Válasz az adattal Alsóbb memória olvasás a választott sorba Új adat írása a választott blokkba Státusz: dirty Számítógép architektúrák 116
A cache jellemzői A gyorsítótár mérete A Blokk mérete (pl. 64 byte) Egy Blokk kikeresésének ideje Aktualizálási idő (visszaírásnál) Helyettesítési stratégia (sor felülírásnál) Találati arány (hit rate) Általában 90% feletti Méretfüggő, helyettesítés függő, Számítógép architektúrák 117
A címek felépítés Cím = Tag & Index & Offset Index: azonosítja a cache sor csoportot (set) 2 N csoport esetén N bit Offset: a bájt pozíciója a blokkban 2 S méretű blokk esetén S bit Tag: a RAM cím további (felső) bitjei L bites cím esetén L-N-S bit Példa: Pentium 4, 8kB 4-utas L1 cache, 64B blokk log 2 (8192/64/4)=5 index bit; log 2 (64)=6 offset bit; 32-5-6=21 tag bit Számítógép architektúrák 118
csoport 01 csoport 00 Valid Dirty Recent Címzés példa Cím: tag index offset 1 1 0 1 1 1 0 0 0 1 0 1 0 13 bites címzés 128B cache méret csoport asszociatív (4-utas) cache 8B blokk méret write-back írás nem a legutóbbi helyettesítés Tag Blokk 000 001 010 011 100 101 110 111 1D 1 0 1 2E 13 3D D1 4F FF 01 A2 2E 1 1 0 33 8B CA 4F 89 67 30 12 FA 0 0 0 12 36 77 B6 0C E0 55 75 20 1 1 0 02 00 00 00 43 C0 3E E1 56 1 1 0 FF FF FF FF 24 E4 AA DA F2 0 0 0 23 43 E4 1A 4D 43 02 35 DC 1 1 0 3E 18 48 45 4C 4C 4F 00 03 1 0 1 48 42 C3 C5 23 40 30 12............ Cache hit? Mi van a címen? Felülírható sor? Kell menteni? Számítógép architektúrák 119
Cache hierarchia processzor processzor core core core core L1 utasítás L1 adat L1 utasítás L1 adat L1 utasítás L1 adat L1 utasítás L1 adat >10kB L2 L2 L2 L2 >100kB L3 L3 >1MB Fő memória >1GB Számítógép architektúrák 120
Cache hatása a programokra... ARRAY = (double*)malloc(size*sizeof(double)); N_Rep = 1000000000/SIZE; for(j=0; j<n_rep; j++) for(i=0; i<size; i++) sum += ARRAY[i];... Ha az adat elfér a cache-ben, akkor a program gyorsabb! Számítógép architektúrák 121
Cache hatása a programokra Sorfolytonos mátrix kezelése int a[n][m]; Sorról-sorra: for(i=0;i<n;i++) for(j=0;j<m;j++) sum+=a[i][j]; Oszlopról-oszlopra: for(j=0;j<m;j++) for(i=0;i<n;i++) sum+=a[i][j]; Nagy mátrix esetén: Gyakori cache miss Lassú futás Számítógép architektúrák 122
Problémák Háttértár Az operatív tár nem elég nagy Kikapcsoláskor a RAM tartalma elvész Megoldás Háttértár: lassabb elérés, de nagyobb kapacitás Tárolási elv Mágneses: merevlemez (HDD) Elektronikus: szilárdtest-meghajtó (SSD) Optikai: CD, DVD, Blu-ray Számítógép architektúrák 123
Merevlemez Winchester, Hard Disc Drive (HDD) Mágnesezhető, forgó lemezeken tárolt adat Lemezenként 2 író/olvasó fej Tulajdonságai Tárolókapacitás: <8TB Írási/olvasási sebesség: 1MB/s 100MB/s Fordulatszám: 5400 15000 rpm Csatoló felület: ATA, SATA, SCSI, USB Lemez gyorsítótár mérete: 1MB 64MB Számítógép architektúrák 124
Adattárolás merevlemezen A HDD több tároló lemezt tartalmazhat A lemezek felülete koncentrikus sávokra osztott Az egymás alatti lemezeken lévő azonos sugarú sávok alkotják a cilindert A sávok szektorokra vannak osztva Ez az adattárolás legkisebb egysége Klaszter a szektorokból álló folytonos terület Minden író/olvasó fej egyszerre mozog egy adott pillanatban egy cilinderen helyezkednek el Számítógép architektúrák 125
Adattárolás merevlemezen Átlagos hozzáférési idő T access = T seek + T rotation + T other T access T seek + T rotation ( 10 ms) Az első bájt (a szektorban) drága a többi olcsó sáv szektor lemez fej Számítógép architektúrák 126
Hagyományos szerkezet 512 bájtos szektor Szektor rés szinkron cím hibajavító 512 bájt adat sáv szektor szektor szektor szektor szektor szektor szektor szektor Advanced Format (AF) 4K native 4096 bájt adat Számítógép architektúrák 127
Szektor hatása programokra... #define SIZE 2048 char BUFFER[SIZE]; out=open("output.txt",o_wronly); write(out, BUFFER, SIZE); close(out);... Szektor méretnél kevesebbet fájlba írni nem hatékony! Számítógép architektúrák 128
Bufferelt adatfolyam Az output adatfolyamokat gyakran a rendszer buffereli és csak később blokkosan írja ki. Kevesebb rendszerhívás, kevesebb lemez művelet, gyorsabb program while(i<100000){ fprintf(f, x ); sleep(t); i++; } Számítógép architektúrák 129
Adatelérés merevlemezen Hogyan hivatkozható egy terület a HDD-n? CHS cilinder-fej-szektor hármassal (régi) LBA logikai blokk címzéssel (lineáris, új) Konverzió (egyszerű esetben): LBA = (C*N fej +H)*N szektor +(S-1) Lemezvezérlő foglalkozik a logikai és fizikai cím leképezéssel Számítógép architektúrák 130
Régi HDD esetén Sávok szektorszáma Minden sávban azonos számú szektor Külső szektorok adatsűrűsége sokkal kisebb, mint a belsőké (kihasználatlanság) Modern HDD esetén Zone Bit Recording (ZBR) Szektorok adatsűrűsége közel azonos Külső sávokban több szektor, mint a belsőkben Címzés bonyolultabb Számítógép architektúrák 131
SSD Szilárdtest-meghajtó (Solid State Drive) Mozgó alkatrész nélküli félvezető memória Blokkos adatelérés SATA, SCSI, USB csatlakozás Előnyei a HDD-vel szemben Gyorsabb adatelérés Egyenletes adathozzáférés Kisebb zaj, fogyasztás és hőtermelés Mechanikai megbízhatóság Számítógép architektúrák 132
Háttértár magasabb szinten Formázás Alacsony szintű (szektor szerkezet kialakítás) Magas szintű (fájlrendszer) Particionálás HDD kisebb logikai egységre bontása MBR, GPT kialakítás Fájlrendszerek FAT32, NTFS ext2, ext3, ext4 Számítógép architektúrák 133
Master Boot Record LBA 0 MBR Boot kód (pl. GRUB) + Partíciós tábla Max 4 partíció és egyenként max 2 TB 4 elsődleges partíció 3 elsődleges partíció + 1 kiterjesztett partíció (utóbbin további logikai partíciók lehetnek) BIOS indítja a betöltőt a Power On Self Test után Számítógép architektúrák 134
GPT GUID Partition Table LBA 0: MBR megőrzés; LBA 1: elsődleges GPT fejrész LBA 2-33: elsődleges GPT partíciós tábla Utolsó szektorok: biztonsági tartalék Másodlagos GPT fejrész és partíciós tábla UEFI szabvány (BIOS lecserélés) Akár 128 partíció, max lemezméret 9,4 ZB Számítógép architektúrák 135
FAT fájl rendszer Merevelemez 0 MBR 1 FAT 1 2 FAT 2 3 Gyökér 4 gyümölcs 5 állat. 6 Az alma 7 finom 8 szerintem. 9 10 Emlős File Allocation Table 0 1 2 3 4 5 6 7 8 9 10 8 EOF 7 4 EOF 5 Gyökérkönyvtár bejegyzései Fájlnév Attribútumok Kezdő klaszter Alma.txt Bla-bla 6 Kutya.txt Bla-bla 10 Számítógép architektúrák 136
Pl.: Ext2, Ext3, Ext4 Fájl tárolása Könyvtár tárolás Linux fájl rendszerek könyvtári bejegyzés inode adat blokk fájl név inode ID attribútumok mutató fájl tartalom a lemezen könyvtári bejegyzés inode adat blokk könyvtár név inode ID attribútumok mutató fájl1 inode ID 1 fájl2 inode ID 2 fájl3 inode ID 3 fájl4 inode ID 4 Számítógép architektúrák 137
Linux fájl rendszerek Könyvtár hierarchia könyvtári bejegyzés inode fájl adat partíció MBR cilinder csop. cilinder csop. cilinder csop. cilinder csop. cilinder csop. cilinder csop. sys inode tábla adat szektorok Számítógép architektúrák 138
adatblokk mutatók attribútumok inode inode méret eszköz felhasználó csoport fájl mód időbélyegek linkszám adat blokkok direkt mutatók (12 db) simpla indirekt dupla indirekt tripla indirekt Számítógép architektúrák 139
RAID Redundant Array of Independent Discs Adatelosztás vagy replikálás több lemezen A technológia célja Adatbiztonság növelés Adatátviteli sebesség növelés Több szint (RAID 0-6) Akár hierarchikusan is (RAID 1+0, RAID 5+0) Szoftveres vagy hardverrel támogatott megvalósítás Számítógép architektúrák 140
RAID példák RAID 0 (összefűzés) A 1 A 3 A 5 A 7 A 2 A 4 A 6 A 8 Lemez 1 Lemez 2 RAID 1 (tükrözés) A 1 A 2 A 3 A 4 A 1 A 2 A 3 A 4 Lemez 1 Lemez 2 Fizikai kapacitás: 2 egység Logikai kapacitás: 2 egység Sebesség (R/W): 2/2 egység Hibatűrés: nincs Fizikai kapacitás: 2 egység Logikai kapacitás: 1 egység Sebesség (R/W): 2/1 egység Hibatűrés : van Számítógép architektúrák 141
RAID példák RAID 4 (paritás lemez) A 1 B 1 C 1 D 1 A 2 B 2 C 2 D 2 A P B P C P D P Lemez 1 Lemez 2 Lemez 3 RAID 5 (forgó paritás) A 1 B 1 C P D 1 A 2 B P C 1 D 2 A P B 2 C 2 D P Lemez 1 Lemez 2 Lemez 3 Fizikai kapacitás: 3 egység Logikai kapacitás: 2 egység Sebesség (R/W): 2/1 egység Hibatűrés: van (lassú) Fizikai kapacitás: 3 egység Logikai kapacitás: 2 egység Sebesség (R/W): 2/1 egység Hibatűrés : van (gyors) Számítógép architektúrák 142
RAID példák RAID 1+0 (tükrözés + összefűzés) A 1 A 3 A 5 A 7 A 1 A 3 A 5 A 7 Lemez 1 Lemez 2 A 2 A 4 A 6 A 8 A 2 A 4 A 6 A 8 Lemez 3 Lemez 4 Fizikai kapacitás: 4 egység Logikai kapacitás: 2 egység Sebesség (R/W): 2/2 egység Hibatűrés : van Számítógép architektúrák 143
Memória hierarchia Regiszter L1 cache L2 cache L3 cache Memória Lemez Harmadlagos tár s ms s ns Elérési idő Számítógép architektúrák 144
Memória hierarchia Regiszter L1 cache L2 cache L3 cache Memória Lemez Harmadlagos tár EB TB GB MB kb B Tároló kapacitás Számítógép architektúrák 145
Intel x86 architektúra Processzor felépítés Regiszterkészlet Memóriakezelés
Kezdetek Az Intel 1976-78 között fejlesztette ki az új Intel 8086 névre hallgató processzorát Később ezt fokozatosan tovább fejlesztették Intel 80186 (1982) Intel 80286 (1982) Intel 80386 (1986) Intel 80486 (1989), a folyamat máig tart Az új processzorok visszafelé kompatibilisek Ma a processzorcsaládra x86 néven hivatkozunk Számítógép architektúrák 147
Memória szegmentáció A memória logikai részekre van osztva Kód szegmens Adat szegmens Verem szegmens A címzést külön regiszterek segítik (CS, DS, SS, ES) Címzés: szegmens kezdőcím + eltolás Memóriakezelés Valós-, védett-, virtuális-, hosszú mód Számítógép architektúrák 148
Valós mód Memória szegmentáció 8086-ban csak ez van 20 bites címbusz (1MB) Szegmens méret 64kB (16 bit) Minden memóriacím elérhető korlátozás nélkül Ilyen módban indul a processzor Lineáris cím = szegmenscím*16 + eltolás Lineáris cím = fizikai cím + Szegmens kezdőcím (16 bit) Eltolási cím (16 bit) Lineáris kezdőcím (20 bit) Számítógép architektúrák 149
Védett mód Memória szegmentáció 80386 vezeti be Korlátozott memóriahozzáférés Címtér 32 bites (4GB) Virtuális memória támogatás Lineáris cím (32) = szegmenscím (32) + offset (16/32) Lineáris cím lapozás fizikai cím Virtuális mód (látszólagos valós mód 80386-tól) Hosszú mód (64 bites, nincs szegmentálás) Számítógép architektúrák 150
x86 regiszterkészlet EAX EBX ECX EDX ESI EDI EBP ESP AX 31 15 AH 7 AL 0 SI DI BP SP CS DS SS EIP EFLAGS IP FLAGS ES FS GS Számítógép architektúrák 151
x86 regiszterkészlet Fő regiszterek (általános célú regiszterek, GPR) EAX Elsődleges munka regiszter (accumulator), szorzás, osztás EBX Munka regiszter, bázis mutató DS-ben ECX Munka regiszter, (ciklus)számláló EDX Munka regiszter, input/output, szorzás, osztás Számítógép architektúrák 152
x86 regiszterkészlet Index regiszterek (általános célú regiszterek, GPR) ESI Sztring műveletek forrás indexe, DS regiszterrel EDI Sztring műveletek cél indexe, ES regiszterrel ESP Verem tetején lévő elemet címzi, SS regiszterrel EBP Lokális változókhoz, paraméterekhez, SS regiszterrel Számítógép architektúrák 153
Szegmens regiszterek CS x86 regiszterkészlet Kód szegmens kezdőcíme, IP ebben címzi az utasítást DS Adat szegmens kezdőcíme (statikus változók) SS Verem szegmens kezdőcíme, ESP és EBP használja ES, FS, GS Extra adat szegmens, EDI alap szegmense az ES Számítógép architektúrák 154
EFLAGS regiszter Állapot bitek Vezérlő bitek Rendszer bitek x86 regiszterkészlet 31 30 29 28 27 26 25 24 0 0 0 0 0 0 0 0 23 22 21 20 19 18 17 16 0 0 ID VIP VIF AC VM RF 15 14 13 12 11 10 9 8 0 NT IOPL OF DF IF TF 7 6 5 4 3 2 1 0 SF ZF 0 AF 0 PF 1 CF Számítógép architektúrák 155
Utasítás számláló x86 regiszterkészlet IP (Instruction pointer) CS regiszter révén a kód szegmensben található utasításokat címzi Minden fetch-execute ciklus során inkrementálódik az adott utasítás hosszával (kivéve vezérlésátadás) Egyéb regiszterek Vannak további működést segítő regiszterek Programozó elől rejtettek Számítógép architektúrák 156
x87 regiszterkészlet Lebegőpontos egység (matematikai társprocesszor) 8 darab 64 (80) bites regiszter (ST(0)-ST(7)) Veremszerű működés Dupla pontosságú lebegőpontos reprezentáció Regiszterenként 2 további bit 00 érvényes, 01 nulla, 10 speciális (Inf, NaN), 11 üres 16 bites állapot regiszter (pl. OE, UE, ZE, TOS, B, DE) 16 bites vezérlő regiszter (pl. RC, PC) 48 bites programszámláló és adat mutató Számítógép architektúrák 157
Input-Output Portra leképezett I/O (PMIO) 16 bites I/O címek (0h-FFFFh) Külön utasítások (in, ins, out, outs, stb.) Egy eszközhöz több port is tartozhat Adat, Utasítás, Állapot I/O porton elérhető fontosabb eszközök: DMA vezérlő, programozható megszakítás kezelő (8259A), időzítő (8254), billentyűzet (8042), valós idejű óra, matematikai társprocesszor, PATA vezérlő, stb. Linux: /proc/ioports Számítógép architektúrák 158
Modern architektúrák Futószalag végrehajtás Párhuzamos végrehajtás Szuperskalár és vektor processzorok
Klasszikus architektúrák In-order (soros) végrehajtás (Neumann) A hagyományos architektúrán alapuló rendszerek teljesítmény növelésének lehetőségei CPU órajel frekvencia növelés Társprocesszor alkalmazás (FPU) Közvetlen memória hozzáférés (DMA) Nagyobb szóméret (nagy címtér, nagy regiszter) Gyorsítótár (cache) használat Gyorsabb buszrendszer Számítógép architektúrák 160
Dinamikus órajel szabályozás Az órajel frekvencia növelés több hő termelését és magasabb fogyasztást jelent (korlátozó tényező) Intel SpeedStep és AMD PowerNow! Ha a mag üresjáratban van az órajele és a mag feszültsége csökken (energiatakarékosság) Intel Turbo Boost és AMD Turbo Core Egy mag kaphat gyorsabb órajelet ha a többi mag nem terhelt (azaz határon belüli a hőtermelés) Számítógép architektúrák 161
Lebegő pontos egység Floating-Point Unit (FPU), matematikai társproc. Pl. Intel x87 Az egész és a lebegőpontos műveletek architekturálisan eltérnek Régen társprocesszor, ma CPU-ba integrált Külön verem struktúrájú regiszter készlet ST(0)-ST(7) Külön utasításkészlet Pl. FADD, FMUL, FDIV, FSQRT, FSIN, Számítógép architektúrák 162
DMA és Cache Közvetlen memória hozzáférés (DMA) Nem minden memóriaműveletet irányít a CPU CPU nélküli közvetlen RAM-RAM vagy RAM-I/O blokkos adatmozgatás Gyorsítótár (cache) Átmeneti tároló a CPU és a RAM között Legutóbb/gyakran használt adatokról másolat tárolás Gyors elérési idő Kis tároló kapacitás Számítógép architektúrák 163
x86-64 architektúra 64 bites általános célú regiszterek (rax, rbx, rcx, rdx, rbp, rsp, rip, rsi, rdi, r8-r15) rax / r8 Visszafelé kompatibilis az x86-tal (IA-32-vel) 64 bites virtuális címek (implementációban 48) 48 bites fizikai címzés (256TB) (bővíthető 52 bitig) Nincs memória szegmentáció Működési módok eax / r8d ax / r8w al / r8b Long mode, Legacy mode (real, protected, virtual) Számítógép architektúrák 164
Párhuzamosság Bit szintű párhuzamosság Az adat bitjein egyszerre hajtunk végre egy műveletet Adat szintű párhuzamosság (DLP) Több adaton azonos időben ugyanaz az utasítás Utasítás szintű párhuzamosság (ILP) Az assembly utasítások egymás mellett futhatnak Taszk (szál) szintű párhuzamosság (TLP) Utasítások csoportjai egyszerre hajtódnak végre Folyamat szintű párhuzamosság Több folyamat fut egyszerre (multiprogamozott OS) Számítógép architektúrák 165
Flynn-féle osztályozás Osztályzás párhuzamosság szempontjából SISD (Single Instruction Single Data) pl. klasszikus korai egyprocesszoros PC-k SIMD (Single Instruction Multiple Data) pl. vektroprocesszorok, GPU MISD (Multiple Instruction Single Data) pl. hibatűrő rendszerek (űrrepülőgép) MIMD (Multiple Instruction Multiple Data) pl. többmagos- és szuperskalár processzorok Számítógép architektúrák 166
Utasítás-szintű párhuzamosság Utasítás-szintű párhuzamosság (ILP) technikái Futószalag-elvű végrehajtás (pipeline) Sorrenden kívüli végrehajtás (OoOE) Regiszter átnevezés Spekulatív végrehajtás Elágazás becslés Szuperskalár végrehajtás Nagyon hosszú utasításszó (VLIW) használat Számítógép architektúrák 167
Egy utasítás végrehajtás Fetch-execute ciklus Minden egyes utasítás végrehajtása több fázisra bontható: Utasítás beolvasás (IF) Utasítás dekódolás (ID) Operandus beolvasás (OF) Végrehajtás (EX) Eredmény visszaírás (WB) Egy utasítás több órajel alatt hajtódik végre Számítógép architektúrák 168
Pipelining Futószalag-elvű utasítás végrehajtás Több utasítás végrehajtása is folyamatban lehet egyszerre, csak legyenek különböző fázisban Egyes processzoroknál akár 30 fázis/utasítás Egy utasítás végrehajtási ideje nem csökken Viszont az egységnyi idő alatt végrehajtott utasítások száma (áteresztőképesség, throughput) növekszik A program gyorsabban lefuthat Számítógép architektúrák 169
Pipelining CPU idő [órajel] 1. utasítás 1 pipeline fázis IF ID OF EX WB 2. utasítás 2 utasítás 1 3. utasítás 3 utasítás 2 utasítás 1 4. utasítás 4 utasítás 3 utasítás 2 utasítás 1 5. utasítás 5 utasítás 4 utasítás 3 utasítás 2 utasítás 1 6. utasítás 6 utasítás 5 utasítás 4 utasítás 3 utasítás 2 7. utasítás 7 utasítás 6 utasítás 5 utasítás 4 utasítás 3 8. utasítás 8 utasítás 7 utasítás 6 utasítás 5 utasítás 4 Elméleti utasítás végrehajtási idő: 5 órajel / utasítás Elméleti áteresztőképesség: 1 utasítás / órajel Számítógép architektúrák 170
Hazárd A Neumann-féle szekvenciális végrehajtási elv feltételezi, hogy minden utasítás végrehajtás befejeződik a következő megkezdése előtt Pipeline processzorokra ez nem igaz Hazárd: az a helyzet amikor ez problémát jelent Típusai Adat hazárd Strukturális hazárd Vezérlési hazárd Számítógép architektúrák 171
Adat hazárd Végrehajtás alatt álló utasítások ugyanazt az adatot használják/módosítják RAW (Read After Write, adat függőség) R3 R1 + R2 R4 R3 + R2 WAR (Write After Read, név függőség) R3 R1 + R2 R2 R1 + R4 WAW (Write After Write, név függőség) R3 R1 + R2 R3 R4 + R1 Számítógép architektúrák 172
Strukturális és vezérlési hazárd Strukturális hazárd Ha a processzor hardvere nem képes az utasításokat egyszerre végrehajtani Pl. az egyik utasítás IF fázisban a másik OF fázisban egyszerre címezné a memóriát Vezérlési hazárd Elágazásnál a processzor nem tudja előre hol kell folytatni a vezérlést, azaz melyik utasítást olvassa be a futószalagra Számítógép architektúrák 173
Adat hazárd kezelése Pipeline buborék Hazárdok kezelése Operandus/eredmény továbbítás (bypassing) Sorrenden kívüli végrehajtás (OoOE) Regiszter átnevezés Strukturális hazárd Pipeline buborék Vezérlési hazárd Pipeline buborék Elágazásbecslés Számítógép architektúrák 174
Pipeline buborék Az IF fázis után ha a vezérlő egység hazárdot észlel beszúr egy NOP utasítást, azaz késlelteti a következő utasítás futószalagra helyezését Közben az utasítás előállítja az eredményt, amit a következő utasítás a késleltetés után már be tud olvasni Buborék ( üresjárat ) a pipline-ban Nő a futásidő (de még mindig gyorsabb, mint pipeline nélkül) Számítógép architektúrák 175
Pipeline buborék CPU idő [órajel] 1. ADD r1,r2,r3 pipeline fázis IF ID OF EX WB 2. SUB r4,r5,r1 ADD r1,r2,r3 3. SUB r4,r5,r1 ADD r1,r2,r3 4. SUB r4,r5,r1 ADD r1,r2,r3 5. SUB r4,r5,r1 (buborék) ADD r1,r2,r3 6. SUB r4,r5,r1 (buborék) (buborék) 7. SUB r4,r5,r1 (buborék) 8. SUB r4,r5,r1 Az adatfüggőség két órajelnyi késlekedést okozott Számítógép architektúrák 176
Eredmény továbbítás Ez egyik utasítás EX fázisának outputját közvetlenül (a visszaírással egy időben) kössük rá a másik utasítás EX fázisának inputjára CPU idő [órajel] 1. ADD r1,r2,r3 pipeline fázis IF ID OF EX WB 2. SUB r4,r5,r1 ADD r1,r2,r3 3. SUB r4,r5,r1 ADD r1,r2,r3 4. SUB r4,r5,r1 ADD r1,r2,r3 5. SUB r4,r5,r1 (buborék) ADD r1,r2,r3 6. SUB r4,r5,r1 (buborék) 7. SUB r4,r5,r1 Számítógép architektúrák 177
Sorrenden kívüli végrehajtás Out-of-Order Execution (OoOE) Az utasítások nem a programban szereplő felírás sorrendjében hajtódnak végre Az az utasítás hajtódik végre először amelyiknek hamarabb állnak elő a bemeneti adatai A processzor próbálja elkerülni az üresjáratot az utasítások átrendezésével Hardveresen gyorsított újrafordítás Viszonylag nagy utasítás ablak Számítógép architektúrák 178
Sorrenden kívüli végrehajtás Utasítás beolvasása a memóriából Az utasítás beáll egy utasítás sorba és vár Az utasítássorból az távozik először, akinek elérhetőek az input operandusai A távozó utasítás végrehajtásra kerül Az eredmény bekerül egy eredmény sorba, vár Az adott utasítás eredménye csak akkor kerül ki a sorból (és íródik be a regiszterfájlba), ha minden idősebb utasítás eredménye már kikerült Számítógép architektúrák 179
Regiszter átnevezés A név függőség (WAR és WAW hazárd) esetén egy utasítás eredménye felülírna egy még szükséges értéket, mivel nincs korlátlan számú üres regiszter A regiszter átnevezés révén ez elkerülhető Az utasításkészlet az architekturális regiszterfájl elemeire hivatkozik Ezt egy speciális áramkör leképezi egy nagyobb méretű hardveres regiszterfájlra Számítógép architektúrák 180
Architekturális regiszterek Regiszter átnevezés r0 r1 r2 r3 r4 r5 r6 r7 r3 átnevező logika hw8 hw1 hw2 hw3 hw4 hw5 hw6 hw7 hw8 hw9 hw10 hw11 hw12 Hardveres regiszterek Eredeti kód: Átnevezés utáni kód: Átrendezés utáni kód: ADD r3, r1, r2 LDR r4, [r3] SUB r3, r5, r6 STR [r7], r3 ADD hw3, hw1, hw2 LDR hw4, [hw3] SUB hw8, hw5, hw6 STR [hw7], hw8 ADD hw3, hw1, hw2 SUB hw8, hw5, hw6 LDR hw4, [hw3] STR [hw7], hw8 RAW hazárd WAR hazárd WAR hazárd mentes Hazárd mentes Számítógép architektúrák 181
Spekulatív végrehajtás Olyan műveletek végrehajtása, amely lehet hogy nem is szükséges Ha később kiderül, hogy a művelet nem volt szükséges, akkor az eredményt eldobjuk Nincs üresjárat pipeline processzor esetén Változatok Mohó végrehajtás (pl. elágazásnál mindkét ág végrehajtása, ha kiderül melyik szükséges azt megtartjuk) Jósló végrehajtás (pl. elágazás becslés, annak az ágnak a végrehajtása, amely esélyesebb) Számítógép architektúrák 182
Elágazásbecslés Feltételes ugró utasításnál melyik a következő utasítás, amit be kell tenni a pipeline-ba? Külön áramkör próbálja megbecsülni melyik ágat kell majd végrehajtani Elkezdődik a jósolt ág végrehajtása Ha kiderül, hogy a jóslat hibás a műveletek eredménye visszavonódik, egyébként időt spóroltunk (nem kellett várakozni) A pipeline hosszával (akár 30 is lehet) nő az igény a jó elágazásbecslésre Számítógép architektúrák 183
Szuperskalár processzorok Órajelenként több utasítás hajtódik végre Egy processzor magban több végrehajtási egység CPU idő [órajel] 1. 2. 3. 4. 5. pipeline fázis IF ID OF EX WB utasítás 1 utasítás 2 utasítás 3 utasítás 1 utasítás 4 utasítás 2 utasítás 5 utasítás 3 utasítás 1 utasítás 6 utasítás 4 utasítás 2 utasítás 7 utasítás 5 utasítás 3 utasítás 1 utasítás 8 utasítás 6 utasítás 4 utasítás 2 utasítás 9 utasítás 7 utasítás 5 utasítás 3 utasítás 1 utasítás 10 utasítás 8 utasítás 6 utasítás 4 utasítás 2 Számítógép architektúrák 184
Szuperskalár processzorok ILP és OoOE Utasítás ablak Előre látható utasítások sora Független utasítások keresésének színtere Nagyobb ablakméret gyorsít Futtatható normál szekvenciális program is A megfelelő fordítás javíthatja viszont a hatékonyságot, növelheti az áteresztőképességet Számítógép architektúrák 185
Vektor processzorok A CPU egy utasítást hajt végre egyszerre adatok egydimenziós tömbjén (SIMD) Nagy méretű regiszterek használata (több önálló adatot is tárol egyszerre) Újabb utasítások bevezetése ezek kezelésére Példák MMX (Intel) 3DNow! (AMD) SSE AVX Számítógép architektúrák 186
Vektor processzorok Skalár processzor logika Ismételd 10-szer! Olvasd be a következő utasítást! Olvasd be ezt és azt a számot! Add össze őket! Mentsd el az eredményt! Ciklusvég Vektor processzor logika Olvasd be az utasítást! Olvasd be ezt a 10 és azt a 10 számot! Add össze őket egyszerre! Mentsd el az eredményeket! Számítógép architektúrák 187
Vektor processzorok MultiMedia extension (MMX) 64 bites regiszter (int: 1x64, 2x32, 4x16, 8x8) 8 darab (MM0-MM7) Alias-ok FPU regiszterekre (konkurenciát okoz) 3DNow! (AMD továbbfejlesztés) float-ot is használ Streaming SIMD Extensions (SSE) 128 bites regiszter (float: 4x32) 8 vagy 16 darab (XMM0-XMM15) 70 új utasítás Számítógép architektúrák 188
SSE2 Vektor processzorok 128 bites regiszter (float: 2x64, 4x32; int: 2x64, 4x32, 8x16, 16x8) SSE3, SSE4 Újabb utasítások (+13, +47) Advanced Vector extensions (AVX) 256 bites regiszter (float) 8 vagy 16 darab (YMM0-YMM15) Számítógép architektúrák 189
Vektor processzorok AVX2 int és float adatokra is Új utasítások AVX-512 512 bites regiszter (int, float) 32 darab (ZMM0-ZMM31) AVX-512 AVX SSE MMX 512 bit 256 bit 128 bit 64 bit ZMM0 YMM0 XMM0 MM0 Számítógép architektúrák 190
Vektor processzorok 2db 32 bites előjeles egész összeadása Túlcsordulás jelzés: státusz regiszter bitek (OF, CF) OF=1 0x77 0x35 0x74 0x00 + 0x3B 0x02 0x33 0x76 = 0xB2 0x37 0xC7 0x76 4*2db 8 bites előjeles egész összeadása Túlcsordulás jelzés: telítési aritmetikai mód 0x77 0x35 0x74 0x00 + 0x3B 0x02 0x33 0x76 = 0x7F 0x37 0x7F 0x76 2 000 000 000 + 989 999 990 = -1 304 967 306 119 53 116 0 + 59 2 51 118 = 127 55 127 118 Számítógép architektúrák 191
Ciklus függőség Read After Write: nem vektorizálható for(i=1; i<n; i++) x[i] = x[i-1] + y[i]; Write After Read: vektorizálható for(i=0; i<n-1; i++) x[i] = x[i+1] + y[i]; Read after Read: vektorizálható for(i=0; i<n; i++) x[i] = y[i%2] + z[i]; Write after Write: nem vektorizálható for(i=0; i<n; i++) x[i%2] = y[i] + z[i]; N = 5; x = {0,1,2,3,4}; y = {5,6,7,8,9}; z = {9,7,5,3,1}; Számítógép architektúrák 192
VLIW processzorok Very Large Instruction Word Egy utasítás (ún. köteg) több kisebb, de egyszerre végrehajtható utasítást tartalmaz Olyan speciálisan fordított programot igényel, amely explicit módon jelzi a párhuzamosan végrehajtható utasításokat Szuperskalár ILP és OoOE Egyszerűbb hardver, bonyolultabb fordító Intel: Explicitly Parallel Instruction Computing Számítógép architektúrák 193
VLIW példa Kiszámítandó: (x-y)*(x+y)/(z*z*8) x értéke r1-ben, y értéke r2-ben, z értéke r3-ban Skalár megoldás (6 utasítás) SUB r4, r1, r2 ADD r5, r1, r2 MUL r6, r4, r5 MUL r7, r3, r3 ASL r8, r7, #3 DIV r9, r6, r8 1. 2. 3. 4. 5. 6. VLIW megoldás (3 utasítás) SUB r4, r1, r2 ADD r5, r1, r2 MUL r7, r3, r3 MUL r6, r4, r5 ASR r8, r7, #3 NOP DIV r9, r6, r8 NOP NOP IDŐ IF ID OF EX WB 1. A 2. B A 3. C B A 4. C B A A A 5. C B B B A 6. C C C B 7. C (x y)(x + y) 8z 2 Számítógép architektúrák 194
VLIW vs Szuperskalár Érvek a VLIW mellett Egyszerű hardver Rövidebb órajel ciklus, gyorsabb működés Nagyobb végrehajtási egység sűrűség a chipen Érvek a VLIW ellen Lassú fordítás speciális fordítóval Nem portolható programok (szoftver inkompatibilitás) Nagyobb program méret a RAMban (NOP-ok miatt) Számítógép architektúrák 195
Ciklus kigöngyölés Segítségével hatékonyabbá tehető a program szuperskalár, vektor és VLIW processzor esetén Könnyebb független utasításokat találni. Kevesebb ciklusszervezési lépés Hagyományos ciklus for(i=0;i<100;i++) a[i]=b[i]+c[i]; Kigöngyölt ciklus for(i=0;i<100;i+=4){ a[i] =b[i] +c[i]; a[i+1]=b[i+1]+c[i+1]; a[i+2]=b[i+2]+c[i+2]; a[i+3]=b[i+3]+c[i+3]; } Számítógép architektúrák 196
Többmagos processzorok Egy integrált áramköri lapon több önálló feldolgozó egység kap helyet N mag esetén jobb teljesítmény és kisebb fogyasztás mint N darab egymagos CPU esetén Általában saját L1 (esetleg L2) cache, de közös L3 Cache koherencia probléma Párhuzamos szál/folyamat futtatás (MIMD) Taszk-szintű párhuzamosság (pl. Java Thread) Az operációs rendszernek támogatnia kell Számítógép architektúrák 197
Hyper-threading Az Intel SMT (Simultaneous MultiThreading) megvalósítása Több szál kezelése magon belül Több állapottároló processzor elem Egy végrehajtó elem Ha egy szálnak várnia kell, addig fusson a másik Elkerülve a pipeline buborékok alkalmazását Minden fizikai mag két logikai magként viselkedik Az operációs rendszer támogatás fontos Számítógép architektúrák 198
Többprocesszoros rendszerek Számítógép rendszer több processzorral Megosztott (shared) vagy szétosztott (distributed) memória Többmagos processzor: speciális megosztott memóriás többprocesszoros rendszer Programozás OpenMP (shared memory model) Open MPI (message passing) OGE / SGE (cluster computing) Számítógép architektúrák 199
csomópont 1 csomópont 2 NUMA architektúra Non-Uniform Memory Access (nem egységes memória hozzáférés) Processzorokhoz saját memória tartozik, de elérheti másik processzor memóriáját is A memóriaelérés ideje függ a memória helyétől Egyszerre több memóriaművelet is végezhető CPU busz RAM összeköttetés CPU busz RAM Számítógép architektúrák 200
gyorsulás (S) Amdahl törvénye N darab processzor (szál) használata nem eredményez N-szeres gyorsulást egy folyamat végrehajtásában S N = T 1 T N = 1 A+ 1 N (1 A) ahol S a gyorsulás, T a futásidő és A a futásidő soros végrehajtású hányada 0 A 1 processzor szám (N) A=0,1 A=0,2 A=0,5 Számítógép architektúrák 201
Virtualizáció Egy hardveren egyszerre több működő operációs rendszer Egy gazda gép (host) Több vendég (guest) Típusai Hosztolt virtualizáció Natív virtualizáció Hypervisor (VMM) Hyper-V, Vmware, VirtualBox Hardveres támogatás (VT-x, AMD-V) OS OS OS Hypervisor OS Hardver Hosztolt virtualizáció OS OS OS Hypervisor Hardver Natív virtualizáció Számítógép architektúrák 202
Grafikus feldolgozó egység Graphics Processing Unit (GPU) Feladat: textúrák kezelés, képek renderelés, 3D grafika gyorsítás, videó kódolás, Integrált vagy külön videokártya Gyártók: nvidia és ATI (AMD) Egyszerű, kis utasításkészlet Nagy számítási kapacitás (párhuzamos, SIMD) Saját memóriája lehet Csatlakozás: AGP, PCIe VGA, DVI, HDMI Számítógép architektúrák 203
Általános célú GPU General-Purpose GPU (GPGPU) A GPU átvesz számításokat a CPU-tól Programozás OpenCL CUDA MATLAB Accelerated Processing Unit (APU) CPU és GPU elemekből felépülő processzor Számítógép architektúrák 204
FPGA Field-Programmable Gate Array Programozható logikai áramkör Újrakonfigurálható rendszer Speciális nyelvek: VHDL, Verilog Természeténél fogva párhuzamos működés Létezik processzorba integrált FPGA Szoft-processzor FPGA-n implementált processzor architektúra Számítógép architektúrák 205
Intel X86 történelem & további architektúrák Az Intel processzorok fejlődése Más architektúrák HPC
Intel X86 Főbb architektúra családok 8086, 80386, Pentium, Pentium 4, Core i7, Core i9 Motorola 68000 MIPS Transmeta PowerPC ARM Microchip PIC AVR CPU MCU Számítógép architektúrák 207
Megjelenési év 1978 16 bites regiszterek Intel 8086 20 bites fizikai cím (1MB) 5-10 MHz órajel 3000nm technológia 29 000 tranzisztor 40 tűs DIP tokozás DMA támogatás mov ax, [di] ;from the address in di to ax Számítógép architektúrák 208
Intel 80386 Megjelenési év 1986 32 bites regiszterek 4GB-os címtér 12-40 MHz órajel 1500-1000nm technológia 275 000 855 000 tranzisztor 132 tűs PGA tokozás Cache, virtuális memória kezelés, pipeline Számítógép architektúrák 209
Intel Pentium Megjelenési év 1993 32 bites regiszterek 4GB-os címtér 60-300 MHz órajel 800-250nm technológia 3 100 000 4 500 000 tranzisztor 273 tűs Socket 4; 321 tűs Socket 7 aljzat Szuperskalár, MMX, L2 cache, integrált FPU Számítógép architektúrák 210
Megjelenési év 2000 32 bites regiszterek Intel Pentium 4 Mikroarchitektúra: NetBurst 1300-3800 MHz órajel 180-65nm technológia 42 188 millió tranzisztor Socket 423 vagy Socket 478 aljzat SSE3, 20-31 szintű futószalag, elágazásbecslés, HyperThread Számítógép architektúrák 211
Megjelenési év 2008 Intel Core i7 64 bites regiszterek (x86-64) Mikroarchitektúra: Nehalem, Sandy Bridge, Ivy Bridge, Haswell, Broadwell, 45-14nm technológia (780-1400 millió tranzisztor) 2-6 mag LGA aljzat (1000-2000 kontaktus) L3 cache, integrált GPU, AVX-512, integrált NorthBridge Számítógép architektúrák 212
Megjelenési év 2017 Intel Core i9 64 bites regiszterek (x86-64) Mikroarchitektúra: Skylake 14nm technológia 10-18 mag FCLGA aljzat (2066 kontaktus) 13-24MB L3 cache, Virtual Machine extensions, Turbo Boost Max 3.0 (4,5GHz), AVX-512, HT, DMI 3.0, DDR4 Számítógép architektúrák 213
Moore törvény A processzorok tranzisztorszáma körülbelül két évente megduplázódik Közel vagyunk a határhoz (kb. 2025) az atomi méretek miatt 1,E+10 1,E+09 1,E+08 1,E+07 1,E+06 Moore törvénye i486 Pentium 4 Pentium III Pentium Core 2 Duo Core i9 Core i7 Haswell 1,E+05 i286 i386 8086 i186 1,E+04 1975 1985 1995 2005 2015 2025 Számítógép architektúrák 214
Intel Xeon Phi Szuperszámítógépekbe, szerverekbe GPU alapú MIC (Many Integrated Core) architektúra 57-72 mag (1.0-1.7GHz) 28,5-36MB L2 cache ISA: x86-64 4-utas hyperthreading AVX-512 1000-3000 GFLOPS (Core i7: 30-100 GFLOPS) Társprocesszor Számítógép architektúrák 215
Motorola 68000 Régi (1979), de élő CISC 16/32 bites Memory-mapped I/O 14 címzési mód, 5 adattípus, 56 utasítás 7 szintű megszakítási rendszer Alkalmazás: Apple Macintosh, Sega Mega Drive, Comodore Amiga, SG és Sun munkaállomás, PLC MOVE.W (A1), D1 ;move 2 bytes from the address stored in A1 to D1 Számítógép architektúrák 216
MIPS RISC 32/64 bites 5 fokozatú pipeline végrehajtás OoOE, SIMD, szuperskalár több szintű cache Alkalmazás: PlayStation 2 és Nintendo 64 játékkonzolok, CISCO routerek, lw $t1, ($t0) #move 2 bytes from the address stored in t0 to t1 Számítógép architektúrák 217
Transmeta Crusoe Alacsony fogyasztás Szoftveres ISA X86 kompatibilitás Akár Java bájtkód futtatás VLIW (128bit) Megjelenés: 2000 Többszintű cache Utód: Efficeon Alkalmazás: tablet-ek, laptop-ok Számítógép architektúrák 218
PowerPC Fejlesztő: Apple+IBM+Motorola RISC 32/64 bites Szuperskalár Futásidőben állítható little-endian/big-endian bájtsorrend Alkalmazás: Xbox 360, Nintendo Wii li 3, 0(5) ;move data from the address stored in register 5 to register 3 Számítógép architektúrák 219
ARM RISC 32/64 bites Akár 13 fokozatú pipeline, SIMD, szuperskalár Prioritásos megszakításkezelés Egységes 32 bites utasítások Feltételes utasítás-végrehajtás (nincs elágazásbecslés) Alkalmazás: Raspberry Pi, iphone 6 és egyéb okostelefonok, (2013-ban 10 milliárd új CPU) LDR R8, [R0] ;move data from the address stored in R0 to R8 Számítógép architektúrák 220
Microchip PIC Mikrokontroller (Módosított) Harvard architektúra RISC 8/12/14/16 bites 1 általános munkaregiszter (W) Nincs különbség adatmemória és regiszter között Pl.: a PC és egyéb regiszterek memóriára vetítve MOVLW d 29 ;move decimal 29 into W Számítógép architektúrák 221
Atmel AVR Mikrokontroller (Módosított) Harvard architektúra RISC 8/32 bites 32 általános 8 bites munkaregiszter (R0-R31) Saját beépített memória (SRAM, Flash) Címtér: regiszterfájl + memória Alkalmazás: Arduino ldi r16, 0xF1 ;load hexadecimal 0xF1 to r16 Számítógép architektúrák 222
High-Performance Computing HPC - Top 1 Magyarországon (2015) Leo (Szilárd Leo után) Debrecen, DE Kassai úti campus 197,2 TFLOPS számítási kapacitás 462 Intel Xeon E5-2650 (2.6GHz) 3696 mag 10500 GB memória Kb 8000 TB háttértár 2 000 000 000 HUF Top500: 308. helyezés Számítógép architektúrák 223
High-Performance Computing HPC - TOP 1 (2015) (2018 Q4: TOP 4) Tienhe-2 (Tejút 2) Kína, Guangzhou 33,86 PFLOPS számítási kapacitás 32 000 Intel Xeon (2.2GHz) + 48 000 Xeon Phi 3 120 000 mag 1 375 000 GB memória 12 400 000 TB háttértár 390 000 000 USD 17,6 MW fogyasztás (+6,4MW a hűtőrendszer) Számítógép architektúrák 224
A programozás és az operációs rendszer Rendszerhívás Folyamatok Szignál Ütemezés Virtuális memória
Duál-módú működés Kernel mód Magas CPU jogosultság A processzor minden utasítást végre tud hajtani Minden memóriarekesz megcímezhető User mód Alacsony CPU jogosultság Processzor korlátozott utasításkészletet használ Nem minden memóriarekesz hozzáférhető Számítógép architektúrák 226
Rendszerhívás Interfész a felhasználói program és az operációs rendszer kernel között A program egy szolgáltatást igényelhet az operációs rendszer kerneltől Tipikus megvalósítás szoftver interrupt-tal Kernel módú működés Például Folyamatok kezelése Fájlok kezelése Eszközök kezelése Számítógép architektúrák 227
Rendszerhívás Példa: Egy USB meghajtón lévő file írása Saját C program fprintf() standard könyvtári függvény write rendszerhívás USB driver USB drive Felhasználói program Könyvtári függvény Szoftver Rendszerhívás Kernel Eszköz meghajtó Hardver eszköz Hardver Számítógép architektúrák 228
Process, processzus Folyamat Végrehajtás alatt álló program Erőforrásokkal rendelkezik CPU-idő, memória, állományok, I/O eszközök A folyamatokhoz kapcsolódó információkat a folyamatvezérlő blokk (PCB) tartalmazza Kommunikálhatnak egymással Inter-process communication (IPC) Számítógép architektúrák 229
Folyamat Multi-programozott környezetben egynél több folyamat is lehet egyszerre Egyedi azonosítóval rendelkezik (PID) Minden folyamatnak egy szülő- és több gyermek folyamata lehet Egy vagy több szálból állhat a folyamat Különböző állapotokban lehetnek Az állapotok között különböző állapotátmenetek Számítógép architektúrák 230
Folyamat ütemezés Multi-programozott környezet (több folyamat) Ütemező: választ a futásra kész folyamatok közül, ki kapja meg a CPU-t Algoritmusok: FCFS, RR, SJF, EDF Preemptív ütemezés Pl. hardveres időzítő lejár és megszakítást kér Aktuális folyamat megszakad, majd aktiválódik az ütemező kódja Választ egy folyamatot, beállítja az időzítőt és átadja a vezérlést a választott folyamatnak (PCB-t módosít). Számítógép architektúrák 231
Folyamat állapotátmenetek Új Befejezett befogadás Futásra kész Futásra kész felfüggesztett ütemezés időtúlfutás Futó esemény bekövetkezés leállás eseményre várás Várakozó kilapozás belapozás kilapozás belapozás Várakozó felfüggesztett operatív memória lapozó file Számítógép architektúrák 232
Folyamatok közötti kommunikáció Néha a folyamatoknak szükségük van információcserére egymás között Fájl: több folyamat által közösen használt fájl Pipe: pl. input/output átirányítás Szignál: értesítés eseményről bekövetkeztéről Szemafor: osztott erőforrás szinkronizációjához Shared memory: közösen használt RAM terület Socket: hálózati protokollokon keresztül Számítógép architektúrák 233
Szignál Egy folyamatnak küldött jelzés Esemény bekövetkeztét jelzi, aszinkron módon Üzenet/adat csere nincs Ha egy folyamat kap egy szignált a normál működés megszakad végrehajtódik a definiált szignálkezelő kód, majd a folyamat folytatódik Gyakori szignálok: SIGINT (2), SIGKILL (9), SIGALRM (14), SIGTERM (15), SIGCHLD (18), SIGSTOP (23), SIGCONT (25) Számítógép architektúrák 234
Virtuális memória A fizikai memória korlátainak transzparens átlépését teszi lehetővé a háttértár segítségével Fizikai memória keretekre osztva Logikai memória lapokra osztva (fix méret: 4kB) Külön virtuális- és fizikai címzés Virtuális cím leképezése fizikai címre: laptábla A nem használt lapok kilapozhatóak a HDD-re A Memory Management Unit (MMU) irányít Számítógép architektúrák 235
Virtuális memória Hivatkozás RAM-ban nem lévő lapra (lap hiba) Lapcsere szükséges Lapcserélési stratégia fontos (FIFO, LRU, ) HDD elérés ideje kb. 100 000-szerese a RAM elérési időnek Gyakori lapozás lassítja a programot Megvalósítás Linux: swap partíció Windows: C:\pagefile.sys fájl Számítógép architektúrák 236
Virtuális memória kezelése 1. CPU logikai memória igény (lap# + offset). 2. Laptábla ellenőrzés: ha a lap a RAM-ban folytasd a 9. lépésnél, különben 3. lépésnél! 3. Válassz a RAM-ban egy keretet a beolvasáshoz! 4. Szükség esetén indítsd el a keretben lévő lap kiírását a HDD-re, majd indítsd el a szükséges lap beolvasását a keretbe! 5. Közben a folyamat várakozó állapotba kerül, az ütemező indítson egy futásra kész folyamatot! Számítógép architektúrák 237
Virtuális memória kezelése 6. A háttérben a DMA vezérlő (kiírja) beolvassa a RAM-ba a HDD-ről a lapot és ha kész küld egy I/O kész megszakítást. 7. A folyamat futásra kész állapotba kerül. 8. Amint az ütemező újra futóvá teszi a folyamatot ismételd meg a memória igényt! 9. A laptábla alapján fizikai cím (keret# + offset) előáll. A RAM válaszol a keresett adattal. Számítógép architektúrák 238
Virtuális memória kezelése Logikai cím 2 157 Fizikai cím?? Adat? lap# offset keret# offset virtuális címtér (folyamat A) 0 A0 1 A1 2 A2 3 A3 4 A4 5 A5 6 A6 laptábla (folyamat A) 0 1 4 1 1 2 2 0-3 0-4 1 1 5 0-6 1 5 7 0-8 0-9 0 - fizikai címtér (RAM) 0 B1 1 A4 2 A1 3 B9 4 A0 5 A6 szabaddá tehető 7 A7 háttértár 8 A8 67 9 A9 Számítógép architektúrák 239
Virtuális memória kezelése Logikai cím 2 157 Fizikai cím?? Adat? lap# offset keret# offset virtuális címtér (folyamat A) 0 A0 1 A1 2 A2 3 A3 4 A4 5 A5 6 A6 laptábla (folyamat A) 0 0-1 1 2 2 0-3 0-4 1 1 5 0-6 1 5 7 0-8 0-9 0 - fizikai címtér (RAM) 0 B1 1 A4 2 A1 3 B9 4 5 A6 szabaddá tehető 7 A7 háttértár 8 A8 67 9 A9 Számítógép architektúrák 240
Virtuális memória kezelése Logikai cím 2 157 Fizikai cím 4 157 Adat 67 lap# offset keret# offset virtuális címtér (folyamat A) 0 A0 1 A1 2 A2 3 A3 4 A4 5 A5 6 A6 7 A7 8 A8 9 A9 67 laptábla (folyamat A) 0 0-1 1 2 2 1 4 3 0-4 1 1 5 0-6 1 5 7 0-8 0-9 0 - fizikai címtér (RAM) 0 B1 1 A4 2 A1 3 B9 4 A2 5 A6 háttértár 67 Számítógép architektúrák 241
Előnyök a programozó számára Nagyobb méretű adatokkal dolgozhatunk, mint amennyi fizikai memória rendelkezésre áll. Minden program/folyamat saját virtuális címtérrel rendelkezik. Nem férhetnek hozzá másokéhoz. Programíráskor nem kell tudnunk mely memóriaterületek foglaltak már (más programok által). Támogatja a multiprogramozott rendszereket. Számítógép architektúrák 242
Digitális elektronikai alapok Félvezető Dióda, tranzisztor Logikai kapu Flip-flop Multiplexer, címdekódoló Összeadó áramkör
Fizika Anyag atom elektron - & proton + & neutron 0 Coulomb erő (elemi kölcsönhatás) F = 1 Q 1 Q 2 r 4πε 0 r 2 r Feszültség: a töltésekre ható erőből származik Elektromos áram: töltött részecskék áramlása Ellenállás: a töltésmozgás akadályozása Vezetők, szigetelők Számítógép architektúrák 244
elektron energia elektron energia elektron energia elektron energia Félvezetők Rossz vezető, rossz szigetelő Ok: szilárdtestek sávszerkezete 4 vegyérték elektron (Si, Ge) Kvantumfizika Bohr-féle atommodell atomban szilárdtestben vezetési sáv tiltott sáv vegyérték sáv vezető félvezető szigetelő Számítógép architektúrák 245
elektron energia Szennyezett félvezető n-szennyező (elektron) 5 vegyérték elektron (As, Sb) p-szennyező ( lyuk ) 3 vegyérték elektron (Ga, In) Új energiaszint a tiltott sávban Si Si Si Si As Si Si Si Si - + - + - + Si Si Si Si Ga Si Si Si Si + - + - + - n-típus p-típus Számítógép architektúrák 246
p-n átmenet Félvezető egykristály eltérően szennyezett részei között található Szabad töltéshordozók átáramlanak a másik rétegbe, rekombinálódhatnak. n - - - + + + + + - + + - + + - + - - - - + - - + - + - + - - - + + + + + - + + - + + - + - - + - - + - - + - - + + - + - + - + - p kiürített réteg töltéssűrűség + - elektrosztatikus potenciál potenciálgát Számítógép architektúrák 247
Dióda Záró irányú előfeszítés + - - - - + + + + + - + + - + + + - - - - + + - - - + - + - + - + - - - - + + + + - + - + + - + + + - - - + + + + - - - + - - + - - - - - + + + Nyitó irányú előfeszítés - + - - - - - + + + + + + - + + - + + - + - - - - + - - + - - + + + - + - - - - - + + + + + + - + + - + + - + - - + - - + - - + - - + + - + + - + - + - + - Dióda: egyenirányításra képes Jele: Speciális dióda: LED Számítógép architektúrák 248
Tranzisztor 2 darab p-n átmenet ( összefordított diódák ) Kapcsoló, erősítő p n n p Bipoláris tranzisztor E B C Unipoláris tranzisztor D G S p n p p n p C S B E G n-csatornás JFET D Számítógép architektúrák 249
A logikai NAND kapu 2 bemenetű logikai kapu ( nem és ) Jele: Felépítése, működése: V cc A B TTL NAND kapu GND Q A B Q 0 0 1 0 1 1 1 0 1 1 1 0 Számítógép architektúrák 250
További logikai kapuk Felépíthetőek NAND kapukból NOT AND OR XOR A Q A B Q A B Q A B Q 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 1 0 1 1 1 0 0 1 0 1 1 0 1 1 1 1 1 1 1 1 1 0 Számítógép architektúrák 251
Flip-flopok Szekvenciális digitális elektronikai áramkör 1 bit információ tárolására képes Alkalmazás: regiszter, számláló, frekvenciaosztó D CLK Q _ Q CLK adat kimenet D flip-flop CLK=1 tárol D CLK=0 tart előző adat bemenet 4 bites regiszter Számítógép architektúrák 252
Komparátor Kombinációs hálózat (állapotmentes) A bemeneteire adott értékpárokat hasonlítja össze Ha a két bemeneti bitsorozat megegyezik, akkor 1 érték jelenik meg a kimeneten, különben 0 érték. 4 bites komparátor Számítógép architektúrák 253
Kombinációs hálózat Multiplexer N jelből 1-et kiválaszt a vezérlőjelek alapján K darab vezérlőjel 2 K darab bemenő jelet tud azonosítani S 0 S 1 Z 0 0 A 0 1 B 1 0 C 1 1 D D C B A MUX S 0 S 1 4:1 multiplexer Számítógép architektúrák 254 Z
Kombinációs hálózat Címdekódoló A címbemenetre adott jel alapján kiválasztja a kimenő jelek egyikét N bites címbemenetre adott érték a 2 N darab kimeneti vonal közül 1-et aktivál A 0 A 1 D 0 D 1 D 2 D 3 0 0 0 0 0 1 0 1 0 0 1 0 1 0 0 1 0 0 1 1 1 0 0 0 A 0 A 1 D 0 D 1 D 2 D 3 2 bites címdekódoló Számítógép architektúrák 255
cím Dekóder szó vonal Memória Közvetlen hozzáférésű memória SRAM vagy DRAM különbség a cellában Bitcella: 1 bitet tárol A cím választja ki melyik cella értéke kerüljön a kimenetre Bit cella Bit cella Bit cella Bit cella Bit cella Bit cella Bit cella Bit cella bit vonal Bit cella Bit cella Bit cella Bit cella Multiplexer adat Bit cella Bit cella Bit cella Bit cella Számítógép architektúrák 256
szó vonal szó vonal Bit cella SRAM DRAM bit vonal bit vonal bit vonal kondenzátor tranzisztor NOT kapu tranzisztor 4-6 tranzisztor Gyors kimenet Tartós tárolás Egyszerű szerkezet Lassú kimenet Szivárgás frissítés Számítógép architektúrák 257
Összeadó áramkör Félösszeadó: 2 bit összeadására képes A B A B C S 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 Teljes összeadó: 3 bit összeadására képes (2 db félösszeadó) A B C i C o S 0 0 0 0 0 0 1 0 0 1 1 0 0 0 1 1 1 0 1 0 0 0 1 0 1 0 1 1 1 0 1 0 1 1 0 1 1 1 1 1 C out Számítógép architektúrák 258 C S A B S C in
Ripple-carry összeadó Több bites adatok összeadására képes Láncba fűzött teljes összeadók A 3 B 3 A 2 B 2 A 1 B 1 A 0 B 0 + + + + C 0 S 3 S 2 S 3 S 2 A 3 A 2 A 1 A 0 B 3 B 2 B 1 B 0 teljes összeadó c + + + + S 3 S 2 S 1 S 0 primitív 4 bites ALU kezdemény Számítógép architektúrák 259
Primitív ALU vázlat Reg: IN_A Reg: IN_B ÉS-elő VAGY-oló Komparátor Összeadó Reg: IR Multiplexer Reg: SR Reg: OUT Számítógép architektúrák 260
Assembly programozás Assembly nyelv Utasítás készlet Címzési módok Fordítás-szerkesztés-betöltés Gépi kód
Assembly programozás Alacsony absztrakciós szint Programozói szabadság Feladatra optimalizálható kód Nagyobb program teljesítmény Hardverismeret szükség Nehezebben átlátható kód PC, mikrokontroller Magasszintű programnyelvek Assembly programozás Gépi kód Számítógép architektúrák 262
Utasítás szerkezet 4 címes utasítás Műveleti kód 3 címes utasítás Műveleti kód 1. Operandus cím 1. Operandus cím 2. Operandus cím 2. Operandus cím Eredmény cím Eredmény cím Következő utasítás cím 2 címes utasítás Műveleti kód 1. Operandus + eredmény cím 2. Operandus cím 1 címes utasítás Műveleti kód 2. Operandus cím Számítógép architektúrák 263
Program és utasítás felépítés Forrás fájl utasítás_1 utasítás_2 utasítás_3 utasítás_4 utasítás_5 Címke Művelet Operandus(ok) Megjegyzés.L1: mov ax, 0 # zero into ax Címke Azonosító, általában kettősponttal zárul Művelet Operandus(ok) Megjegyzés Az elvégzendő művelet mnemonic-ja Adat(ok) vagy adat(ok)ra hivatkozás(ok) Sor végéig a fordító figyelmen kívül hagyja Számítógép architektúrák 264
Utasításkészlet architektúra ISA (Instruction Set Architecture) A számítógép programozáshoz kötődő részletei Bitszélesség (buszok és regiszterek) Regiszter készlet Gépi utasítások Címzési módok Memória architektúra Megszakítás kezelés Számítógép architektúrák 265
Utasítás típusok Adatmozgató utasítások (Egész) aritmetikai utasítások Bitenkénti logikai utasítások Bitléptető utasítások Vezérlésátadó utasítások Sztringkezelő utasítások BCD és valós aritmetikai utasítások Fordítási direktívák Egyéb utasítások Számítógép architektúrák 266
Utasítás típusok Adatmozgató utasítások Regiszter-regiszter (mov, xchg) Regiszter-memória (mov) Regiszter-I/O port (in, out) Regiszter-verem (push, pop) Kiterjesztés (bitszélesség fontos) (cbw, cwd) Státusz bit állítás (sti, cli) Számítógép architektúrák 267
Utasítás típusok Aritmetikai utasítások Összeadás (átvitel nélkül/átvitellel) (add, adc) Kivonás (átvitel nélkül/átvitellel) (sub, sbb) Inkrementálás, dekrementálás (inc, dec) Kettes komplemens (neg) Előjeles/előjel nélküli szorzás (imul, mul) Előjeles/előjel nélküli osztás (idiv, div) Összehasonlítás (cmp) Számítógép architektúrák 268
Utasítás típusok Bitenkénti logikai utasítások ÉS művelet (and) VAGY művelet (or) KIZÁRÓ VAGY művelet (xor) Egyes komplemens (not) Bit tesztelés (test) Számítógép architektúrák 269
Utasítás típusok Bitléptető utasítások Logikai/előjel nélküli balra léptetés (shl) Logikai/előjel nélküli jobbra léptetés (shr) Aritmetikai/előjeles balra léptetés (sal=shl) Aritmetikai/előjeles jobbra léptetés (sar) Jobbra/balra forgatás (ror, rol) Jobbra/balra forgatás carry-n keresztül (rcr, rcl) Számítógép architektúrák 270
Vezérlésátadó utasítások Utasítás típusok Feltétel nélküli ugrás (jmp) Feltételes ugrás (ja, jae, jb, jbe, je, jne, jc, jo, ) Ciklusszervező (loop, loopz, loopnz, ) Hívó utasítás (call) Szubrutinból visszatérés (ret) Szoftveres megszakítás kérés (int) Példa:.L1: Megszakítás-kezelőből visszatérés (iret) sub eax, 1 jnz.l1 mov eax, 9 mov ebx, eax Számítógép architektúrák 271
Utasítás típusok Stringkezelő (bájtsorozat kezelő) utasítások Sztring mozgató (movs, movsb, movsw) Sztring összehasonlító (cmps) Keresés sztringben (scas) Egyéb utasítások Koprocesszor vezérlő (wait, esc) Rendszervezérlő (hlt) Üres utasítás (nop) Számítógép architektúrák 272
Utasítás típusok Fordítási direktívák: gépi kód nincs mögöttük, a fordítás menetét befolyásolják Forrásfájl lezárása (end) Szegmens definiálás (segment, ends) Egyszerűsített szegmensdefiníció (stack,.data) Helyfoglalás (db, dw, dd) Helyettesítő szimbólum létrehozás (equ) Számítógép architektúrák 273
Címzési módok Adat vagy utasítás hogyan érhető el. Rejtett (implicit, implied) Közvetlen adat megadás (immediate) Közvetlen cím (direct, absolute) Regiszteres cím (register direct) Közvetett cím (indirekt) Regiszter indirekt Indexelt cím Bázis relatív cím Számítógép architektúrák 274
Címzési módok Rejtett címzés Nincs igazi cím megadás Pl. ha nincs operandus 500 501 502 503 Op.kód1 Op.kód2 Számítógép architektúrák 275
Címzési módok Közvetlen adat megadás Műveleti kód után közvetlenül található adat Ez lesz az operandus Konstans 500 501 502 503 Op.kód Adat Számítógép architektúrák 276
Címzési módok Regiszteres címzés A műveleti kód hivatkozik egy regiszterre A regiszterben található az operandus értéke 500 501 502 503 Op.kód regiszter Adat Számítógép architektúrák 277
Címzési módok Közvetlen cím Műveleti kód után található egy memóriacím Itt helyezkedik el az operandus 500 730 501 Op.kód 731 Adat 502 731 732 503 733 Számítógép architektúrák 278
Címzési módok Közvetett cím A műveleti kód után található egy cím Ezen a címen található az operandus igazi címe 500 730 943 501 Op.kód 731 945 944 502 731 732 945 Adat 503 733 946 Számítógép architektúrák 279
Regiszter indirekt Címzési módok A műveleti kód hivatkozik egy regiszterre A regiszterben található címen helyezkedik el az operandus regiszter 500 731 730 501 Op.kód 731 Adat 502 732 503 733 Számítógép architektúrák 280
Indexelt Címzési módok A műveleti kód után található egy cím, ehhez hozzáadva az index regiszterben található értéket megkapjuk az operandus memóriacímét index reg. 500 31 730 501 Op.kód 731 Adat 502 700 732 503 733 Számítógép architektúrák 281
Bázis relatív Címzési módok A műveleti kód után található egy eltolási érték, ehhez hozzáadva a bázis regiszterben található kezdőcímet megkapjuk az operandus címét bázis reg. 500 720 730 501 Op.kód 731 Adat 502 11 732 503 733 Számítógép architektúrák 282
Assembly szintaxis Intel szintaxis.intel_syntax noprefix.globl main main: push ebp mov ebp, esp sub esp, 16 mov DWORD PTR [ebp-16], 2 mov DWORD PTR [ebp-12], 3 cmp DWORD PTR [ebp-16], 4 jne.l2 mov eax, DWORD PTR [ebp-12] mov DWORD PTR [ebp-8], eax jmp.l3.l2: mov DWORD PTR [ebp-8], 4.L3: mov eax, DWORD PTR [ebp-8] add esp, 16 pop ebp ret AT&T szintaxis.att_syntax noprefix.globl main main: pushl %ebp movl %esp, %ebp subl $16, %esp movl $2, -16(%ebp) movl $3, -12(%ebp) cmpl $4, -16(%ebp) jne.l2 movl -12(%ebp), %eax movl %eax, -8(%ebp) jmp.l3.l2: movl $4, -8(%ebp).L3: movl -8(%ebp), %eax addl $16, %esp popl %ebp ret Számítógép architektúrák 283
Utasítások 8086: 114 utasítás 80186: +15 (új és bővített) 80286: +17 80386: +66 80486: +6 8087: +83 80287: +1 80387: +12 +Pentium, +MMX, +SSE, +AVX, +egyéb ( ) Számítógép architektúrák 284
Operandusok Operandusok Regiszter (8, 16, 32 bites) Konstans (8, 16, 32 bites) Memória tartalom Memória cím és méret kényszerítés mov al, BYTE PTR [ebx] mov ax, WORD PTR [ebx] mov eax, DWORD PTR [ebx] Számítógép architektúrák 285
Címzési módok Regiszteres Közvetlen adat Közvetlen cím Közvetett regiszteres Regiszter relatív Bázisos indexelt Bázis+index relatív Skálázott Szegmens előtag mov ax, bx mov ax, 7Fh mov ax, [1234] mov ax, [bx] mov ax, [bx + 100h] mov ax, [bx + si] mov ax, [bp + di + 123] mov ax, [si * 4 +10h] mov ax, [es:bx] Számítógép architektúrák 286
Címzési módok Effektív cím (EA) megadás alakjainak összegzése CS: SS: DS: ES: FS: GS: egyiksem Szegmens szelektor EAX EBX ECX EDX ESI EDI EBP ESP egyiksem EAX EBX ECX EDX + ESI EDI EBP egyiksem 1 2 4 8 egyiksem Bázis Index Skálázó faktor Példa: mov EAX, [DS:EBP+EDI*4+10h] vagy ugyanaz más írásmódban: mov EAX, DS:10h[EBP][EDI*4] + eltolás semmi Eltolás Számítógép architektúrák 287
Alprogram hívási konvenció Hívó szabályai Paraméterek fordított sorrendben a rendszerverembe helyezése Néha adott sorrendben regiszterekbe: edi, esi, edx, Lebegő pontos paraméterek a SSE regiszterekbe (eax-be a float paraméterek száma) Alprogram hívás (visszatérési cím a verembe kerül, programszámláló átáll az alprogram kezdőcímére) Visszatérés után veremből paraméterek kivétele Visszatérési érték az eax regiszterben van Számítógép architektúrák 288
Alprogram hívási konvenció Hívott szabályai Bázis pointer verembe mentés Verem mutató mentése bázis pointerbe Helyfoglalás lokális változóknak a veremben Használandó regiszterek mentése a verembe Visszatérési érték az eax regiszterbe tétele Mentett regiszterek és verem visszaállítás Visszatérés (a veremben lévő címre) Számítógép architektúrák 289
Gépi kód Az egyetlen nyelv, amit a processzor megért Bináris formátum Processzoronként változó lehet Példa: assembly: gépi kód: SUB EAX, EBX # eax = eax-ebx 0x29 0xD8 0 0 1 0 1 0 0 1 1 1 0 1 1 0 0 0 OpKód d s MOD REG R/M SUB művelet REG mező a forrás 32 bites regiszter Regiszteres címzés Forrás: EBX Cél: EAX Számítógép architektúrák 290
Gépi kód példa C nyelvű kód y=5; z=6; x=z+y*7; Assembly kód mov DWORD PTR [ebp-12], 5 mov DWORD PTR [ebp-8], 6 mov ebx, DWORD PTR [ebp-12] mov eax, ebx sal eax, 3 sub eax, ebx add eax, DWORD PTR [ebp-8] mov DWORD PTR [ebp-16], eax Gépi kód c7 45 f4 05 00 00 00 c7 45 f8 06 00 00 00 8b 5d f4 89 d8 c1 e0 03 29 d8 03 45 f8 89 45 f0 Számítógép architektúrák 291
Magasszintű programozás leképezése assembly-re 1. Programozás alapjai Kifejezéskiértékelés Elágaztatás Ciklusszervezés
Gondolatébresztő kérdések Melyik értékadás fut le rövidebb idő alatt? int a, b=2, c=3, d=4, e=1, f=2; a=(b+c)*(d-e)%f; a=(2+3)*(4-1)%2; a=5; Mi az alábbi kifejezés értéke? (!3+8==2*4)+-1 Mi az alábbi kifejezés típusa C nyelven? 5/(short)2==.5+ 2 Számítógép architektúrák 293
Gondolatébresztő kérdések Ki/mikor/hogyan végzi a kifejezés kiértékelést? Van címe a konstansnak? Van-e különbség a #define és a const között? Kétirányú elágaztatásnak minősül-e az if (a==0) b=0; utasítás? Hányszor fut le az alábbi ciklus magja? for(a<1,b=1;c++;d=1) e=1; Számítógép architektúrák 294
Mi az outputja a programnak? Számítógép architektúrák 295
Editor Programozás Szövegszerkesztőben forráskód létrehozása Forrás kód: háttértárolón tárolt szöveges file Esetleg nyelv érzékeny eszközrendszer Fordító (compiler, assembler) Előfeldolgozás, lexikai/szintaktikai/szemantikai elemzés, optimalizálás, kódgenerálás Eredmény: tárgykód (ojbect file) Nem interpreter! Számítógép architektúrák 296
Programozás Kapcsolatszerkesztő (linker) A tárgykódban nem igazi címek, csak hivatkozások vannak (több fájl, könyvtári függv.) Linker feloldja a hivatkozásokat: futtatható fájl Betöltő (loader) Az op. rendszer része: létrehozza a folyamatot RAM-ba tölti a gépi kódot Inicializál: regiszterek, verem Átadja a vezérlést Számítógép architektúrák 297
A C nyelv típusai Aritmetikai (egyszerű) típusok [unsigned signed] char [unsigned signed] [short long long long*] int enum float [long*] double Összetett/származtatott típusok struct és union tömb mutató *ISO C99 Számítógép architektúrák 298
A C egész típusai típus méret tartomány [signed] char -128 127 unsigned char 1 bájt 0 255 [signed] short -32.768 32.767 unsigned short 2 bájt 0 65.535 [signed] int 4 bájt -2.147.483.648 2.147.483.647 unsigned int (2 bájt) 0 4.294.967.295 [signed] long 8 bájt -9.223.372.036.854.775.808 9.223.372.036.854.775.807 unsigned long (4 bájt) 0 18.446.744.073.709.551.615 [signed] long long * -9.223.372.036.854.775.808 9.223.372.036.854.775.807 unsigned long long 8 bájt 0 18.446.744.073.709.551.615 *ISO C99 Számítógép architektúrák 299
Felsorolásos típus Alacsony szinten int-ként reprezentált C nyelven a két kód assembly szinten azonos Számítógép architektúrák 300
A C nyelv valós típusai Valós típusú konstansok formátuma 0.751 +.75100.751f 75.1e-2 0.751L 0.0751E+1 Valós típusok paraméterei méret minimum maximum pontosság float 4 bájt 1.18 10-38 3.40 10 +38 7 számjegy double 8 bájt 2.23 10-308 1.80 10 +308 15 számjegy long double* 10 bájt 3.36 10-4932 1.19 10 +4932 19 számjegy *ISO C99 Számítógép architektúrák 301
A C nyelvben Mutató típus Fontos szerepet játszik (mutatóorientált nyelv) Előjel nélküli egész reprezentáció (32 vagy 64 bit) NULL: csupa nulla bit Értéke adatcím és kódcím (!) is lehet Aritmetikai műveletek is végezhetőek velük Számítógép architektúrák 302
struct kulcsszó Rekord típus Nem biztos, hogy folytonos memóriaterületen A.a A.b A.c A.d sizeof(a)==16 B.d B.a B.c B.b sizeof(b)==24 nem használt bájt Számítógép architektúrák 303
A C nyelv tömbje Tömb index 0-tól (db-1)-ig Csak egydimenziós tömb van, viszont van tömbök tömbje Sztring: karaktertömb Lezáró karakter \0 (ASCII kód: 0) A tömb neve az első elemre mutató nevesített konstans (mutatóorientáltság erős) egyenértékű utasítások Számítógép architektúrák 304