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

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

Informatika érettségi vizsga

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)

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

Architektúra, megszakítási rendszerek

Bevezetés az informatikába

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

A 32 bites x86-os architektúra regiszterei

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

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

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

Az interrupt Benesóczky Zoltán 2004

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

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

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

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

Digitális rendszerek. Digitális logika szintje

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

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

IT - Alapismeretek. Feladatgyűjtemény

Máté: Assembly programozás

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

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

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

Adatok ábrázolása, adattípusok

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

IT - Alapismeretek. Megoldások

Összeadás BCD számokkal

HARDVERKÖZELI PROGRAMOZÁS1

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)

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

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

Mikrorendszerek tervezése

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

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.

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

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:

Digitális technika VIMIAA01

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

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

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

Magas szintű optimalizálás

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

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

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

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

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

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

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

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.

Assembly. Iványi Péter

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

TestLine - zsoltix83tesztje-01 Minta feladatsor

7. Fejezet A processzor és a memória

Labor gyakorlat Mikrovezérlők

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

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

Központi vezérlőegység

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

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

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

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

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

Számítógép architektúrák záróvizsga-kérdések február

TestLine - zsoltix83tesztje-01 Minta feladatsor

OPERÁCIÓS RENDSZEREK. Elmélet

Nagy Gergely április 4.

Alapismeretek. Tanmenet

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

Labor gyakorlat Mikrovezérlők

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

Digitális technika VIMIAA hét

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

Informatikai Rendszerek Alapjai

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)

Digitális technika VIMIAA hét

Informatikai alapismeretek

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

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

Bevezetés az informatikába

A számítógép főbb részei és jellemzői központi egységnek perifériák

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

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

A háttértárak a program- és adattárolás eszközei.

Alapismeretek. Tanmenet

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}

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

Á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 2018. május 09.

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, SzGA & HKP1) Írásbeli vizsga Teszt + számolás/programértés + kifejtős Számítógép architektúrák 2

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 3

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 leképezése alacsonyra Számítógép architektúrák 4

A tárgy célja Hardver ismeretek átadása Összeköttetés teremtése Az absztrakt és az alapozó ismeretek között A program és az elektronika 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 5

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 hang videó adatbázis programok számok bitsorozat Számítógép architektúrák 7

Bináris számok Csak két számjegy: 0 és 1 Jelentőség: két á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 8

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 9

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 10

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 11

Á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 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 12

Fixpontos számábrázolás Egész értékek reprezentálása Előjel nélküli eset á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 13

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 14

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 15

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 16

Aritmetikai túlcsordulás Két féle hibalehetőség Előjel nélkül: több bit lenne szükséges (carry) 01011010 90 +11110001 +241 101001011 75 331 >255 Előjeles: nem várt előjelváltás (overflow) 01011010 90 +01110001 +113 11001011-53 203 > 127 Számítógép architektúrák 17

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 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 Számítógép architektúrák 18

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 19

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 20

É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 21

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 22

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 23

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 24

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 25

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 26

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 27

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 28 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 29

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 30

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 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 31

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 32

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: 鰥 Pakolt BCD:?9?0?546 (érvénytelen) vagy +9-0+546 Számítógép architektúrák 33

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 34

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 35

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 36

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 37

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 39

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 40

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 41

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 42

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 43

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 44

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 45

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 46

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 47

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 49

Regiszterek Kis méretű (flip-flop-szerű) tároló áramkör Mérete általában az adatbusz szélességével egyenlő Általában 8-512 bit 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 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 50

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 51

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 52

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 53

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 54

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 55

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 56

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 57

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 58

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 59

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 60

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 61

Ó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 62

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 63

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 64

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 65

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 66

