SZÁMÍTÓGÉP ARCHITEKTÚRÁK & HARDVERKÖZELI PROGRAMOZÁS 1

Hasonló dokumentumok
SZÁMÍTÓGÉP ARCHITEKTÚRÁK & HARDVERKÖZELI PROGRAMOZÁS 1

Számítógépek felépítése

6. óra Mi van a számítógépházban? A számítógép: elektronikus berendezés. Tárolja az adatokat, feldolgozza és az adatok ki és bevitelére is képes.

Számítógép felépítése

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

elektronikus adattárolást memóriacím

Informatika érettségi vizsga

A számítógép egységei

2. Számítógépek működési elve. Bevezetés az informatikába. Vezérlés elve. Külső programvezérlés... Memória. Belső programvezérlés

Digitális rendszerek. Utasításarchitektúra szintje

Bepillantás a gépházba

Számítógép egységei. Szoftver (a fizikai eszközöket működtető programok összessége)

Architektúra, megszakítási rendszerek

Számítógépek felépítése, alapfogalmak

A 32 bites x86-os architektúra regiszterei

A számítógépek felépítése. A számítógép felépítése

Bevezetés az informatikába

Nyíregyházi Egyetem Matematika és Informatika Intézete. Input/Output

2017/12/16 21:33 1/7 Hardver alapok

Az interrupt Benesóczky Zoltán 2004

Ismerkedjünk tovább a számítógéppel. Alaplap és a processzeor

2016/08/31 02:45 1/6 Hardver alapok

ELŐADÁS SZÁMÍTÓGÉP MŰKÖDÉSE FIZIKA ÉS INFORMATIKA

Adatelérés és memóriakezelés

Digitális rendszerek. Digitális logika szintje

Memóriák - tárak. Memória. Kapacitás Ár. Sebesség. Háttértár. (felejtő) (nem felejtő)

Máté: Assembly programozás

A számítógép fő részei

IT - Alapismeretek. Feladatgyűjtemény

A mikroprocesszor felépítése és működése

5. tétel. A számítógép sematikus felépítése. (Ábra, buszok, CPU, Memória, IT, DMA, Periféria vezérlő)

Fábián Zoltán Hálózatok elmélet

ASSEMBLY PROGRAMOZÁS TANTÁRGYHOZ SZÜKSÉGES ELŐISMERETEK ISMÉTLÉSE

találhatók. A memória-szervezési modell mondja meg azt, hogy miként

A processzor hajtja végre a műveleteket. összeadás, szorzás, logikai műveletek (és, vagy, nem)

Bevitel-Kivitel. Eddig a számítógép agyáról volt szó. Szükség van eszközökre. Processzusok, memória, stb

IT - Alapismeretek. Megoldások

HARDVERKÖZELI PROGRAMOZÁS1

Mintavételes szabályozás mikrovezérlő segítségével

Összeadás BCD számokkal

Adatok ábrázolása, adattípusok

Számítógépek felépítése, alapfogalmak

Informatikai füzetek

Számítógép egységei. A részek feladatai: Központi egység: Feladata a számítógép vezérlése, és a számítások elvégzése.

Processzor (CPU - Central Processing Unit)

Architektúra, cache. Mirıl lesz szó? Mi a probléma? Teljesítmény. Cache elve. Megoldás. Egy rövid idıintervallum alatt a memóriahivatkozások a teljes

Mikrorendszerek tervezése

2016/06/23 07:47 1/13 Kérdések

Dr. Oniga István. DIGITÁLIS TECHNIKA 10 Memóriák

1. Digitális írástudás: a kőtáblától a számítógépig 2. Szedjük szét a számítógépet 1. örök 3. Szedjük szét a számítógépet 2.

8. témakör. Memóriák 1. Számítógép sematikus felépítése: 2.A memória fogalma: 3.A memóriák csoportosítása:

Számítógépek felépítése

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

Digitális technika VIMIAA01

A Számítógépek hardver elemei

Számítógép fajtái. 1) személyi számítógép ( PC, Apple Macintosh) - asztali (desktop) - hordozható (laptop, notebook, palmtop)

Első sor az érdekes, IBM PC ra alapul: 16 bites feldolgozás, 8 bites I/O (olcsóbb megoldás). 16 kbyte RAM. Nem volt háttértár, 5 db ISA foglalat

1. Milyen eszközöket használt az ősember a számoláshoz? ujjait, fadarabokat, kavicsokat

8. Fejezet Processzor (CPU) és memória: tervezés, implementáció, modern megoldások

Feladatlap: Számítógép összetevők keresése

Assembly. Iványi Péter

Informatikai Rendszerek Alapjai

A Számítógépek felépítése, mőködési módjai

Labor gyakorlat Mikrovezérlők

Magas szintű optimalizálás

Számítógép architektúra

Labor gyakorlat Mikrovezérlők

Bevezetés az informatikába Tételsor és minta zárthelyi dolgozat 2014/2015 I. félév

Hardver összetevők ellenőrzése Linux alatt. Hardverguruk előnyben...

Bevezetés a számítástechnikába

TestLine - zsoltix83tesztje-01 Minta feladatsor

Utasításfajták Memóriacímzés Architektúrák Végrehajtás Esettanulmányok. 2. előadás. Kitlei Róbert november 28.

8. Fejezet Processzor (CPU) és memória: tervezés, implementáció, modern megoldások

Nagy Gergely április 4.

BEVEZETÉS AZ INFORMATIKÁBA - SZÁMÍTÓGÉP ARCHITEKTÚRÁK. Háber István Ihaber@pmmik.pte.hu

Bevitel-Kivitel. Bevitel-Kivitel és Perifériák. Algoritmusok és Alkalmazásaik Tanszék Budapest december 16.

Dr. Oniga István DIGITÁLIS TECHNIKA 2

7.hét: A sorrendi hálózatok elemei II.

Központi vezérlőegység

Dr. Oniga István. DIGITÁLIS TECHNIKA 10 Memóriák

1. tétel. A kommunikáció információelméleti modellje. Analóg és digitális mennyiségek. Az információ fogalma, egységei. Informatika érettségi (diák)

Alapismeretek. Tanmenet

7. Fejezet A processzor és a memória

Bevezetés az informatikába gyakorló feladatok Utoljára módosítva:

OPERÁCIÓS RENDSZEREK. Elmélet

TestLine - zsoltix83tesztje-01 Minta feladatsor

3. gyakorlat. Kettes számrendszer: {0, 1} Tízes számrendszer: {0, 1, 2,..., 9} 16-os (hexadecimális számrendszer): {0, 1, 2,..., 9, A, B, C, D, E, F}

Digitális technika VIMIAA hét

Digitális technika VIMIAA hét

Tamás Péter (D. 424) Mechatronika, Optika és Gépészeti Informatika Tanszék (D 407)

Fábián Zoltán Hálózatok elmélet

Számítógép Architektúrák I-II-III.

Gábor Dénes Főiskola Győr. Mikroszámítógépek. Előadás vázlat. 2004/2005 tanév 4. szemeszter. Készítette: Markó Imre 2006

Informatikai alapismeretek

SZÁMÍTÓGÉP FELÉPÍTÉSE (TK 61-TŐL)

Járműfedélzeti rendszerek I. 3. előadás Dr. Bécsi Tamás

Előadó: Nagy István (A65)

Számítógép Architektúrák

A személyi számítógép felépítése

Programozott soros szinkron adatátvitel

Átírás:

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: &#x4eac, &#20140 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