Í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 67

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 68

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 69

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 70

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 ez 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 72

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 73

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 74

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 75

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 76

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 77

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 78

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 79

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 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 80

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 81

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 82

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 83

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 84

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 85

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 86

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 87

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 88

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-31500 MB/s (v4.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 89

(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 90

Serial ATA Soros belső busz Pont-pont kapcsolat SATA busz Átviteli sebesség: 150-1969 MB/s (v3.2) Fejlesztés: 2003- 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 91

Universal Serial Bus Soros külső busz USB busz Plug-and-Play, elosztható (hub) Átviteli sebesség: 0,18-1250 MB/s (v3.1) 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 92

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 93

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 94

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 96

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 97

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 98

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 99

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 100

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 101

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 102

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 103

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 104

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 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 105

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 106

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, GPU cache, Web cache, DNS cache CPU cache Többszintű: L1, L2, L3 cache On-chip vagy off-chip Számítógép architektúrák 107

Gyorsítótár felépítése A tárolás egysége a Sor A Sor részei a Tag (toldalék) és a Blokk A Tag tartalmazza a Blokk főtárbeli címét és egyéb vezérlő információkat A Blokk a főtár egy részének a másolata CPU Cache Tag 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 108

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 109

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. Csoport asszociatív (set-associative) Egy RAM címről néhány sor egyikébe kerül az adat. Teljesen asszociatív (fully associative) Bármely címről származó adat tárolható bármely cache sorban. Számítógép architektúrák 110

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 0 1 0 Nem leggyakrabban használt Hatékony és egyszerű 0 3 1 2 Számítógép architektúrák 111

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 112

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 113

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 114

A cache jellemzői A gyorsítótár mérete A Blokk mérete 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ő Számítógép architektúrák 115

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 116

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 117

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 118

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 119

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: <2TB Í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 120

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 121

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 122

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 123

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 124

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 125

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 126

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 127

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 128

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 129

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 130

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 131

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 132

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 133

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 134

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 135

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 136

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 137

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 138

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 139

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 140

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 141

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 143

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 144

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 145

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 146

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 147

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 148

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 149

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 150

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 151

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 152

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 153

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 154

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 156

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 157

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 158

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 159

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 160

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 161

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 162

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 163

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 164

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 165

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 166

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 167

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 168

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 169

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 170

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 171

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 172

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 173

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 174

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 175

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 176

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 177

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) Számítógép architektúrák 178

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 179

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 180

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 181

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 182

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 183

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 184

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 185

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 186

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 0x94 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 0x94 0x00 + 0x3B 0x02 0x33 0x76 = 0x7F 0x37 0x7F 0x76 2 000 000 000 + 989 999 990 = -1 304 967 306 119 53 148 0 + 59 2 51 118 = 127 55 127 118 Számítógép architektúrák 187

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 188

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ó Utód: Explicitly Parallel Instruction Computing Számítógép architektúrák 189

VLIW példa Kiszámítandó: (x-y)*(x+y)/8*z*z Skalár megoldás (9 utasítás) LDR r1, (r11) LDR r2, (r12) SUB r3, r1, r2 ADD r4, r1, r2 MUL r5, r3, r4 LDR r3, (r13) MUL r6, r3, r3 ASR r7, r6, #3 DIV r8, r5, r7 1. 2. 3. 4. 5. 6. 7. 8. 9. VLIW megoldás (4 utasítás) LDR r1, (r11) LDR r2, (r12) LDR r3, (r13) SUB r3, r1, r2 ADD r4, r1, r2 MUL r6, r3, r3 MUL r5, r3, r4 ASR r7, r6, #3 NOP DIV r8, r5, r7 NOP NOP (x y)(x + y) 8z 2 Számítógép architektúrák 190

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 191

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 192

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 193

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 194

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 195

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 196

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 197

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 198

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 199

Á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 200

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 201

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 203

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 204

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 205

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 206

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 207

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 208

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 209

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 210

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 211

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 212

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 213

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 214

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 215

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 216

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 217

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 218

High-Performance Computing HPC - TOP 1 (2015) (2017: TOP 2) 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 219

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 221

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 222

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 223

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 224

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 225

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 226

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 227

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 228

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 229

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 230

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 231

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 232

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 233

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 234

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 235

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 236

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 237

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 239

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 240

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 241

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 242

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: LED Számítógép architektúrák 243

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 244

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 245

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 246

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 247

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 248

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 249 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 250

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 251

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 252

Ö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 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 253 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 254

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 255

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 257

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 cím 2. Operandus + eredmény cím 1 címes utasítás Műveleti kód 1. Operandus cím Számítógép architektúrák 258

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 259

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 260

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 261

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 262

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 263

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 264

Utasítás típusok Bitléptető utasítások Logikai/előjeltelen balra léptetés (shl) Logikai/előjeltelen 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 265

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 266

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 267

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 268

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 269

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 270

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 271

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 272

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 273

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 274

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 memóriacíme regiszter 500 731 730 501 Op.kód 731 Adat 502 732 503 733 Számítógép architektúrák 275

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 276

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 277

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 278

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 279

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 280

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 281

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 282

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 283

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 284

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 Regiszter a forrás 32 bites regiszter Regiszteres címzés Forrás: EBX Cél: EAX Számítógép architektúrák 285

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 286

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? 5/(short)2==.5+ 2 Számítógép architektúrák 288

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 289

Mi az outputja a programnak? Számítógép architektúrák 290

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 291

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 292

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 293

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 294

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 295

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 296

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 297

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 298

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 299

Komplexitás nő A forráskód alkotórészei Karakterkészlet Lexikális egység Szintaktikai egység Utasítás Programegység Fordítási egység Program Számítógép architektúrák 300

Konstans (literál) Közvetlen adat megadás (immediate) Kódba épített adat 8, 16, 32, 64 bit szélességű Fix vagy lebegőpontos ábrázolás Magas szinten: 123, 1.25f, a Alacsony szinten: 0x0000007b, 0x3fa00000, 0x61 Számítógép architektúrák 301

Nevesített konstans Komponensei: név, típus, érték #define abc 123 Előfordító kicseréli a nevet az értékre Kódba épített adat Assembly szinten egyszerű konstans const int abc=123; Assembly szinten egyszerű változó A fordító nem engedi a változtatást Számítógép architektúrák 302

Változó Komponensei: név, attribútum, cím, érték Deklaráció: explicit, implicit, automatikus Hatáskör: statikus, dinamikus Élettartam: statikus, dinamikus, programozó által vezérelt Értékadás: kezdőértékadás (automatikus, explicit), értékadó utasítás, paraméterátadás, input utasítás Számítógép architektúrák 303

Alacsony szinten Változó Adott méretű lefoglalt memóriaterület Ha van cím komponens mindig van érték is Érték: bitsorozat (tetszőleges értelmezéssel) Értékadás: memóriacímre adat mozgatás Statikus változó adat szegmensben Dinamikus változó verem szegmensben Programozó által vezérelt a heap-ben Mutató: előjel nélküli egész változó C-ben Számítógép architektúrák 304

Kifejezés Komponensei: típus, érték Formálisan: operátor, operandus és zárójel Operátor: unáris, bináris, ternáris Alak: infix (2+3)*4 prefix * + 2 3 4 postfix (RPN) 2 3 + 4 * Infix alak esetén nem egyértelmű kiértékelés: precendencia és kötésirány kell Típusegyenértékűség vagy típuskényszerítés Számítógép architektúrák 305

Kifejezés kiértékelés A kifejezés értékének, típusának meghatározása Konstans kifejezést a fordító értékel ki Nem konstans infix kifejezést a fordító postfix alakra hozza (figyelembe véve a zárójeleket, precedenciát és a kötésirányt) és az alapján állítja elő a gépi kódot imul ebx, ecx eax + ebx * ecx & edx add eax, ebx and eax, edx Számítógép architektúrák 306

Deklarációs utasítás Utasítások Nem (biztos, hogy) áll mögötte gépi kód A fordítóprogramnak szól Végrehajtható utasítás Egy magas szintű utasításból több gépi kódú utasítást is előállíthat a fordító Csoportjai: üres, értékadó, ugró, elágaztató, ciklusszervező, hívó, egyéb Számítógép architektúrák 307

Elágaztató utasítás Kétirányú elágaztató utasítás C nyelven: if (kifejezés) utasítás1; [else utatsítás2;] Többirányú elágaztató utasítás C nyelven: switch(kifejezés){ case egész_konstans_kif_1: [utasítás1;] [case egész_konstans_kif_2: [utasítás2;]] [default: utasítás3;] } Számítógép architektúrák 308

A feltételes utasítás alacsony szinten if (feltétel) utasítás1; utasítás2; if (feltétel) utasítás1; else utasítás2; utasítás3; cmp eax, ebx jne.l0 mov ecx, 1.L0: add edx, 1 cmp eax, ebx jne.l2 mov ecx, 1 jmp.l3.l2: mov ecx, 2.L3: add edx, 1 Számítógép architektúrák 309

A switch utasítás alacsony szinten switch (kifejezés){ case kifejezes1: utasítás1; case kifejezes2: utasítás2; default: utasítás3;} utasítás4; cmp eax, 1 je.l3 cmp eax, 2 je.l4 jmp.l2.l3: mov ebx, 1.L4: mov ebx, 2.L2: mov ebx, 3 add edx, 1 Számítógép architektúrák 310

A break hatása alacsony szinten switch (kifejezés){ case 1: utasítás1; break; case 2: utasítás2; break; default: utasítás3;} utasítás4; cmp eax, 1 je.l3 cmp eax, 2 je.l4 jmp.l2.l3: mov ebx, 1 jmp.l5.l4: mov ebx, 2 jmp.l5.l2: mov ebx, 3.L5: add edx, 1 Számítógép architektúrák 311

Ciklusszervező utasítások Felépítés: fej + mag + vég Működés szempontjából: üres, normál, végtelen Fajtái: Feltételes Kezdőfeltételes Végfeltételes Előírt lépésszámú Előltesztelő Hátultesztelő Felsorolásos Végtelen Számítógép architektúrák 312

A C nyelv ciklusai Kezdőfeltételes (nem 0 feltétel esetén ismétel) while (feltétel) utasítás; for ([kif1]; [kif2]; [kif3]) utasítás; Végfeltételes (nem 0 feltétel esetén ismétel) do utasítás; while (feltétel); Számítógép architektúrák 313

A while és for ciklus alacsony szinten utasítás0; while (feltétel) utasítás1; utasítás2; x=5; goto test; loop: y=y+1; x=x-1; test: if (x>0) goto loop; mov eax, 10 jmp.l2.l3: sub eax, 1.L2: cmp eax, 0 jne.l3 add ebx, 1 A for és a while ciklus assembly szinten egyenértékű. Számítógép architektúrák 314

A do-while ciklus alacsony szinten utasítás0; do utasítás1; while (feltétel); utasítás2; mov eax, 10.L3: sub eax, 1 cmp eax, 0 jne.l3 add ebx, 1 A do-while ciklus nem lehet üres ciklus. Számítógép architektúrák 315

Magasszintű programozás leképezése assembly-re 2. Eljárás, függvény Lokális változó Paraméterátadás

Gondolatébresztő kérdések Hol vannak az hívott eljárás utasítási? Mi a kezdő memória címük? Hova kell átadni a vezérlést? Melyik utasítással kell folytatni a végrehajtást ha végeztünk az eljárással? Mi a címe a következő utasításnak? Hova kell átadni a vezérlést? Hol tárolódik a visszatérési cím? Hol van eltárolva a hívási lánc? Számítógép architektúrák 317

Gondolatébresztő kérdések Hogyan kerülnek át a paraméterek az alprogramba? Hogyan kerül vissza a hívóhoz a visszatérési érték? Ismersz-e változó paraméterszámú függvényt? Hol van tárolva a lokális változó? A memória melyik részén helyezkedik el? Miért dinamikus az alap változó élettartama? Miben különbözik a static változótól? Számítógép architektúrák 318

Gondolatébresztő kérdések Melyik program a gyorsabb? Miért? #include<math.h> int main(){ int a,b=-23; a=abs(b); return 0;} #define abs(x) ((x)<0)?(-1*(x)):(x) int main(){ int a,b=-23; a=abs(b); return 0;} Számítógép architektúrák 319

Gondolatébresztő kérdések Mit ír az alábbi program a képernyőre? #include<stdio.h> int b=2; void one(int a){ a=a+1;} int main(){ one(b); printf( %d %d\n,a,b); return 0;} Számítógép architektúrák 320

Gondolatébresztő kérdések Hányszor fut le az eljárás? #include<stdio.h> void one(int a){ if(a>0) one(a-1); } int main(){ one(1000000); return 0; } Számítógép architektúrák 321

Gondolatébresztő kérdések Mit csinál a program? #include<stdio.h> void one(){ int T[10000000]; T[12345]=67; printf( %d,t[12345]); } int main(){ one(); return 0; } Számítógép architektúrák 322

Gondolatébresztő kérdések Mit ír az alábbi program a képernyőre? #include<stdio.h> void one(){ int a=3-4;} void two(){ int b; printf( %d\n,b);} int main(){ one(); two(); return 0;} Számítógép architektúrák 323

Alprogram Az újra felhasználhatóság és a procedurális absztrakció eszköze Komponensei: Név Formális paraméterlista Törzs Környezet Fajtái: Eljárás Függvény Számítógép architektúrák 324

Eljárás Tevékenységet hajt végre Aktiválás utasításszerűen lehet Befejezés a törzs végére érve vagy befejeztető utasítással Folytatás a hívás utáni utasítással void procedure(int a, char b){ printf( %d %c,a,b); } // C nyelven nincs eljárás procedure(3, A ); Számítógép architektúrák 325

Értéket határoz meg Aktiválás kifejezésben Függvény Befejezés általában befejeztető utasítás révén visszatérési érték megadásával Folytatás a kifejezés kiértékelésnél int function(int a, char b){ return a+b; } x=2*function(3, A )+1; Számítógép architektúrák 326

Last In First Out tároló A verem Tetejének a memóriacímét a verem mutató regiszter (SP) tárolja Push és Pop művelet A verem mérete korlátos Veremhez gyakran hozzá kell férni Általában gyorsítótárazott (cache) Adat kivétele nem fizikai törlés Külön memóriaszegmensben van Számítógép architektúrák 327

Eljárás hívás alacsony szinten PC SP 1 2 3 12 7 8 9 5 0 10 RAM: 4 11 6 hívó_utasítása_1 hívó_utasítása_2 eljárás_hívás hívó_utasítása_3 hívott_utasítása_1 hívott_utasítása_2 befejeztetés old_pc Számítógép architektúrák 328

Hívási lánc Az alprogramok hívhatnak újabb alprogramokat, azok továbbiakat, A visszatérési címek folyamatosan a verem tetejére kerülnek (A verem mérete nő.) A hívási lánc dinamikusan épül fel, bomlik le A lánc miden tagja aktív, de csak a legutóbbi működik Rekurzió: egy aktív alprogram meghívása Számítógép architektúrák 329

Lokális változók Az programegységben deklarált nevek (változók) a programegység lokális nevei (változói) Nem elérhetőek a programegységen kívülről C nyelvnél (alapesetben): Statikus hatáskörkezelés Dinamikus élettartam kezelés Nincs automatikus kezdőérték Számítógép architektúrák 330

Lokális változó alacsony szinten Az alprogramba lépéskor a verem tetején a visszatérési cím található A verembe mentjük a bázis regiszter értékét A veremmutató (SP) értékét átmásoljuk a bázis regiszterbe (BP) Átállítva a veremmutató értékét hagyunk helyet a lokális változók számára a veremben A verem nem csak LIFO módon kezelhető A lokális változók bázis relatív címzéssel elérhetőek Számítógép architektúrák 331

Lokális változó alacsony szinten void eljar(){ int a=1; int b=2; int c=3; * } * A RAM tartalma: 730 734 738 742 746 750??? a=1 b=2 c=3 régi ebp esp=734 [ebp-12] [ebp-8] [ebp-4] ebp=750 754 ret. cím Számítógép architektúrák 332

Lokális változó alacsony szinten eljar: push ebp mov ebp, esp sub esp, 16 mov DWORD PTR [ebp-12], 1 mov DWORD PTR [ebp-8], 2 mov DWORD PTR [ebp-4], 3 mov esp, ebp pop ebp ret Számítógép architektúrák 333

Paraméter kiértékelés Formális- és aktuális paraméter összerendelés Sorrendi kötés Név szerinti kötés Számbeli egyeztetés Azonos paraméterszám Eltérő paraméterszám Típusegyeztetés Típusegyezés Típus konverzió Számítógép architektúrák 334

Paraméterátadás Érték szerinti Cím szerinti Eredmény szerinti Érték-eredmény szerinti Név szerinti Szöveg szerinti Az adatmozgás iránya fontos C nyelvben: csak érték szerinti paraméterátadás Számítógép architektúrák 335

Érték szerinti paraméterátadás Formális paraméternek van címkomponense a hívott területén. Aktuális paraméternek van érték komponense. Az aktuális paraméter értéke átkerül a hívott alprogram területén lefoglalt címkomponensre. Az információátadás egy irányú. Az alprogram a saját területén dolgozik. A hívott alprogram nem tudja hol van a hívó. Számítógép architektúrák 336

Függvényhívás alacsony szinten 1. A hívó a verembe teszi az aktuális paramétereket fordított (!) sorrendben. (sorrendi kötés, számbeli egyeztetés) 2. A verembe bekerül a visszatérési cím (PC aktuális értéke). 3. PC megkapja a hívott alprogram kezdőcímét. 4. Szekvenciálisan lefutnak a hívott utasításai. Hívott alprogram menti a regisztereket, felhasználja a veremben lévő paramétereket. Meghatározódik a visszatérési érték. Computer Architectures

Függvényhívás alacsony szinten 5. Visszatérési érték betétele egy meghatározott általános regiszterbe (rax vagy st0/(x)mm0). 6. Lokális változók felszabadítása. 7. Veremből visszatérési cím (hívást követő utasítás címe) átmásolása a PC-be (visszatérés). 8. Visszatérési érték a meghatározott regiszterben. 9. Paraméterek kitakarítása a veremből. 10. Végrehajtás folytatása a következő utasítással. Computer Architectures

Függvényhívás alacsony szinten Egyes esetekben A paraméterek meghatározott sorrendben regiszterekbe kerülnek, itt adódnak át. (El kell menteni a korábbi tartalmat. Egész és valós külön.) Float/double paraméterek száma az eax-ben. A visszatérési érték néha a verembe kerül a visszatérési cím alá. A paraméterek kitakarítása a veremből lehet a hívó vagy a hívott feladata is Computer Architectures

verem keret Példa C nyelven int fuggv(int c){ int a; a=c+1; * return a; } int main(int argc, char *argv[]){ int a, b; a=argc; b=fuggv(a); return b; } * A RAM tartalma: 726 730 734 738 742 746 750 754 758 762 766 770 fuggv: c fuggv: a régi ebp visszatér. cím param. main: a main: b ősi ebp esp=726 [ebp-8] [ebp-4] ebp=734 [ebp+4] [ebp+8] [ebp+12] [ebp+16] [ebp+20] Számítógép architektúrák 340