Upload
others
View
10
Download
0
Embed Size (px)
Citation preview
SZÁMÍTÓGÉP ARCHITEKTÚRÁK &
HARDVERKÖZELI PROGRAMOZÁS 1
Dr. Varga Imre
Debreceni Egyetem
Informatikai Rendszerek és Hálózatok Tanszék
2019. május 23.
Követelmények
Gyakorlat (aláírás, csak HKP1)
Óralátogatás (maximum hiányzás: 3)
2 gyakorlati ZH
• A két ZH átlaga legalább 60%
• Mindegyik legalább 50%
1 javítási lehetőség (teljes féléves anyag)
Elmélet (kollokvium, SzA & HKP1)
Írásbeli vizsgaTeszt + számolás/programértés + kifejtős
Számítógép architektúrák 2
Figyelmeztetés
A diasoron alapuló lexikai tudás szükséges, de nem elegendő a sikeres teljesítéshez.
Az anyag megértése is szükséges, emiatt az előadásokon való aktív részvétel ajánlott.
Egyéb irodalom is hasznos lehet.
Számítógép architektúrák 3
Mérnökinformatikus képzés
mérnök… …informatikus
Számítógép architektúrák 4
Számítógép architektúrák
Assemblyprogramozás
Rendszerközeliprogramozás
Programozásinyelvek 1-2
Operációs rendszerek
Fizika
Elektronika
Digitálistechnika
Jelek ésrendszerek
Beágyazottrendszerek
Adatbázis-kezelés
Tematika
Számábrázolás, adattípus implementáció
CPU alapvető felépítése és működése
Modern processzorok
Konkrét processzor architektúra Utasításkészlet, programozás
A programozás operációsrendszerhez kapcsolódó hardverközeli aspektusai
Digitális elektronika alapjai hardver szempontból
Assembly programozás Magas szint programozás leképezése alacsonyra
Számítógép architektúrák 5
A tárgy célja
Hardver ismeretek átadása
Összeköttetés teremtése
A ‚program’ és az ‚elektronika’ között
Az ‚absztrakt’ és az ‚alapozó’ ismeretek között
Magas szintű programozás mélyebb megértése
Hatékonyabb programozás
Az assembly programozás bemutatása
Szemléletformálás
Átfogó kép kialakítása a számítógép rendszerekről
Számítógép architektúrák 6
Számábrázolás, adattípusok
Fixpontos számábrázolás
Lebegőpontos számábrázolás
Főbb adattípusok
Adatok
Információtároláshoz különböző adattípusok
A számítógépen minden adat végül bitsorozatnumerikus infószövegképhangvideóadatbázisprogramok
Számítógép architektúrák 8
számok bitsorozat
kódolás
dekódolás
Bináris számok
Csak két számjegy: 0 és 1
Jelentőség: 2 állapot (igen/nem, van/nincs, stb.)
Konverzió 69,37510 = 1000101,0112
Számítógép architektúrák 9
69 234 117 0
8 14 02 01 00 1
64 32 16 8 4 2 1 1/2 1/4 1/8
26 25 24 23 22 21 20 2-1 2-2 2-3
1 0 0 0 1 0 1 0 1 1
2 3750 7501 5001 000
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: 1FA16, 0x1FA, $1FA
Konverzió
Számítógép architektúrák 10
0 0 0 1 1 1 1 1 1 0 1 0
211 210 29 28 27 26 25 24 23 22 21 20
2048 1024 512 256 128 64 32 16 8 4 2 1 =50610
1*256 15*16 10*1 =50610
162 161 160
1 F A
0x1FA = 0b 1 1111 1010 = 506
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
Számítógép architektúrák 11
21625665.5364.294.967.29618.446.744.073.709.551.616
Adattípus
Megadás
Reprezentáció
Tartomány
Műveletek
Főbb adattípusok
Egyszerű típusok: egész, valós, karakter, mutató, logikai, felsorolásos
Összetett típus: tömb, rekord, halmaz
Számítógép architektúrák 12
Egész típus
Ábrázolás
Fixpontos számábrázolás (2, 4 vagy 8 bájt) Előjeles vagy előjel nélküli
BCD Pakolt vagy pakolatlan
Bájtsorrend
Little-endian
Big-endian
Megadás különböző módokon
Pl. C nyelven: 30=30u=30l=036=0x1E=0b11110*
Számítógép architektúrák 13
*ISO C99
Fixpontos számábrázolás
Egész értékek reprezentálása
Előjel nélküli eset (csak nem negatív szám)
ábrázolandó szám kettes számrendszerben
adott számú biten
Példa (1 bájt esetén)4110 1010012
N biten ábrázolható
legkisebb szám: 0
legnagyobb szám: 2N-1
Számítógép architektúrák 14
0 0 1 0 1 0 0 1
Fixpontos számábrázolás
Előjeles eset
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)-4110 -1010012
N biten ábrázolható
legkisebb szám: -(2N-1)
Legnagyobb szám: 2N-1-1Számítógép architektúrák 15
1 0 1 0 1 1 11
meghatározza az előjelet
Számolás fixpontos számokkal
Összeadásra és kivonásra ugyanaz az algoritmus használható
Példa (1 bájtos adatok esetén)
Számítógép architektúrák 16
67+54=121
01000011+00110110
01111001
67-54=1367+(-54)=13
01000011+11001010
00001101
Absolútérték (+54):
00110110Egyes komplemens:
11001001Kettes komplemens (-54):
11001010
Számolás fixpontos számokkal
SzorzásPélda: két 16 bites érték szorzása: 30 000*4 00030 000: 4 000:
120 000 000:
Eredmény két regiszterben vagy túlcsordulás (hiba)
Számítógép architektúrák 17
A B C D
B*D
0x75 0x30 0x0F 0xA0
0x1E 0x000x49 0x200x02 0xD0
0x06 0xDB
0x07 0x27 0x0E 0x00
A*D
B*C
A*C+
216AC+28(AD+BC)+BD
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 +241101001011 75 ≠331 >255
Előjeles: nem várt előjelváltás (overflow)01011010 90
+01110001 +11311001011 -53 ≠203 > 127
Számítógép architektúrák 18
-2,15E+09
0
2,147E+09
4,295E+09
0 2,147E+094,295E+096,442E+098,59E+091,074E+101,288E+101,503E+101,718E+10
2G
4G
0
-2G
-2,15E+09
0
2,147E+09
4,295E+09
0 2,147E+094,295E+096,442E+098,59E+091,074E+101,288E+101,503E+101,718E+10
2G
4G
0
-2G
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üli8 bit: 01101001 16 bit: 00000000011010018 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őjeles8 bit: 01101001 16 bit: 00000000011010018 bit: 11010010 16 bit: 1111111111010010
Számítógép architektúrák 19
unsigned short x=5;
unsigned long y=x;
short int q=-17;
long int z=q;
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:
Számítógép architektúrák 20
0x4C 0x3D 0x2E 0x1F
0x1F 0x2E 0x3D 0x4C
25 32 17 24 9 16 1 8
1 8 9 16 17 24 25 32
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
Számítógép architektúrák 21
*ASCII miatt
Karakter típus
Értékei karakter kódok
C: Fixpontos számábrázolás, 1 bájt, előjeles/előjel nélküli, egészként használható (ASCII)
Java: 2 bájt, előjel nélküli (Unicode)
Karakter kódtáblák
ASCII: 7bit
ISO-8859-2 „Latin 2”: 8bit
Unicode: 16bit
Számítógép architektúrák 22
Karakter kódtáblák
ASCII kódtábla
0x00-0x1F: vezérlő karakter
0x30-0x39: számjegy
0x41-0x5A: angol nagy betű
0x61-0x7A: angol kis betű
ISO-8859-2 „Latin 2”
0x00-0x7F: ASCII (kompatibilitás)
0x80-0xFF: közép/kelet európai nyelvek speciális karakterei
Számítógép architektúrák 23
Karakter kódtáblák
Unicode
16 bites kódsíkok (17 db)
Több mint 1 millió kódpont (17*65536)
1. sík: Basic Multilingual Plane (BMP)
ASCII kompatibilitás
Kódolási technikák (változó hosszúság)
• UTF-8
• UCS-2
• UTF-16
• UTF-32
Számítógép architektúrák 24
UTF-8
ASCII: Minden bájt egy ASCII kód
unicode00000000 00000000 00000000 0abcdefg
UTF-8 0abcdefg
Nem ASCII: Egyik bájt sem ASCII kód
unicode00000000 00000000 00000abc defghijk
UTF-8 110abcde 10fghijk
unicode00000000 00000000 abcdefgh ijklmnop
UTF-8 1110abcd 10efghij 10klmnop
unicode00000000 000abcde fghijklm nopqrstu
UTF-8 11110abc 10defghi 10jklmno 10pqrstu
Számítógép architektúrák 25
UTF-8 példa
Karakter: (egyszerűsített kínai, pinyin: jing)
Unicode: 4EAC
Bináris: 01001110 10101100
UTF-8: 11100100 10111010 10101100
HTML: 京, 京
URL: %E4%BA%AC
Latin-1: 京
Latin-2: 亏
Számítógép architektúrák 26
Valós típus
Ábrázolás: lebegő pontos
Méret: 4, 8, 10 bájt
Megadás különböző formában
Pl. C nyelven: 0.25, 0.25f, 0.25L, .25, +0.25, 25e-2, 0.025e1
Műveletek
Operátor túlterhelésPl. a + operátor lehet egész-egész vagy valós-valós
Egyes műveletek nem használhatóak valós típussalPl.: nincs maradékos osztás, léptetés
Számítógép architektúrák 27
Lebegő pontos számábrázolás
Valós számok ábrázolása
Alapja a normalizálás: 123,45 = 1,2345 · 102
Minden (2 számrendszerbeli) szám felírható így:
(-1)S · M · AK
ahol a mantissza (M) „1.H” alakú, azaz 12 ≤ M < 102
karakterisztika (K) pozitív és negatív is lehet
Nem tároljuk: alap (A=2), rejtett bit, K előjele
E=K+B adott számú biten nem negatív (B: nulla pont)
Tárolandó: S, H, E
Számítógép architektúrák 28
Lebegő pontos szabvány
IEEE 754/1985 szabvány (ISO/IEC/IEEE 60559:2011)
Előjel
Pozitív: 0; Negatív: 1
Formátumok
Számítógép architektúrák 29
méretS
hosszE
hosszH
hosszB
Egyszerespontosság
32 bit 1 bit 8 bit 23 bit 127
Duplapontosság
64 bit 1 bit 11 bit 52 bit 1023
Kiterjesztettpontosság
80 bit 1 bit 15 bit 63(+1) bit 16383
Lebegő pontos számábrázolás
Példa: -13.8125 egyszeres pontossággal
-13.812510 = -1101.11012 = -11 · 1.1011101 · 23
Előjel: S = 1
Karakterisztika: K = 310 = 112
Mantissza: M = 1.1011101
Hasznos bitek: H = 10111010000000000000000…
Eltolt karakterisztika: E = 310+12710 = 100000102
Számítógép architektúrák 30
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
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ággalhasznos bitek: 00110011001100110011001100110…tárolt bitek: 00110011001100110011010 0.3 0.300000011920929
Számítógép architektúrák 31
Kerekítési hiba
Valós számok: folytonos halmaz, végtelen sok elemmel
Lebegőpontos számok:diszkrét halmaz, véges sok elemmel
Például:1.0000000000; 1.0000001192; 1.0000002384; 1.0000003576
Az ábrázolható számok sűrűsége nem állandó
A tárolt értékek csak néhány számjegyig pontosak
Számítógép architektúrák 32
Speciális lebegőpontos értékek
+0 és -0előjel bit ’0’ (+) vagy ’1’ (-), minden más bit ’0’Pl.: 0.0/-1.0, -1.0*0.0
±végtelen (Inf)karakterisztika csupa ’1’, mantissza csupa ’0’Pl.: 1.0/0.0, inf+1.0, túl nagy érték
„nem szám” (NaN)karakterisztika csupa ’1’, mantissza nem csupa ’0’Pl.: 0.0/0.0, inf-inf, 0.0*inf, NaN+1.0
denormalizált szám (subnormal)karakterisztika csupa ’0’, mantissza nem csupa ’0’
Számítógép architektúrák 33
Számolás lebegő pontos számokkal
Összeadás: fixpontostól nagyon eltérő módszer Példa: 7,5 + 0,625
7,5 = 01000000 11110000 00000000 000000000,625 = 00111111 00100000 00000000 00000000
10000001 > 01111110
Számítógép architektúrák 34
3
11110000…+ 10100…100000100… 1+10000001 = 10000010
01000001 000000100 00000000 00000000
(-1)0 * 1,000001 *1011 = 8,125
Példa: bitsorozat értelmezés
Mit jelenthet az alábbi big-endian bitsorozat?11101001 10110000 10100101 01000110
32 bites előjeles egész: -374 299 322 32 bites előjel nélküli egész: 3 920 667 974 16 bites előjeles egészek: -5 712; -23 226 16 bites előjel nélküli egészek: 59 824; 42 310 lebegőpontos: -26693928249241673000000000.0 „Latin 1” szöveg: é°¥F „Latin 2” szöveg: é°ĽF Unicode szöveg UTF8 kódolással: 鰥F Pakolt BCD: ?9?0?546 (érvénytelen) vagy +9-0+546
Számítógép architektúrák 35
Mutató és rekord típusok
Mutató vagy referencia
Indirekt hivatkozásra szolgálnak
Tartományának elemei tárcímek
Gyakorlatilag előjel nélküli egészek
A mutató típusú változónak is van saját címe
Rekord
Különböző típusú tárterületek együtt
Mindegyik mező a saját reprezentációjával
Számítógép architektúrák 36
Tömb típus
Azonos típusú elemek folytonosan tárolva
Minden elem az adott reprezentációval
A tömb neve
C nyelven: az első elemre mutató nevesített konstans
Egyes nyelveken: az összes elemre hivatkozás
Egydimenziós tömb i. elemének a címe (Ai)𝐴𝑖 = 𝐴1 + 𝑖 − 1 𝐸
ahol E egy adatelem mérete és A1 a tömb kezdőcíme
Számítógép architektúrák 37
Több dimenziós tömbök
Sorfolytonos tárolás
Az i. sor j. elemének címe (Ai,j) egy NxM-esmátrixban
𝐴𝑖,𝑗 = 𝐴1,1 + 𝑀 𝑖 − 1 𝐸 + j − 1 E
ahol E egy adatelem mérete és A1,1 a mátrix első elemének címe
Számítógép architektúrák 38
𝑀3,2 =
𝑒1,1 𝑒1,2
𝑒2,1 𝑒2,2
𝑒3,1 𝑒3,2
→ 𝑀6 = 𝑒1,1 𝑒1,2 𝑒2,1 𝑒2,2 𝑒3,1 𝑒3,2
Sztring típus
Karakterek sorozata
Elemei a megfelelő belső reprezentációban(pl. C: 1 bájt, ASCII; Java: 2 bájt, Unicode)
Hossza
Fix hosszúságú
Változó hosszúságú
• A sztring elején hossz tárolás (pl. Pascal)
• A sztring végén speciális lezárójel (pl. C)
• Kombinált (pl. Delphi)
Számítógép architektúrák 39
A számítógép vázlatos felépítés
Architektúra szintek
Processzor
Buszrendszer
Memória
Perifériák
Számítógép rétegmodell
0. szint: digitális logikai áramkörök (logikai kapu, flip-flop)
1. szint: mikro-architektúra (konkrét ALU, buszok)
2. szint: utasításkészlet architektúra (ISA)
3. szint: operációs rendszer (ütemezés, tárkezelés)
4. szint: programozási nyelvek (alkalmazások)
Számítógép architektúrák 41
Neumann architektúra
Princeton architektúra (Neumann János)
Neumann elvek (1945):
Elektronikus működés
Kettes számrendszer használata
Tárolt program elve
Adat és program tárolás ugyanott/ugyanúgy
Soros programvégrehajtás
Univerzális felhasználhatóság
Számítógép architektúrák 42
Harvard architektúra
Külön adat és program memória
Eltérő felépítés, címtartomány, típus is lehet
Párhuzamos adat és utasítás elérés miatt nagyobb teljesítmény
Főként mikrokontrollerekben használt
Első alkalmazás: Mark I (1944)
Módosított Harvard architektúra
Külön adat/utasítás gyorsítótár, közös memória
Modern CPU-k esetén elterjedtSzámítógép architektúrák 43
A számítógép alapvető felépítése
Processzor
Memória
Input-Output interfész
Buszrendszer
Perifériák
Számítógép architektúrák 44
Processzor Memória I/O interfész
Perifériák
Buszrendszer
Processzor
Központi feldolgozó egység
A számítógép „agya”
Vezérlés
Utasítás végrehajtás
(Mikro)processzor integrált áramköröket tartalmaz
Műveletek és az egységek szinkronizálásához órajelet használ
Számítógép architektúrák 45
Memória
Operatív tár
Aktuális műveletekhez szükséges „rövidtávú” memória
Elsődleges tároló, nem háttértár
Címezhető adattároló „rekeszek”
Adatok és utasítások tárolása
Elektronikus működés
Integrált áramkör
Számítógép architektúrák 46
Buszrendszer
Busz (sín): vezetékek egy csoportja, amelyeken digitális jelet lehet továbbítani
Buszrendszer logikai részei
Címbusz: a címek bitsorozatának átvitelét biztosítja
Adatbusz: adatok átviteléért felelős
Vezérlő busz: részegységek működésének összehangolását segítő vezérlő jelek továbbítása
Számítógép architektúrák 47
Processzor Memória I/O interfész
címbusz
adatbusz
vezérlő busz
I/O interfész
A számítógép központi része és a külső egységek (perifériák) közötti adatátvitelre szolgál
A kimeneti/bemeneti eszközök portokhoz kapcsolódnak
A portok címezhetőek (hasonlóan a memóriához)
Az adatátvitel során gyakran puffereket használunk
Szoftveres szinten driverekre van szükség
Számítógép architektúrák 48
Perifériák
Számítógép architektúrák 49
Input Billentyűzet
Egér
Szkenner
Kamera
Output Monitor
Nyomtató
Projektor
Audio rendszer
Tároló Háttértár (HDD, SSD)
CD/DVD/Blu-ray
USB tároló
Memória kártya
Hálózat Ethernet kártya
Wi-Fi kártya
A processzor felépítése és működése
CPU
Regiszterek
Fetch-execute ciklus
RISC / CISC processzorok
Processzor
Központi Feldolgozó EgységCentral 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)
Számítógép architektúrák 51
Végrehajtó egység (EU)
Regiszterek
Kis méretű (flip-flop-szerű) tároló áramkör
Mérete általában a busz szélességével egyenlő
Általában 8-512 bit tárolására alkalmas
Gyors hozzáférésű (elérési idő < 1ns)
Darabszámát a processzor határozza meg (10-100)
Gyakran regisztertömböket alkot
Van nevűk (néha átnevezhetőek)
3 kategória:
Rendszer- , általános célú- és speciális célú regiszter
Számítógép architektúrák 52
Regiszterek
Programszámláló regiszter (PC vagy IP)
A következő utasítás memóriacímét tartalmazza
Az utasítás végrehajtása során átáll (általában) a következő utasítás címére, azaz az aktuális utasítás méretével növekszik
Szekvenciális végrehajtás eszköze
Értékét egyes utasítások is állíthatják (vezérlés átadás)
Vezérlőegységhez (CU) kapcsolódik
Számítógép architektúrák 53
Regiszterek
Utasítás regiszter (IR)
A memóriából beolvasott utasítás műveleti kódját tartalmazza
A vezérlőegységhez kapcsolódik
A CU ez alapján dönti el
milyen műveletet kell végeztetni
milyen adaton kell dolgozni és az hogyan érhető el
A programozó által nem hozzáférhető
Számítógép architektúrák 54
Regiszterek
Akkumulátor (ACC, W, AX)
Általános munka regiszter az ALU-ban
Aritmetikai és logikai műveletek operandusait tartalmazza legtöbbször
Általában az ilyen műveletek eredménye is itt tárolódik
Újabb processzorokban több hasonló regiszter ugyanerre a célra (kevesebb memória művelet)
Általában egész típusú adatokat tartalmaznak
Számítógép architektúrák 55
Regiszterek
Állapot regiszter (SR, FLAGS)
Processzor állapottal, művelet eredményével kapcsolatos jelző/vezérlő biteket tartalmaz
Feltételes vezérlésátadásnál (is) nagyon fontos
Számítógép architektúrák 56
Átvitel (CF)
Nibble átvitel (AF)
Túlcsordulás (OF)
Előjel (SF)
Megszakítási maszk (IF)
Nulla (ZF)
Paritás (PF)
…
Regiszterek
Verem mutató regiszter (SP)
A hardveres rendszerverem használatához
A verem tetejének memóriacímét tartalmazza
Általában a verem előrefelé nő
Általában SP a legutóbb betett elemet címzi (Intel)
Speciális célú regiszter
A „push” és „pop” művelet automatikusan változtatja az SP értékét
Számítógép architektúrák 57
Regiszterek
Címzéssel kapcsolatos speciális regiszterek
Operandusok címének meghatározásánál egy alap címhez képesti relatív cím (eltolás) megadásához használható
Az AU-hoz (BIU-hoz) kapcsolódnak
Tömbök, sztringek és lokális változók esetén illetve memória szegmens kezelésnél hasznos
Például: BP, X, SI, DI, CS, DS, SS, ES
Számítógép architektúrák 58
Regiszterek
Memória cím regiszter (MAR)
Összeköti a rendszer (külső) és belső címbuszt
Azt a címet tartalmazza, amelyhez legközelebb hozzá kell férni (írásra vagy olvasásra)
A címző egység hajtja meg
Címbusz szélességű
Számítógép architektúrák 59
Regiszterek
Memória adat regiszter (MDR)
Összeköti a rendszer (külső) és belső adatbuszt
Azt az adatot tartalmazza
amelyet legközelebb ki kell írni a memóriába vagy
amely legutóbb be lett olvasva a memóriából
Kétirányú regiszter
Adatbusz szélességű
Számítógép architektúrák 60
Aritmetikai és logikai egység
Számítási műveleteket végez
Tartalmaz: fixpontos összeadót, komplemensképzőt, léptető regisztereket, bitenkénti logikai művelet végző, stb. áramköröket
Számítógép architektúrák 61
A operandus B operandus
eredmény
utasítás állapotALU
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ódonMinden műveleti kód elindít egy apró (ROM-bantárolt) mikroprogramot
Számítógép architektúrák 62
Címző egység
Addressing Unit (AU), Address Generation Unit (AGU)
Az utasítások sokféle címzési mód segítségével határozhatják meg hol található az operandus
Az AU az operandus címét állítja elő és helyezi el az MAR-ban
Az utasításban található címet képezi le „fizikai” memóriacímre
Tárolóvédelmi hibák felismerése
Kapcsolat: BIU
Számítógép architektúrák 63
Órajel
Periodikus négyszög hullám
Órajel generátor (oszcillátor) állítja elő
Szinkronizálja az egységek működését
Frekvenciája arányos a CPU által disszipált hővel
Periódusidő nagyobb, mint a jelterjedési idő
1 MHz – 4 GHz
Gyakran változtatható (turbo, powersave)
Egyéb sebesség jellemzők: MIPS, FLOPS
Számítógép architektúrák 64
A CPU működése
Egy művelet sorozat ismételgetése
Fetch-execute ciklus
Órajel szinkronizált
CU vezényel
Végtelen, monoton, gépies ismétlés során
Adatmozgatás
Műveletvégzés
Fontos a regiszterek (PC, IR, SR, ACC, MAR, MDR, stb.) tartalma és annak változása
Számítógép architektúrák 65
Fetch-Execute ciklus
1. Utasítás beolvasásaA 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ásA 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áljaLehet huzalozott vagy mikroprogramozott
Számítógép architektúrák 66
Fetch-Execute ciklus
3. Operandus beolvasásaAz operandus címének meghatározása és onnan beolvasása a megfelelő regiszterbe
4. Művelet végrehajtásapéldául az ALU által, az eredmény egy átmenti regiszterbe kerül
5. Eredmény tárolásregiszterbe vagy memóriacímre
6. Következő utasítás címének meghatározása
Számítógép architektúrák 67
Olvasási ciklus
DIY Calculator architektúra esetén
Számítógép architektúrák 68
C. Maxfield, A. Brown: The Official DIY Calculator Data Book
Írási ciklus
DIY Calculator architektúra esetén
Számítógép architektúrák 69
C. Maxfield, A. Brown: The Official DIY Calculator Data Book
CISC processzor
Komplex utasításkészletű számítógép
Sok, összetett utasítás
Sokféle címzési mód
Változó hosszúságú utasítások
Egy utasítás több gépi ciklust igényel
Mikroprogramotott
Kevés regiszter
Utasítások elérhetik közvetlenül a RAM-ot
Pl.: IA-32, Motorola 68k
Számítógép architektúrák 70
RISC processzor
Csökkentett utasításkészletű számítógép
Kevés, egyszerű utasítás
Kevés címzési mód
Állandó hosszúságú utasítások
Utasítás egy gépi ciklust igényel
Huzalozott vagy mikroprogramotott
Sok regiszter
Csak a Load/Store utasítás éri el a RAM-ot
Pl.: ARM, AVR, PIC
Számítógép architektúrák 71
CISC vs RISC
Példa:A[i] = x-32;
r1: tömb kezdőcíme (A); r2: i címe; r3: x címe
Számítógép architektúrák 72
CISCADD r4, (r1), (r2)
SUB (r4), (r3), 32
RISCLDR r5, (r1)
LDR r6, (r2)
ADD r4, r5, r6
LDR r7, (r3)
SUB r8, r7, 32
STR (r4), r8
eredmény operandus
adat a regiszterben
adat címe a regiszterben
konstansadat
Megszakítási rendszer és input/output
Megszakítás, kivétel
Megszakításkezelés
Input/output
Buszrendszerek, perifériák
Szükségesség
Az általános célú számítógépek fontos képessége, hogy kölcsön hat az I/O eszközökkel (billentyűzet, egér, hálózati interfész, monitor).
Ezek az eszközök „azonnali” választ várnak a processzortól, függetlenül attól mivel foglalkozik éppen.
Váratlanul bekövetkező eseményekre a CPU-nak reagálnia kell.
A megszakítás szolgál a CPU figyelmének felhívására.
Számítógép architektúrák 74
Megszakítás
Speciális jelzés a CPU számára
Egy esemény bekövetkeztét jelzi
Azonnal reagálni kell rá
A „normál” végrehajtást meg kell szakítani
Később tudni kell folytatni
Forrás
Hardver
Processzor
Szoftver
Számítógép architektúrák 75
Megszakítás típusok
Aszinkron
Külső forrásból (például I/O eszköz) származik
Független az aktuálisan végrehajtott utasítástól
Szinkron (másként „kivétel”)
Processzor által kiváltott kivétel
Hiba: „kijavítható” probléma, újra próbálkozás
Elvetés: jelentős, „javíthatatlan” (hardver) hiba
Csapda: pl. nyomkövetés, programozott kivétel (rendszerhívás)
Számítógép architektúrák 76
Megszakítás típusok
Számítógép architektúrák 77
utasítás1
utasítás2
utasítás3
utasítás4
utasítás1
syscall
utasítás3
utasítás4
utasítás1
utasítás2
utasítás3
utasítás4
utasítás1
utasítás2
utasítás3
utasítás4
Aszinkron megszakítás
Hiba
Csapda
Elvetés
Fogalmak
Megszakítási vonal
Egy (vagy több) CPU vezérlő busz vezeték
Megszakítási kérelem (IRQ)
A megszakítások egész számokkal (0-255) azonosíthatók
Lehet prioritásuk
Programozható megszakítás vezérlő (PIC, APIC)
Azonosítja a megszakítás forrását, aktiválja a megszakítási vonalat, kezeli prioritásokat
Számítógép architektúrák 78
Fogalmak
Megszakítási rutin (ISR)
Az a programrész, amely megszakítási kérelem esetén aktiválódik, kezeli a speciális helyzetet
„Hívás nélküli” alprogramhoz hasonlít
Kontextus
Ahhoz, hogy folytatni tudjuk a „normál” végrehajtást a kivételkezelés után először el kell menteni, majd vissza kell állítani az eredeti környezetet, regisztertartalmakat
Számítógép architektúrák 79
Fogalmak
Maszkolás
Egyes megszakítási kérelmek figyelése kikapcsolható
Egyszerre, globálisan a processzorban
Külön-külön, a PIC-ben lévő IMR segítségével
Vannak nem maszkolható megszakítások (NMI)
Nested interrupt („fészkelt megszakítás”)
Megszakítási rutint megszakító újabb IRQ
Megszakítás megszakítása
Számítógép architektúrák 80
Megszakításkezelés
Számítógép architektúrák 81
Utasítás beolvasás
Utasítás dekódolás
Utasítás végrehajtás
Kontextus mentés
Eszköz azonosítás
Rutin (ISR) keresés
Rutin (ISR) végrehajtás
Kontextus visszaállítás
NMI?igen
nem
igen
nem
igen
nem
Maszk tilt?
Megszakítás?
Megszakításkezelési technikák
Vektoros megszakításkezelés
Megszakítási vonal aktiválás
A megszakítás kérő azonosítja magát
Buszrendszeren egyedi kódot/címet küld
ISR címek egy tömbben
Lekérdezéses (polling) megszakításkezelés
Megszakítási vonal aktiválás
A CPU sorozatos lekérdezésekkel kideríti kinek van megszakítási igénye
Számítógép architektúrák 82
Megszakításkezelési technikák
Számítógép architektúrák 83
ISR 1 címe
vekt
or…
ISR n címe
…
…
ISR 1 programkódja
…
ISR n programkódja
…
megszakítás lekérdező
eljárásprogramkódja
…
ISR 1 programkódja
…
ISR n programkódja
…
IRQ n IRQ
Vektoros megszakításkezelés Lekérdezéses megszakításkezelés
Input/Output
Kapcsolat a külvilággal
Hardveres I/O interfészek
Szoftver interfész (device driver)
Perifériás eszközök
Számítógép architektúrák 84
Periféria 1 Periféria 2
Külső buszok
Processzor Memória
Rendszer busz
I/O interfészek
buffer buffer
Input/output interfészek
Összeköttetés a CPU és a perifériák között
Címezhető eszközök
Memóriára leképezett I/O (MMIO)
Portra leképezett I/O (PMIO)
Különböző adatsebesség
Különböző fizikai jelek
Soros illetve párhuzamos átvitel
Az eszközvezérlés nem a CPU feladata
Számítógép architektúrák 85
I/O technikák
Programozott I/O (PIO)
Speciális I/O utasításokkal (in, out)
A program írja le mikor kell a perifériához fordulni (függetlenül annak állapotától)
Utasításonként csak egy szó átvitele az I/O buffer és a CPU regiszterei között
I/O adat és címregiszterek a CPU-ban
Sok CPU időt felemészt az eszközök állapotának sorozatos elkérdezése
Számítógép architektúrák 86
I/O technikák
Megszakítás vezérelt I/O
A periféria megszakításokkal jelez a CPU-nak
Ha van új input vagy
Ha kész van az outputtal
A CPU nem figyel folyamatosan
Közben tud mással foglalkozni
Az adatmozgás a CPU és az I/O modul között történik
Számítógép architektúrák 87
I/O technikák
Direkt memória hozzáférés (DMA)
Külön vezérlő révén közvetlen RAM-I/O kapcsolat (RAM-RAM, RAM-I/O)
A CPU kéri fel a DMA vezérlőt a műveletre
Ha a DMA vezérlő kész van megszakítást kér
CPU nem vesz részt az adatmozgatásban
Blokkos átviteli mód
I/O processzor (IOP)
DMA kiterjesztése nagyobb önállósággalSzámítógép architektúrák 88
Számítógép architektúrák 89
Buszrendszerek
Párhuzamos
ISA
PCI
ATA (ATAPI, UATA, IDE)
VESA Local Bus (VLB)
SCSI
AGP
…
Soros
I2C
PCI Express
Serial ATA
USB
Serial Attached SCSI
FireWire
…
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
Számítógép architektúrák 90
Forrás: en.wikipedia.org/wiki/Conventional_PCI
PCIe busz
Peripheral Component Interconnect Express
Soros belső busz
1 link 1, 2, 4, 8, 16 vagy 32 sávból áll
Átviteli sebesség: 250-63000 MB/s (v5.0)
Fejlesztés: 2003-
Minden eszköznek külön link (nem osztoznak,
switching)
Számítógép architektúrák 91
Forrás: en.wikipedia.org/wiki/PCI_Express
(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
Számítógép architektúrák 92
Forrás: en.wikipedia.org/wiki/Parallel_ATA
SATA busz
Serial ATA
Soros belső busz
Pont-pont kapcsolat
Átviteli sebesség: 150-1969 MB/s (v3.2)
Fejlesztés: 2000-
Hot swapping
HDD, SSD, CD és DVD meghajtó csatlakoztatás
Számítógép architektúrák 93
Forrás: hu.wikipedia.org/wiki/Serial_ATA
USB busz
Universal Serial Bus
Soros külső busz
Plug-and-Play, elosztható (hub)
Átviteli sebesség: 0,18-5000 MB/s (v4.0)
Fejlesztés: 1996-
Csatlakozók: standard-A, standard-B, mini-A, mini-B, micro-A, micro-B
Számítógép architektúrák 94
Forrás: en.wikipedia.org/wiki/USB
Vezérlő hub-ok
Az alaplap fontos chip-jei
Northbridge (memóriavezérlő hub)
Southbridge (I/O vezérlő hub)
Számítógép architektúrák 95
CPU
North-bridge
South-bridge
AGP RAM
BIOS PCI IDE USB LAN I/O
Front-side bus (FSB)
Eszközmeghajtó
Device Driver: szoftver interfész a hardverhez
Eszköztípusok
Karakteres, blokkos, hálózati, egyéb
A programok hardvertől független rendszerhívásokat alkalmaznak
open, read, write, close, …
Az eszközmeghajtók „töltik meg” ezt konkrét hardver specifikus tartalommal
Számítógép architektúrák 96
Adattárolás
Operatív memória
Cache
Háttértárak
Tárolók osztályzása
Írhatóság szempontjábólCsak olvasható, olvasható-írható
Hierarchiabeli helye szerintElsődleges, másodlagos, harmadlagos
Tárolási közeg szerint Félvezető, mágneses, optikai
Adatmegőrzés szerintMegmaradó, nem megmaradó
Elérés szerintSoros elérésű, tetszőleges elérésű
Számítógép architektúrák 98
Elsődleges memória
A processzor és a futó programok által aktívan használt tároló
Gyors elérésű
Nem maradandó memória
Méret erősen korlátos
Ide tartoznak
Regiszterek
Gyorsítótárak
Operatív tár / memória
Számítógép architektúrák 99
Másodlagos memória
Háttértároló
Az elsődleges memória „kiterjesztése”
Nagy tároló kapacitás
Kisebb elérési sebesség
Maradandó tárolás
Ide tartoznak
HDD, SSD
CD-, DVD-meghajtó
Memóriakártya
Számítógép architektúrák 100
Harmadlagos memória
Többnyire eltávolítható adathordozókra épít
Robotikus eszközök csatlakoztatják a kívánt tároló médiumot („wurlitzer”)
Ritka hozzáférés
Óriási tároló kapacitás
Cél hosszú távú archiválás
Ide tartoznak
Mágnesszalagos tárolók
Optikai tárolók
Számítógép architektúrák 101
Félvezető memóriák
Read-Only Memory (ROM)
Gyártás során kerül bele a tartalom, ami később nem változtatható
Tartalmat sokáig megőrzi, tápfeszültség hiányában is
Programmable Read-Only Memory (PROM)
Gyártás után „üres”. Speciális eszközzel egyszer „beégethető” a tartalom
Az írás folyamata lassú (a RAM-hoz képest)
Számítógép architektúrák 102
Félvezető memóriák
Erasable Programmable ROM (EPROM)
Erős UV fénnyel (lassan) törölhető a tartalom
Majd ismét újraírható
Electrically Erasable Programmable ROM (EEPROM)
Elektronikusan, bájtonként törölhető tartalom
Flash memória
Speciális továbbfejlesztett EEPROM
Blokkonként (gyorsabban) törölhetőSzámítógép architektúrák 103
Félvezető memóriák
Random Access Memory (RAM)
Véletlen/közvetlen elérés
Elérési idő nem függ az elhelyezkedéstől
Írható/olvasható tetszőleges számban
Elveszti a tartalmát tápfeszültség hiányában
Nagy írási/olvasási sebesség
Static Random Access Memory (SRAM)
Frissítés nélkül is megtartja a flip-flipokban a tartalmat a tápellátás megszűnéséig (pl. cache)
Számítógép architektúrák 104
Félvezető memóriák
Dynamic Random Access Memory (DRAM)
Rendszeresen frissíteni kell, hogy a kondenzátor révén tárolt információ megmaradjon
SRAM-nál lassabb (pl. operatív tár)
Olyan gyorsan válaszol ahogy tud
Synchronous Dynamic RAM (SDRAM)
Órajellel szinkronizált válasz
Gyorsabb az aszinkron DRAM-nál (pipelineműködés)
Számítógép architektúrák 105
Félvezető memóriák
Double Data Rate (DDR)
Gyorsított SDRAM
Az órajel fel és leszálló élére is szinkronizál
DDR2, DDR3, DDR4
Egyre nagyobb sebesség
Egyre nagyobb adatsűrűség
Egyre kisebb feszültség
Nem kompatibilis DIMM (SDRAM, DDR, DDR2, DDR3, DDR4)
Számítógép architektúrák 106
Gyorsítótár
Egyes eszközök rendszeresen adatot cserélnek
Az eszközök adatátviteli sebessége nagyon eltér
A lassú eszköz miatt a gyors is „lelassul”
Pl. a CPU kb. 10-szer gyorsabb a RAM-nál
CPU cache, GPU cache, Web cache, DNS cache
Megoldási ötletKöztes tároló beiktatása (cache)
Gyorsabb, mint a lassú eszköz (SRAM, közeli)
Magas ára miatt teljesen nem helyettesíti a lassút
Létjogosultság: lokalitási elvek
Számítógép architektúrák 107
Gyorsítótár
Térbeli lokalitás elve
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 isSzekvenciális végrehajtás, tömbök
Időbeli lokalitás elve
Ha egy program hivatkozik egy memóriacímre, akkor nagy valószínűséggel hamarosan ismét hivatkozik ráCiklusok
Számítógép architektúrák 108
Gyorsítótár
Leggyakrabban használt adatok tárolása
Kisebb tárolókapacitás, gyorsabb elérés (SRAM), mint az operatív memória esetén
Átlátszóak a felhasználó számára
Asszociatív (CAM) memóriát tartalmazhat
CPU cache
Többszintű: L1, L2, L3 cache
On-chip vagy off-chip
Számítógép architektúrák 109
Gyorsítótár felépítése
A tárolás egysége a „Sor” (vagy „Blokk”)
A Sorhoz „Tag” (toldalék) és „Flags” mezők
A Tag a Blokk főtárbeli címéhez kötődik
A Blokk a főtár egy részének a másolata
Számítógép architektúrák 110
Cache
Tag F Blokk
128 … DEF
131 … MNO
129 … GHI
RAM
ABC 127
DEF 128
GHI 129
JKL 130
MNO 131
…
CPU
A cache működése
A processzor a szükséges adatot a cache-ben keresi (átadja a tárcímet a cache vezérlőnek)
Ha az adott cím el van tárolva a Tag-ben (cache hit), akkor válaszol a Blokk tartalma alapján
Ha a cím nincs eltárolva (cache miss), akkor beolvassa a megfelelő területet a főtárból, dönt arról, melyik sorba mentse és elmenti (felülírva valamelyik cache sort), majd válaszol a Blokk tartalma alapján
Számítógép architektúrák 111
A cache működése
Asszociativitás: Egy adott memóriacímen lévő adat hány cache sorban tárolódhat.
Közvetlen leképezésű (direct-mapped)
Egy RAM címről csak 1 sorra történhet leképezés.
Teljesen asszociatív (fully associative)
Bármely címről származó adat bármely cache sorban.
Csoport asszociatív (N-way set-associative)
Egy RAM címről néhány sor egyikébe kerül az adat.
Speciális esetek: közvetlen leképezés, teljes associatív
Számítógép architektúrák 112
A cache működése
Helyettesítési szabályok felülírási igény esetén
Véletlengyors, de nem hatékony
Legkevésbé használt (LRU)hatékony, de komplikált
Nem legutóbb használtHatékony és egyszerű
Számítógép architektúrák 113
0 0 1 0
0 3 1 2
A cache működése
Az írás művelete során figyelni kell a főtár és a gyorsítótár tartalmának konzisztenciájára
Megoldások
Közvetlen írás
Visszaírás
Közvetlen írás (write through)
Gyorsítótár írásával egyidejűleg a főtár is íródik
Az írást a cache nem gyorsírja
Számítógép architektúrák 114
A cache működése
Visszaírás (write back)
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árbaMajd megtörténik a sor felülírása az újjal
Többprocesszoros rendszerekben probléma a külön cache-ek miatt. Probléma DMA esetén is.
Számítógép architektúrák 115
A cache működése
Számítógép architektúrák 116
igen
nem
Igény?
Felülírandó sor keresés
Válasz az adattal
nem
igen
igenigen
nem nem
Cache hit? Cache hit?
„Dirty”? „Dirty”?
Alsóbb memória olvasás a
választott sorbaStátusz:
nem „dirty”
Felülírandósor visszaírása
Alsóbb memória olvasás a
választott sorba
Felülírandó sor keresés
Felülírandósor visszaírása
olvasás írás
Új adat írása a választott blokkba
Státusz: „dirty”
A cache jellemzői
A gyorsítótár mérete
A Blokk mérete (pl. 64 byte)
Egy Blokk kikeresésének ideje
Aktualizálási idő (visszaírásnál)
Helyettesítési stratégia (sor felülírásnál)
Találati arány (hit rate)
Általában 90% feletti
Méretfüggő, helyettesítés függő, …
Számítógép architektúrák 117
A címek felépítés
Cím = Tag & Index & Offset
Index: azonosítja a cache sor csoportot (set)
2N csoport esetén N bit
Offset: a bájt pozíciója a blokkban
2S méretű blokk esetén S bit
Tag: a RAM cím további (felső) bitjei
L bites cím esetén L-N-S bit
Példa: Pentium 4, 8kB 4-utas L1 cache, 64B blokk log2(8192/64/4)=5 index bit; log2(64)=6 offset bit; 32-5-6=21 tag bit
Számítógép architektúrák 118
Cím:
• 13 bites címzés• 128B cache méret• csoport asszociatív
(4-utas) cache• 8B blokk méret• „write-back” írás• „nem a legutóbbi”
helyettesítés
• Cache hit? Mi van a címen? Felülírható sor? Kell menteni?Számítógép architektúrák 119
Címzés példa
Tag Val
idD
irty
Re
cen
t Blokk
000 001 010 011 100 101 110 111
1D 1 0 1 2E 13 3D D1 4F FF 01 A2
2E 1 1 0 33 8B CA 4F 89 67 30 12
FA 0 0 0 12 36 77 B6 0C E0 55 75
20 1 1 0 02 00 00 00 43 C0 3E E1
56 1 1 0 FF FF FF FF 24 E4 AA DA
F2 0 0 0 23 43 E4 1A 4D 43 02 35
DC 1 1 0 3E 18 48 45 4C 4C 4F 00
03 1 0 1 48 42 C3 C5 23 40 30 12
… . . . ... ... … ... … … … …
cso
po
rt 0
0
tag index offset
cso
po
rt 0
1
1 1 0 1 1 1 0 0 0 1 0 1 01 1 0 1 1 1 0 0 0 1 0 1 0
Cache hierarchia
Számítógép architektúrák 120
processzor
core
L1utasítás
L1adat
L2
core
L1utasítás
L1adat
L2
L3
processzor
core
L1utasítás
L1adat
L2
core
L1utasítás
L1adat
L2
L3
Fő memória
>10kB
>100kB
>1MB
>1GB
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];
...
Számítógép architektúrák 121
Ha az adat elfér a cache-ben,akkor a program gyorsabb!
Cache hatása a programokra
Sorfolytonos mátrix kezeléseint a[N][M];
Számítógép architektúrák 122
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
Háttértár
Problémák
Az operatív tár nem elég nagy
Kikapcsoláskor a RAM tartalma elvész
Megoldás
Háttértár: lassabb elérés, de nagyobb kapacitás
Tárolási elv
Mágneses: merevlemez (HDD)
Elektronikus: szilárdtest-meghajtó (SSD)
Optikai: CD, DVD, Blu-ray
Számítógép architektúrák 123
Merevlemez
Winchester, Hard Disc Drive (HDD)
Mágnesezhető, forgó lemezeken tárolt adat
Lemezenként 2 író/olvasó fej
Tulajdonságai
Tárolókapacitás: <8TB
Írási/olvasási sebesség: 1MB/s – 100MB/s
Fordulatszám: 5400 – 15000 rpm
Csatoló felület: ATA, SATA, SCSI, USB
Lemez gyorsítótár mérete: 1MB – 64MB
Számítógép architektúrák 124
Adattárolás merevlemezen
A HDD több tároló lemezt tartalmazhat
A lemezek felülete koncentrikus sávokra osztott
Az egymás alatti lemezeken lévő azonos sugarú sávok alkotják a cilindert
A sávok szektorokra vannak osztva
Ez az adattárolás legkisebb egysége
Klaszter a szektorokból álló folytonos terület
Minden író/olvasó fej egyszerre mozog
egy adott pillanatban egy cilinderen helyezkednek el
Számítógép architektúrák 125
Adattárolás merevlemezen
Átlagos hozzáférési idő
Az első bájt (a szektorban) „drága” a többi „olcsó”
Számítógép architektúrák 126
szektorsáv
fej
lemez
𝑇𝑎𝑐𝑐𝑒𝑠𝑠 = 𝑇𝑠𝑒𝑒𝑘 + 𝑇𝑟𝑜𝑡𝑎𝑡𝑖𝑜𝑛 + 𝑇𝑜𝑡ℎ𝑒𝑟
𝑇𝑎𝑐𝑐𝑒𝑠𝑠 ≈ 𝑇𝑠𝑒𝑒𝑘 + 𝑇𝑟𝑜𝑡𝑎𝑡𝑖𝑜𝑛 (≈ 10 𝑚𝑠)
Szektor
Hagyományos szerkezet512 bájtos szektor
Advanced Format (AF)4K native
Számítógép architektúrák 127
512 bájt adat
szektorszektor szektor szektor szektor szektor szektor szektor
rés szinkron cím hibajavító
sáv
4096 bájt adat
Szektor hatása programokra...
#define SIZE 2048
char BUFFER[SIZE];
out=open("output.txt",O_WRONLY);
write(out, BUFFER, SIZE);
close(out);
...
Számítógép architektúrák 128
Szektor méretnél kevesebbet fájlba írni nem hatékony!
Bufferelt adatfolyam
Az output adatfolyamokat gyakran a rendszer buffereli és csak később blokkosan írja ki.
Kevesebb rendszerhívás, kevesebb lemez művelet, gyorsabb program
…
while(i<100000){
fprintf(f,”x”);
sleep(t);
i++;
}
…
Számítógép architektúrák 129
Adatelérés merevlemezen
Hogyan hivatkozható egy terület a HDD-n?
CHScilinder-fej-szektor hármassal (régi)
LBAlogikai blokk címzéssel (lineáris, új)
Konverzió (egyszerű esetben):LBA = (C*Nfej+H)*Nszektor+(S-1)
Lemezvezérlő foglalkozik a logikai és fizikai cím leképezéssel
Számítógép architektúrák 130
Sávok szektorszáma
Régi HDD esetén
Minden sávban azonos számú szektor
Külső szektorok adatsűrűsége sokkal kisebb, mint a belsőké (kihasználatlanság)
Modern HDD esetén
Zone Bit Recording (ZBR)
Szektorok adatsűrűsége közel azonos
Külső sávokban több szektor, mint a belsőkben
Címzés bonyolultabb Számítógép architektúrák 131
SSD
Szilárdtest-meghajtó (Solid State Drive)
Mozgó alkatrész nélküli félvezető memória
Blokkos adatelérés
SATA, SCSI, USB csatlakozás
Előnyei a HDD-vel szemben
Gyorsabb adatelérés
Egyenletes adathozzáférés
Kisebb zaj, fogyasztás és hőtermelés
Mechanikai megbízhatóság
Számítógép architektúrák 132
Háttértár magasabb szinten
Formázás
Alacsony szintű (szektor szerkezet kialakítás)
Magas szintű (fájlrendszer)
Particionálás
HDD kisebb logikai egységre bontása
MBR, GPT kialakítás
Fájlrendszerek
FAT32, NTFS
ext2, ext3, ext4
Számítógép architektúrák 133
MBR
Master Boot Record
LBA 0
Boot kód (pl. GRUB) + Partíciós tábla
Max 4 partíció és egyenként max 2 TB
4 elsődleges partíció
3 elsődleges partíció + 1 kiterjesztett partíció (utóbbin további logikai partíciók lehetnek)
BIOS indítja a betöltőt
a Power On Self Test után
Számítógép architektúrák 134
GPT
GUID Partition Table
LBA 0: MBR megőrzés;
LBA 1: elsődleges GPT fejrész
LBA 2-33: elsődleges GPT partíciós tábla
Utolsó szektorok: biztonsági tartalék
Másodlagos GPT fejrész és partíciós tábla
UEFI szabvány (BIOS lecserélés)
Akár 128 partíció, max lemezméret 9,4 ZB
Számítógép architektúrák 135
FAT fájl rendszer
Számítógép architektúrák 136
Fájlnév Attribútumok Kezdő klaszter
Alma.txt Bla-bla 6
Kutya.txt Bla-bla 10
0 1 2 3 4 5 6 7 8 9 10
8 EOF 7 4 EOF 50 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 ”
Gyökérkönyvtár bejegyzései
File Allocation TableMerevelemez
Linux fájl rendszerek
Pl.: Ext2, Ext3, Ext4
Fájl tárolása
Könyvtár tárolás
Számítógép architektúrák 137
attribútumok mutató fájltartalom
a lemezen
fájl név inode ID
könyvtári bejegyzés inode adat blokk
attribútumok mutatókönyvtár név inode ID
könyvtári bejegyzés inode adat blokk
fájl1 inode ID 1
fájl2 inode ID 2
fájl3 inode ID 3
fájl4 inode ID 4
Linux fájl rendszerek
Könyvtár hierarchia
Számítógép architektúrák 138
könyvtáribejegyzés
inode fájl adat
inode tábla
sys
MBR cilinder csop. cilinder csop. cilinder csop. cilinder csop. cilinder csop. cilinder csop.
partíció
adat szektorok
inode
Számítógép architektúrák 139
attr
ibú
tum
ok
méret
eszköz
felhasználó
csoport
fájl mód
időbélyegek
linkszám
adat
blo
kk m
uta
tók
direkt mutatók(12 db)
simpla indirekt
dupla indirekt
tripla indirekt
inode adat blokkok
RAID
Redundant Array of Independent Discs
Adatelosztás vagy replikálás több lemezen
A technológia célja
Adatbiztonság növelés
Adatátviteli sebesség növelés
Több „szint” (RAID 0-6)
Akár hierarchikusan is (RAID 1+0, RAID 5+0)
Szoftveres vagy hardverrel támogatott megvalósítás
Számítógép architektúrák 140
RAID példák
Számítógép architektúrák 141
A1
A3
A5
A7
A2
A4
A6
A8
RAID 0 (összefűzés)
A1
A2
A3
A4
RAID 1 (tükrözés)
Lemez 1 Lemez 2
Lemez 1 Lemez 2
A1
A2
A3
A4
Fizikai kapacitás: 2 egységLogikai kapacitás: 2 egységSebesség (R/W): 2/2 egységHibatűrés: nincs
Fizikai kapacitás: 2 egységLogikai kapacitás: 1 egységSebesség (R/W): 2/1 egységHibatűrés : van
RAID példák
Számítógép architektúrák 142
Fizikai kapacitás: 3 egységLogikai kapacitás: 2 egységSebesség (R/W): 2/1 egységHibatűrés: van (lassú)
Fizikai kapacitás: 3 egységLogikai kapacitás: 2 egységSebesség (R/W): 2/1 egységHibatűrés : van (gyors)
AP
BP
CP
DP
A1
B1
C1
D1
A2
B2
C2
D2
RAID 4 (paritás lemez)
Lemez 1 Lemez 2 Lemez 3
RAID 5 (forgó paritás)
AP
B2
C2
DP
A1
B1
CP
D1
A2
BP
C1
D2
Lemez 1 Lemez 2 Lemez 3
RAID példák
Számítógép architektúrák 143
RAID 1+0 (tükrözés + összefűzés)
A1
A3
A5
A7
Lemez 1 Lemez 2
A1
A3
A5
A7
Fizikai kapacitás: 4 egységLogikai kapacitás: 2 egységSebesség (R/W): 2/2 egységHibatűrés : van
A2
A4
A6
A8
Lemez 3 Lemez 4
A2
A4
A6
A8
Memória hierarchia
Regiszter
L1 cache
L2 cache
L3 cache
Memória
Lemez
Harmadlagos tár
Számítógép architektúrák 144
ns
s
ms
s
Elérési idő
Memória hierarchia
Regiszter
L1 cache
L2 cache
L3 cache
Memória
Lemez
Harmadlagos tár
Számítógép architektúrák 145
kB
MB
GB
TB
EB
B
Tároló kapacitás
Intel x86 architektúra
Processzor felépítés
Regiszterkészlet
Memóriakezelés
Kezdetek
Az Intel 1976-78 között fejlesztette ki az „új” Intel 8086 névre hallgató processzorát
Később ezt fokozatosan tovább fejlesztették Intel 80186 (1982)
Intel 80286 (1982)
Intel 80386 (1986)
Intel 80486 (1989)
…, a folyamat máig tart
Az új processzorok visszafelé kompatibilisek
Ma a processzorcsaládra x86 néven hivatkozunk
Számítógép architektúrák 147
Memória szegmentáció
A memória logikai részekre van osztva
Kód szegmens
Adat szegmens
Verem szegmens
A címzést külön regiszterek segítik (CS, DS, SS, ES)
Címzés: szegmens kezdőcím + eltolás
Memóriakezelés
Valós-, védett-, virtuális-, hosszú mód
Számítógép architektúrák 148
Memória szegmentáció
Valós mód
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
Számítógép architektúrák 149
Szegmens kezdőcím (16 bit)
Eltolási cím (16 bit)
Lineáris kezdőcím (20 bit)
+
Memória szegmentáció
Védett mód
80386 vezeti be
Korlátozott memóriahozzáférés
Címtér 32 bites (4GB)
Virtuális memória támogatás
Lineáris cím (32) = szegmenscím (32) + offset (16/32)
Lineáris cím lapozás fizikai cím
Virtuális mód (látszólagos valós mód 80386-tól)
Hosszú mód (64 bites, nincs szegmentálás)
Számítógép architektúrák 150
x86 regiszterkészlet
Számítógép architektúrák 151
AH AL
EAX31 15 7 0
EBX
ECX
EDX
ESI SI
EDI DI
EBP BP
ESP SP
CS ESDS FSSS GS
EIP IP
EFLAGS FLAGS
AX
x86 regiszterkészlet
Fő regiszterek (általános célú regiszterek, GPR)
EAX Elsődleges munka regiszter (accumulator),
szorzás, osztás
EBXMunka regiszter, bázis mutató DS-ben
ECXMunka regiszter, (ciklus)számláló
EDXMunka regiszter, input/output, szorzás, osztás
Számítógép architektúrák 152
x86 regiszterkészlet
Index regiszterek (általános célú regiszterek, GPR)
ESI
Sztring műveletek forrás indexe, DS regiszterrel
EDI
Sztring műveletek cél indexe, ES regiszterrel
ESP
Verem tetején lévő elemet címzi, SS regiszterrel
EBP
Lokális változókhoz, paraméterekhez, SS regiszterrel
Számítógép architektúrák 153
x86 regiszterkészlet
Szegmens regiszterek
CS
Kód szegmens kezdőcíme, IP ebben címzi az utasítást
DS
Adat szegmens kezdőcíme (statikus változók)
SS
Verem szegmens kezdőcíme, ESP és EBP használja
ES, FS, GS
Extra adat szegmens, EDI alap szegmense az ES
Számítógép architektúrák 154
x86 regiszterkészlet
EFLAGS regiszter
Állapot bitek
Vezérlő bitek
Rendszer bitek
Számítógép architektúrák 155
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
x86 regiszterkészlet
Utasítás számláló
IP (Instruction pointer)
CS regiszter révén a kód szegmensben található utasításokat címzi
Minden „fetch-execute” ciklus során inkrementálódik az adott utasítás hosszával (kivéve vezérlésátadás)
Egyéb regiszterek
Vannak további működést segítő regiszterek
Programozó elől rejtettek
Számítógép architektúrák 156
x87 regiszterkészlet
Lebegőpontos egység (matematikai társprocesszor)
8 darab 64 (80) bites regiszter (ST(0)-ST(7))
Veremszerű működés
Dupla pontosságú lebegőpontos reprezentáció
Regiszterenként 2 további bit
00 érvényes, 01 nulla, 10 speciális (Inf, NaN), 11 üres
16 bites állapot regiszter (pl. OE, UE, ZE, TOS, B, DE)
16 bites vezérlő regiszter (pl. RC, PC)
48 bites programszámláló és adat mutatóSzámítógép architektúrák 157
Input-Output
Portra leképezett I/O (PMIO)
16 bites I/O címek (0h-FFFFh)
Külön utasítások (in, ins, out, outs, stb.)
Egy eszközhöz több port is tartozhat
Adat, Utasítás, Állapot
I/O porton elérhető fontosabb eszközök:
DMA vezérlő, programozható megszakítás kezelő (8259A), időzítő (8254), billentyűzet (8042), valós idejű óra, matematikai társprocesszor, PATA vezérlő, stb.
Linux: /proc/ioports
Számítógép architektúrák 158
Modern architektúrák
Futószalag végrehajtás
Párhuzamos végrehajtás
Szuperskalár és vektor processzorok
„Klasszikus” architektúrák
In-order (soros) végrehajtás (Neumann)
A „hagyományos” architektúrán alapuló rendszerek teljesítmény növelésének lehetőségei
CPU órajel frekvencia növelés
Társprocesszor alkalmazás (FPU)
Közvetlen memória hozzáférés (DMA)
Nagyobb szóméret (nagy címtér, nagy regiszter)
Gyorsítótár (cache) használat
Gyorsabb buszrendszer Számítógép architektúrák 160
Dinamikus órajel szabályozás
Az órajel frekvencia növelés több hő termelését és magasabb fogyasztást jelent (korlátozó tényező)
Intel SpeedStep és AMD PowerNow!Ha a mag „üresjáratban” van az órajele és a mag feszültsége csökken (energiatakarékosság)
Intel Turbo Boost és AMD Turbo CoreEgy mag kaphat gyorsabb órajelet ha a többi mag nem terhelt (azaz határon belüli a hőtermelés)
Számítógép architektúrák 161
Lebegő pontos egység
Floating-Point Unit (FPU), matematikai társproc.
Pl. Intel x87
Az egész és a lebegőpontos műveletek architekturálisan eltérnek
Régen társprocesszor, ma CPU-ba integrált
Külön verem struktúrájú regiszter készlet
ST(0)-ST(7)
Külön utasításkészlet
Pl. FADD, FMUL, FDIV, FSQRT, FSIN, …
Számítógép architektúrák 162
DMA és Cache
Közvetlen memória hozzáférés (DMA)
Nem minden memóriaműveletet irányít a CPU
CPU nélküli közvetlen RAM-RAM vagy RAM-I/O blokkos adatmozgatás
Gyorsítótár (cache)
Átmeneti tároló a CPU és a RAM között
Legutóbb/gyakran használt adatokról másolat tárolás
Gyors elérési idő
Kis tároló kapacitás
Számítógép architektúrák 163
x86-64 architektúra
64 bites általános célú regiszterek (rax, rbx, rcx, rdx, rbp, rsp, rip, rsi, rdi, r8-r15)
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
Long mode, Legacy mode (real, protected, virtual)
Számítógép architektúrák 164
rax / r8al / r8beax / r8d ax / r8w
Párhuzamosság
Bit szintű párhuzamosságAz 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ágTöbb folyamat fut egyszerre (multiprogamozott OS)
Számítógép architektúrák 165
Flynn-féle osztályozás
Osztályzás párhuzamosság szempontjából
SISD (Single Instruction Single Data)
pl. klasszikus korai egyprocesszoros PC-k
SIMD (Single Instruction Multiple Data)
pl. vektroprocesszorok, GPU
MISD (Multiple Instruction Single Data)
pl. hibatűrő rendszerek (űrrepülőgép)
MIMD (Multiple Instruction Multiple Data)
pl. többmagos- és szuperskalár processzorok
Számítógép architektúrák 166
Utasítás-szintű párhuzamosság
Utasítás-szintű párhuzamosság (ILP) technikái
Futószalag-elvű végrehajtás (pipeline)
Sorrenden kívüli végrehajtás (OoOE)
Regiszter átnevezés
Spekulatív végrehajtás
Elágazás becslés
Szuperskalár végrehajtás
Nagyon hosszú utasításszó (VLIW) használat
Számítógép architektúrák 167
Egy utasítás végrehajtás
Fetch-execute ciklus
Minden egyes utasítás végrehajtása több fázisra bontható:
Utasítás beolvasás (IF)
Utasítás dekódolás (ID)
Operandus beolvasás (OF)
Végrehajtás (EX)
Eredmény visszaírás (WB)
Egy utasítás több órajel alatt hajtódik végre
Számítógép architektúrák 168
Pipelining
Futószalag-elvű utasítás végrehajtás
Több utasítás végrehajtása is folyamatban lehet egyszerre, csak legyenek különböző fázisban
Egyes processzoroknál akár 30 fázis/utasítás
Egy utasítás végrehajtási ideje nem csökken
Viszont az egységnyi idő alatt végrehajtott utasítások száma (áteresztőképesség, throughput) növekszik
A program gyorsabban lefuthat
Számítógép architektúrák 169
Pipelining
Számítógép architektúrák 170
CPU idő[órajel]
pipeline fázis
IF ID OF EX WB
1. utasítás 1
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ásElméleti áteresztőképesség: 1 utasítás / órajel
Hazárd
A Neumann-féle szekvenciális végrehajtási elv
feltételezi, hogy minden utasítás végrehajtás befejeződik a következő megkezdése előtt
Pipeline processzorokra ez nem igaz
Hazárd: az a helyzet amikor ez problémát jelent
Típusai
Adat hazárd
Strukturális hazárd
Vezérlési hazárd
Számítógép architektúrák 171
Adat hazárd
Végrehajtás alatt álló utasítások ugyanazt az adatot használják/módosítják
RAW (Read After Write, adat függőség)• R3 R1 + R2• R4 R3 + R2
WAR (Write After Read, név függőség)• R3 R1 + R2• R2 R1 + R4
WAW (Write After Write, név függőség)• R3 R1 + R2• R3 R4 + R1
Számítógép architektúrák 172
Strukturális és vezérlési hazárd
Strukturális hazárd
Ha a processzor hardvere nem képes az utasításokat egyszerre végrehajtani
Pl. az egyik utasítás IF fázisban a másik OF fázisban egyszerre címezné a memóriát
Vezérlési hazárd
Elágazásnál a processzor nem tudja előre hol kell folytatni a vezérlést, azaz melyik utasítást olvassa be a futószalagra
Számítógép architektúrák 173
Hazárdok kezelése
Adat hazárd kezelésePipeline buborék
Operandus/eredmény továbbítás (bypassing)
Sorrenden kívüli végrehajtás (OoOE)
Regiszter átnevezés
Strukturális hazárdPipeline buborék
Vezérlési hazárdPipeline buborék
Elágazásbecslés
Számítógép architektúrák 174
Pipeline buborék
Az IF fázis után ha a vezérlő egység hazárdot észlel beszúr egy NOP utasítást, azaz késlelteti a következő utasítás futószalagra helyezését
Közben az utasítás előállítja az eredményt, amit a következő utasítás a késleltetés után már be tud olvasni
Buborék („üresjárat”) a pipline-ban
Nő a futásidő (de még mindig gyorsabb, mint
pipeline nélkül)
Számítógép architektúrák 175
Pipeline buborék
Számítógép architektúrák 176
CPU idő[órajel]
pipeline fázis
IF ID OF EX WB
1. ADD r1,r2,r3
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
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
Számítógép architektúrák 177
CPU idő[órajel]
pipeline fázis
IF ID OF EX WB
1. ADD r1,r2,r3
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
Sorrenden kívüli végrehajtás
Out-of-Order Execution (OoOE)
Az utasítások nem a programban szereplő felírás sorrendjében hajtódnak végre
Az az utasítás hajtódik végre először amelyiknek hamarabb állnak elő a bemeneti adatai
A processzor próbálja elkerülni az üresjáratot az utasítások átrendezésével
Hardveresen gyorsított újrafordítás
Viszonylag nagy utasítás ablak
Számítógép architektúrák 178
Sorrenden kívüli végrehajtás
Utasítás beolvasása a memóriából
Az utasítás beáll egy utasítás sorba és vár
Az utasítássorból az távozik először, akinek elérhetőek az input operandusai
A távozó utasítás végrehajtásra kerül
Az eredmény bekerül egy eredmény sorba, vár
Az adott utasítás eredménye csak akkor kerül ki a sorból (és íródik be a regiszterfájlba), ha minden idősebb utasítás eredménye már kikerült
Számítógép architektúrák 179
Regiszter átnevezés
A név függőség (WAR és WAW hazárd) esetén egy utasítás eredménye felülírna egy még szükséges értéket, mivel nincs korlátlan számú „üres” regiszter
A regiszter átnevezés révén ez elkerülhető
Az utasításkészlet az architekturális regiszterfájl elemeire hivatkozik
Ezt egy speciális áramkör leképezi egy nagyobb méretű hardveres regiszterfájlra
Számítógép architektúrák 180
Regiszter átnevezés
Számítógép architektúrák 181
r0r1r2r3r4r5r6r7
hw1hw2hw3hw4hw5hw6hw7hw8hw9hw10hw11hw12
átnevező logika
r3 hw8
ADD hw3, hw1, hw2LDR hw4, [hw3]SUB hw8, hw5, hw6STR [hw7], hw8
ADD hw3, hw1, hw2SUB hw8, hw5, hw6LDR hw4, [hw3]STR [hw7], hw8
Arc
hit
ektu
rális
regi
szte
rek
Hard
veres regiszterek
WAR hazárd
Eredeti kód: Átnevezés utáni kód: Átrendezés utáni kód:
WAR hazárd mentes Hazárd mentesRAW hazárd
ADD r3, r1, r2LDR r4, [r3]SUB r3, r5, r6STR [r7], r3
Spekulatív végrehajtás
Olyan műveletek végrehajtása, amely lehet hogy nem is szükséges
Ha később kiderül, hogy a művelet nem volt szükséges, akkor az eredményt eldobjuk
Nincs üresjárat pipeline processzor esetén
Változatok
Mohó végrehajtás (pl. elágazásnál mindkét ág
végrehajtása, ha kiderül melyik szükséges azt megtartjuk) Jósló végrehajtás (pl. elágazás becslés, annak az ágnak a
végrehajtása, amely esélyesebb)
Számítógép architektúrák 182
Elágazásbecslés
Feltételes ugró utasításnál melyik a következő utasítás, amit be kell tenni a pipeline-ba?
Külön áramkör próbálja megbecsülni melyik ágat kell majd végrehajtani
Elkezdődik a jósolt ág végrehajtása
Ha kiderül, hogy a jóslat hibás a műveletek eredménye visszavonódik, egyébként időt spóroltunk (nem kellett várakozni)
A pipeline hosszával (akár 30 is lehet) nő az igény a jó elágazásbecslésre
Számítógép architektúrák 183
Szuperskalár processzorok
Órajelenként több utasítás hajtódik végre
Egy processzor magban több végrehajtási egység
Számítógép architektúrák 184
CPU idő[órajel]
pipeline fázisIF ID OF EX WB
1.utasítás 1utasítás 2
2.utasítás 3 utasítás 4
utasítás 1utasítás 2
3.utasítás 5utasítás 6
utasítás 3utasítás 4
utasítás 1utasítás 2
4.utasítás 7utasítás 8
utasítás 5utasítás 6
utasítás 3utasítás 4
utasítás 1utasítás 2
5.utasítás 9
utasítás 10utasítás 7utasítás 8
utasítás 5utasítás 6
utasítás 3utasítás 4
utasítás 1utasítás 2
Szuperskalár processzorok
ILP és OoOE
Utasítás ablak
Előre „látható” utasítások sora
Független utasítások keresésének színtere
Nagyobb ablakméret gyorsít
Futtatható normál szekvenciális program is
A megfelelő fordítás javíthatja viszont a hatékonyságot, növelheti az áteresztőképességet
Számítógép architektúrák 185
Vektor processzorok
A CPU egy utasítást hajt végre egyszerre adatok egydimenziós „tömbjén” (SIMD)
Nagy méretű regiszterek használata (több önálló adatot is tárol egyszerre)
Újabb utasítások bevezetése ezek kezelésére
PéldákMMX (Intel)
3DNow! (AMD)
SSE
AVX
Számítógép architektúrák 186
Vektor processzorok
Skalár processzor logikaIsmé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 logikaOlvasd be az utasítást!
Olvasd be ezt a 10 és azt a 10 számot!
Add össze őket egyszerre!
Mentsd el az eredményeket!
Számítógép architektúrák 187
Vektor processzorok
MultiMedia eXtension (MMX)
64 bites regiszter (int: 1x64, 2x32, 4x16, 8x8)
8 darab (MM0-MM7)
Alias-ok FPU regiszterekre (konkurenciát okoz)
3DNow! (AMD továbbfejlesztés) float-ot is használ
Streaming SIMD Extensions (SSE)
128 bites regiszter (float: 4x32)
8 vagy 16 darab (XMM0-XMM15)
70 új utasítás
Számítógép architektúrák 188
Vektor processzorok
SSE2
128 bites regiszter (float: 2x64, 4x32; int: 2x64, 4x32, 8x16, 16x8)
SSE3, SSE4
Újabb utasítások (+13, +47)
Advanced Vector eXtensions (AVX)
256 bites regiszter (float)
8 vagy 16 darab (YMM0-YMM15)
Számítógép architektúrák 189
Vektor processzorok
AVX2
int és float adatokra is
Új utasítások
AVX-512
512 bites regiszter (int, float)
32 darab (ZMM0-ZMM31)
Számítógép architektúrák 190
ZMM0 YMM0 XMM0 MM0
64 bit128 bit256 bit512 bitMMXSSEAVXAVX-512
Vektor processzorok
2db 32 bites előjeles egész összeadása
Túlcsordulás jelzés: státusz regiszter bitek (OF, CF)
4*2db 8 bites előjeles egész összeadása
Túlcsordulás jelzés: telítési aritmetikai mód
Számítógép architektúrák 191
0x77 0x35 0x74 0x00+
0x3B 0x02 0x33 0x76=
0xB2 0x37 0xC7 0x76
0x77 0x35 0x74 0x00+
0x3B 0x02 0x33 0x76=
0x7F 0x37 0x7F 0x76
OF=1
2 000 000 000+
989 999 990=
-1 304 967 306
119 53 116 0+
59 2 51 118=
127 55 127 118
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];
Számítógép architektúrák 192
N = 5;x = {0,1,2,3,4};y = {5,6,7,8,9};z = {9,7,5,3,1};
VLIW processzorok
Very Large Instruction Word
Egy „utasítás” (ún. köteg) több kisebb, de egyszerre végrehajtható utasítást tartalmaz
Olyan speciálisan fordított programot igényel, amely explicit módon jelzi a párhuzamosan végrehajtható utasításokat
Szuperskalár ILP és OoOE
Egyszerűbb hardver, bonyolultabb fordító
Intel: Explicitly Parallel Instruction Computing
Számítógép architektúrák 193
VLIW példa
Kiszámítandó: (x-y)*(x+y)/(z*z*8)
x értéke r1-ben, y értéke r2-ben, z értéke r3-ban
Számítógép architektúrák 194
SUB r4, r1, r2 ADD r5, r1, r2 MUL r7, r3, r3
MUL r6, r4, r5 ASR r8, r7, #3 NOP
DIV r9, r6, r8 NOP NOP
SUB r4, r1, r2
ADD r5, r1, r2
MUL r6, r4, r5
MUL r7, r3, r3
ASL r8, r7, #3
DIV r9, r6, r8
(𝑥 − 𝑦)(𝑥 + 𝑦)
8𝑧2
Skalár megoldás (6 utasítás)
VLIW megoldás(3 utasítás)
1.
2.
3.
4.
5.
6.
IDŐ IF ID OF EX WB
1. A
2. B A
3. C B A
4. C B A A A
5. C B B B A
6. C C C B
7. C
VLIW vs Szuperskalár
Érvek a VLIW mellett
Egyszerű hardver
Rövidebb órajel ciklus, gyorsabb működés
Nagyobb végrehajtási egység sűrűség a chipen
Érvek a VLIW ellen
Lassú fordítás speciális fordítóval
Nem portolható programok (szoftver inkompatibilitás)
Nagyobb program méret a RAMban (NOP-ok miatt)
Számítógép architektúrák 195
Ciklus „kigöngyölés”
Segítségével hatékonyabbá tehető a program szuperskalár, vektor és VLIW processzor esetén
Könnyebb független utasításokat találni.
Kevesebb ciklusszervezési lépés
Számítógép architektúrák 196
for(i=0;i<100;i++)
a[i]=b[i]+c[i];
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];
}
Hagyományos ciklus Kigöngyölt ciklus
Többmagos processzorok
Egy integrált áramköri lapon több önálló feldolgozó egység kap helyet
N mag esetén jobb teljesítmény és kisebb fogyasztás mint N darab egymagos CPU esetén
Általában saját L1 (esetleg L2) cache, de közös L3
Cache koherencia probléma
Párhuzamos szál/folyamat futtatás (MIMD)
Taszk-szintű párhuzamosság (pl. Java Thread)
Az operációs rendszernek támogatnia kell
Számítógép architektúrák 197
Hyper-threading
Az Intel SMT (Simultaneous MultiThreading) megvalósítása
Több szál kezelése magon belülTöbb „állapottároló” processzor elem
Egy „végrehajtó” elem
Ha egy szálnak várnia kell, addig fusson a másikElkerülve a pipeline buborékok alkalmazását
Minden „fizikai” mag két „logikai” magként viselkedik
Az operációs rendszer támogatás fontos
Számítógép architektúrák 198
Többprocesszoros rendszerek
Számítógép rendszer több processzorral
Megosztott (shared) vagy szétosztott (distributed) memória
Többmagos processzor: speciális megosztott memóriás többprocesszoros rendszer
Programozás
OpenMP (shared memory model)
Open MPI (message passing)
OGE / SGE (cluster computing)
Számítógép architektúrák 199
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ő
Számítógép architektúrák 200
CPU
RAM
busz
cso
mó
po
nt
1
CPU
RAM
busz
cso
mó
po
nt
2
összekötteté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
𝑆 𝑁 =𝑇1
𝑇𝑁=
1
𝐴+1
𝑁(1−𝐴)
ahol S a gyorsulás, T a futásidő és A a futásidő soros végrehajtású hányada0 ≤ A ≤ 1
Számítógép architektúrák 201
processzor szám (N)
gyo
rsu
lás
(S)
A=0,1
A=0,2
A=0,5
Virtualizáció
Egy hardveren egyszerre több működő operációs rendszerEgy gazda gép (host)
Több vendég (guest)
TípusaiHosztolt virtualizáció
Natív virtualizáció
Hypervisor (VMM)Hyper-V, Vmware, VirtualBox
Hardveres támogatás (VT-x, AMD-V)
Számítógép architektúrák 202
Hardver
Hypervisor
OS OS OS
OS
Hardver
Hypervisor
OS OS OS
Hosztolt virtualizáció
Natív virtualizáció
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, HDMISzámítógép architektúrák 203
Általános célú GPU
General-Purpose GPU (GPGPU)
A GPU átvesz számításokat a CPU-tól
Programozás
OpenCL
CUDA
MATLAB
Accelerated Processing Unit (APU)
CPU és GPU elemekből felépülő processzor
Számítógép architektúrák 204
FPGA
Field-Programmable Gate Array
Programozható logikai áramkör
Újrakonfigurálható rendszer
Speciális nyelvek: VHDL, Verilog
Természeténél fogva párhuzamos működés
Létezik processzorba integrált FPGA
Szoft-processzor
FPGA-n implementált processzor architektúra
Számítógép architektúrák 205
Intel X86 történelem &további architektúrák
Az Intel processzorok fejlődése
Más architektúrák
HPC
Főbb architektúra családok
Intel X86
8086, 80386, Pentium, Pentium 4, Core i7, Core i9
Motorola 68000
MIPS
Transmeta
PowerPC
ARM
Microchip PIC
AVR
Számítógép architektúrák 207
MCU
CPU
Intel 8086
Megjelenési év 1978
16 bites regiszterek
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ásmov ax, [di] ;from the address in di to ax
Számítógép architektúrák 208
Intel 80386
Megjelenési év 1986
32 bites regiszterek
4GB-os címtér
12-40 MHz órajel
1500-1000nm technológia
275 000 – 855 000 tranzisztor
132 tűs PGA tokozás
Cache, virtuális memória kezelés, pipeline
Számítógép architektúrák 209
Intel Pentium
Megjelenési év 1993
32 bites regiszterek
4GB-os címtér
60-300 MHz órajel
800-250nm technológia
3 100 000 – 4 500 000 tranzisztor
273 tűs Socket 4; 321 tűs Socket 7 aljzat
Szuperskalár, MMX, L2 cache, integrált FPU
Számítógép architektúrák 210
Intel Pentium 4
Megjelenési év 2000
32 bites regiszterek
Mikroarchitektúra: NetBurst
1300-3800 MHz órajel
180-65nm technológia
42 – 188 millió tranzisztor
Socket 423 vagy Socket 478 aljzat
SSE3, 20-31 szintű futószalag, elágazásbecslés, HyperThread
Számítógép architektúrák 211
Intel Core i7
Megjelenési év 2008
64 bites regiszterek (x86-64)
Mikroarchitektúra: Nehalem, Sandy Bridge, IvyBridge, Haswell, Broadwell, …
45-14nm technológia (780-1400 millió tranzisztor)
2-6 mag
LGA aljzat (1000-2000 kontaktus)
L3 cache, integrált GPU, AVX-512, integrált NorthBridge
Számítógép architektúrák 212
Intel Core i9
Megjelenési év 2017
64 bites regiszterek (x86-64)
Mikroarchitektúra: Skylake
14nm technológia
10-18 mag
FCLGA aljzat (2066 kontaktus)
13-24MB L3 cache, Virtual Machine eXtensions, Turbo Boost Max 3.0 (4,5GHz), AVX-512, HT, DMI 3.0, DDR4
Számítógép architektúrák 213
Moore törvény
A processzorok tranzisztorszáma körülbelülkét évente megduplázódik
Közel vagyunk a határhoz (kb. 2025)
az atomi méretek miatt
Számítógép architektúrák 214
8086i186i286
i386
i486Pentium
Pentium III
Pentium 4
Core 2 Duo
Core i7 Haswell
Core i9
1,E+04
1,E+05
1,E+06
1,E+07
1,E+08
1,E+09
1,E+10
1975 1985 1995 2005 2015 2025
Moore törvénye
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ársprocesszorSzámítógép architektúrák 215
Motorola 68000
Régi (1979), de élő CISC 16/32 bites Memory-mapped I/O 14 címzési mód, 5 adattípus, 56 utasítás 7 szintű megszakítási rendszer Alkalmazás: Apple Macintosh, Sega Mega Drive,
Comodore Amiga, SG és Sun munkaállomás, PLC
MOVE.W (A1), D1 ;move 2 bytes from the
address stored in A1 to D1
Számítógép architektúrák 216
MIPS
RISC 32/64 bites 5 fokozatú pipeline végrehajtás OoOE, SIMD, szuperskalár több szintű cache Alkalmazás: PlayStation 2 és Nintendo 64
játékkonzolok, CISCO routerek,
lw $t1, ($t0) #move 2 bytes from the address
stored in t0 to t1
Számítógép architektúrák 217
Transmeta Crusoe
Alacsony fogyasztás Szoftveres ISAX86 kompatibilitásAkár Java bájtkód futtatás
VLIW (128bit) Megjelenés: 2000 Többszintű cache Utód: Efficeon Alkalmazás: tablet-ek, laptop-ok
Számítógép architektúrák 218
PowerPC
Fejlesztő: Apple+IBM+Motorola
RISC
32/64 bites
Szuperskalár
Futásidőben állítható little-endian/big-endianbájtsorrend
Alkalmazás: Xbox 360, Nintendo Wiili 3, 0(5) ;move data from the address stored
in register 5 to register 3
Számítógép architektúrák 219
ARM
RISC 32/64 bites Akár 13 fokozatú pipeline, SIMD, szuperskalár Prioritásos megszakításkezelés Egységes 32 bites utasítások Feltételes utasítás-végrehajtás (nincs elágazásbecslés)
Alkalmazás: Raspberry Pi, iPhone 6 és egyéb okostelefonok, (2013-ban 10 milliárd új CPU)
LDR R8, [R0] ;move data from the address
stored in R0 to R8
Számítógép architektúrák 220
Microchip PIC
Mikrokontroller (Módosított) Harvard architektúra RISC 8/12/14/16 bites 1 általános munkaregiszter (W) Nincs különbség adatmemória és regiszter közöttPl.: a PC és egyéb regiszterek memóriára vetítve
MOVLW d’29’ ;move decimal 29 into W
Számítógép architektúrák 221
Atmel AVR
Mikrokontroller (Módosított) Harvard architektúra RISC 8/32 bites 32 általános 8 bites munkaregiszter (R0-R31) Saját beépített memória (SRAM, Flash)Címtér: regiszterfájl + memória
Alkalmazás: Arduino
ldi r16, 0xF1 ;load hexadecimal 0xF1 to r16
Számítógép architektúrák 222
High-Performance Computing
HPC - Top 1 Magyarországon (2015)
Leo (Szilárd Leo után)
Debrecen, DE Kassai úti campus
197,2 TFLOPS számítási kapacitás
462 Intel Xeon E5-2650 (2.6GHz)
3696 mag
10500 GB memória
Kb 8000 TB háttértár
2 000 000 000 HUF
Top500: 308. helyezés
Számítógép architektúrák 223
High-Performance Computing
HPC - TOP 1 (2015) (2018 Q4: TOP 4)
Tienhe-2 (Tejút 2)
Kína, Guangzhou
33,86 PFLOPS számítási kapacitás
32 000 Intel Xeon (2.2GHz) + 48 000 Xeon Phi
3 120 000 mag
1 375 000 GB memória
12 400 000 TB háttértár
390 000 000 USD
17,6 MW fogyasztás (+6,4MW a hűtőrendszer)
Számítógép architektúrák 224
A programozás és az operációs rendszer
Rendszerhívás
Folyamatok
Szignál
Ütemezés
Virtuális memória
Duál-módú működés
Kernel mód
Magas CPU jogosultság
A processzor minden utasítást végre tud hajtani
Minden memóriarekesz megcímezhető
User mód
Alacsony CPU jogosultság
Processzor korlátozott utasításkészletet használ
Nem minden memóriarekesz hozzáférhető
Számítógép architektúrák 226
Rendszerhívás
Interfész a felhasználói program és az operációs rendszer kernel között
A program egy szolgáltatást igényelhet az operációs rendszer kerneltől
Tipikus megvalósítás szoftver interrupt-tal
Kernel módú működés
PéldáulFolyamatok kezelése
Fájlok kezelése
Eszközök kezelése
Számítógép architektúrák 227
Rendszerhívás
Példa:
Egy USB meghajtón lévő file írása
Saját C program
fprintf() standard könyvtári függvény
write rendszerhívás
USB driver
USB drive
Számítógép architektúrák 228
Szoftver
Felhasználói program
Kernel
Hardver
Könyvtári függvény
Rendszerhívás
Eszköz meghajtó
Hardver eszköz
Folyamat
Process, processzus
Végrehajtás alatt álló program
Erőforrásokkal rendelkezik
CPU-idő, memória, állományok, I/O eszközök
A folyamatokhoz kapcsolódó információkat a folyamatvezérlő blokk (PCB) tartalmazza
Kommunikálhatnak egymással
Inter-process communication (IPC)
Számítógép architektúrák 229
Folyamat
Multi-programozott környezetben egynél több folyamat is lehet egyszerre
Egyedi azonosítóval rendelkezik (PID)
Minden folyamatnak egy szülő- és több gyermek folyamata lehet
Egy vagy több szálból állhat a folyamat
Különböző állapotokban lehetnek
Az állapotok között különböző állapotátmenetek
Számítógép architektúrák 230
Folyamat ütemezés
Multi-programozott környezet (több folyamat)
Ütemező: választ a futásra kész folyamatok közül, ki kapja meg a CPU-t
Algoritmusok: FCFS, RR, SJF, EDF
Preemptív ütemezés
Pl. hardveres időzítő lejár és megszakítást kér
Aktuális folyamat megszakad, majd aktiválódik az ütemező kódja
Választ egy folyamatot, beállítja az időzítőt és átadja a vezérlést a választott folyamatnak (PCB-t módosít).
Számítógép architektúrák 231
Folyamat állapotátmenetek
Számítógép architektúrák 232
Futásra készfelfüggesztett
Várakozófelfüggesztett
Futásra kész
Futó
Új Befejezett
Várakozó
kilapozás belapozás kilapozás belapozás
ütemezés
időtúlfutás
eseményrevárás
esemény bekövetkezés
op
eratív mem
ória
lapo
zó file
befogadás
leállás
Folyamatok közötti kommunikáció
Néha a folyamatoknak szükségük van információcserére egymás között
Fájl: több folyamat által közösen használt fájl
Pipe: pl. input/output átirányítás
Szignál: értesítés eseményről bekövetkeztéről
Szemafor: osztott erőforrás szinkronizációjához
Shared memory: közösen használt RAM terület
Socket: hálózati protokollokon keresztül
…Számítógép architektúrák 233
Szignál
Egy folyamatnak küldött jelzés
Esemény bekövetkeztét jelzi, aszinkron módon
Üzenet/adat csere nincs
Ha egy folyamat kap egy szignált a normál működés megszakad végrehajtódik a definiált szignálkezelő kód, majd a folyamat folytatódik
Gyakori szignálok:SIGINT (2), SIGKILL (9), SIGALRM (14), SIGTERM (15), SIGCHLD (18), SIGSTOP (23), SIGCONT (25)
Számítógép architektúrák 234
Virtuális memória
A fizikai memória korlátainak transzparens átlépését teszi lehetővé a háttértár segítségével
Fizikai memória keretekre osztva
Logikai memória lapokra osztva (fix méret: 4kB)
Külön virtuális- és fizikai címzés
Virtuális cím leképezése fizikai címre: laptábla
A nem használt lapok kilapozhatóak a HDD-re
A Memory Management Unit (MMU) irányít
Számítógép architektúrák 235
Virtuális memória
Hivatkozás RAM-ban nem lévő lapra (lap hiba)
Lapcsere szükséges
Lapcserélési stratégia fontos (FIFO, LRU, …)
HDD elérés ideje kb. 100 000-szerese a RAM elérési időnek
Gyakori lapozás lassítja a programot
Megvalósítás
Linux: swap partíció
Windows: C:\pagefile.sys fájl
Számítógép architektúrák 236
Virtuális memória kezelése
1. CPU logikai memória igény (lap# + offset).
2. Laptábla ellenőrzés: ha a lap a RAM-ban folytasd a 9. lépésnél, különben 3. lépésnél!
3. Válassz a RAM-ban egy keretet a beolvasáshoz!
4. Szükség esetén indítsd el a keretben lévő lap kiírását a HDD-re, majd indítsd el a szükséges lap beolvasását a keretbe!
5. Közben a folyamat várakozó állapotba kerül, az ütemező indítson egy futásra kész folyamatot!
Számítógép architektúrák 237
Virtuális memória kezelése
6. A háttérben a DMA vezérlő (kiírja) beolvassa a RAM-ba a HDD-ről a lapot és ha kész küld egy „I/O kész” megszakítást.
7. A folyamat futásra kész állapotba kerül.
8. Amint az ütemező újra futóvá teszi a folyamatot ismételd meg a memória igényt!
9. A laptábla alapján fizikai cím (keret# + offset) előáll. A RAM válaszol a keresett adattal.
Számítógép architektúrák 238
Számítógép architektúrák 239
0 1 41 1 22 0 -3 0 -4 1 15 0 -6 1 57 0 -8 0 -9 0 -
virtuális címtér (folyamat A)
laptábla(folyamat A)
0 A0
1 A1
2 A2
3 A3
4 A4
5 A5
6 A6
7 A7
8 A8
9 A9
0 B1
1 A4
2 A1
3 B9
4 A0
5 A6
fizikai címtér (RAM)
háttértár
2 157 ? ?Logikai cím Fizikai cím ?Adat
67
lap# keret#offset offset
szabaddátehető
Virtuális memória kezelése
Számítógép architektúrák 240
0 0 -1 1 22 0 -3 0 -4 1 15 0 -6 1 57 0 -8 0 -9 0 -
virtuális címtér (folyamat A)
laptábla(folyamat A)
0 A0
1 A1
2 A2
3 A3
4 A4
5 A5
6 A6
7 A7
8 A8
9 A9
0 B1
1 A4
2 A1
3 B9
4
5 A6
fizikai címtér (RAM)
háttértár
2 157 ? ?Logikai cím Fizikai cím ?Adat
67
lap# keret#offset offset
szabaddátehető
Virtuális memória kezelése
Számítógép architektúrák 241
0 0 -1 1 22 1 43 0 -4 1 15 0 -6 1 57 0 -8 0 -9 0 -
virtuális címtér (folyamat A)
laptábla(folyamat A)
0 A0
1 A1
2 A2
3 A3
4 A4
5 A5
6 A6
7 A7
8 A8
9 A9
0 B1
1 A4
2 A1
3 B9
4 A2
5 A6
fizikai címtér (RAM)
háttértár
2 157 4 157
67
67
Logikai cím Fizikai cím 67Adatlap# keret#offset offset
Virtuális memória kezelése
Előnyök a programozó számára
Nagyobb méretű adatokkal dolgozhatunk, mint amennyi fizikai memória rendelkezésre áll.
Minden program/folyamat saját virtuális címtérrel rendelkezik. Nem férhetnek hozzá másokéhoz.
Programíráskor nem kell tudnunk mely memóriaterületek foglaltak már (más programok által).
Támogatja a multiprogramozott rendszereket.
Számítógép architektúrák 242
Digitális elektronikai alapok
Félvezető
Dióda, tranzisztor
Logikai kapu
Flip-flop
Multiplexer, címdekódoló
Összeadó áramkör
Fizika
Anyag atom elektron- & proton+ & neutron0
Coulomb erő (elemi kölcsönhatás)
𝐹 =1
4𝜋𝜖0
𝑄1𝑄2
𝑟2
𝑟
𝑟
Feszültség: a töltésekre ható erőből származik
Elektromos áram: töltött részecskék áramlása
Ellenállás: a töltésmozgás akadályozása
Vezetők, szigetelők
Számítógép architektúrák 244
Félvezetők
„Rossz vezető, rossz szigetelő”
Ok: szilárdtestek sávszerkezete
4 vegyérték elektron (Si, Ge)
Kvantumfizika
Bohr-féle atommodell
Számítógép architektúrák 245
vezetési sáv
vegyérték sáv
tiltott sáv
elek
tro
n e
ner
gia
vezető
elek
tro
n e
ner
gia
félvezető
elek
tro
n e
ner
gia
szigetelő
szilárdtestben
elek
tro
n e
ner
gia
atomban
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
Számítógép architektúrák 246
elek
tro
n e
ner
gia
Si Si Si
Si Ga Si
Si Si Si
Si Si Si
Si As Si
Si Si Si
n-típus p-típus
+-
+-
+-
-+
-+
-+
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.
Számítógép architektúrák 247
+-
-+-
-+
+-
-+
+ -+
+ -
+ -+-
-+-
-+
+-
-+
+ -+
+-
-+-
-+
+-
-+
+ -+
+ -
+ -+-
-+-
-+
+-
-+
+ -+
+-töltéssűrűség
elektrosztatikus potenciál potenciálgát
n p
kiürített réteg
Számítógép architektúrák 248
Dióda
Záró irányú előfeszítés Nyitó irányú előfeszítés+ -
+-
-+-
-+
+-
-+
+ -+
+ -
+ -+-
-+-
-+
+-
-+
+ -+
+-
-+-
-+
+-
-+
+ -+
+ -
+ -+-
-+-
-+
+-
-+
+ -+
- -- ++ +
+-
+-
-+-
-+
+-
-+
+ -+
+ -
+ -+-
-+-
-+
+-
-+
+ -+
+-
-+-
-+
+-
-+
+ -+
+ -
+ -+-
-+-
-+
+-
-+
+ -+
-
-
-
-
-
-
+
+
+
+
+
+
Dióda: egyenirányításra képes
Jele:
Speciális dióda: LED
Tranzisztor
2 darab p-n átmenet („összefordított diódák”)
Kapcsoló, erősítő
Számítógép architektúrák 249
Bipoláris tranzisztor
p n pn
Unipoláris tranzisztorBE C
p n p
G
D
S
GD S
p n p
B
E
C
n-csatornás JFET
A logikai NAND kapu
2 bemenetű logikai kapu („nem és”)
Jele:
Felépítése, működése:
Számítógép architektúrák 250
A B Q
0 0 1
0 1 1
1 0 1
1 1 0
A
B
Vcc
Q
GNDTTL NAND kapu
További logikai kapuk
Felépíthetőek NAND kapukból
Számítógép architektúrák 251
A B Q
0 0 0
0 1 1
1 0 1
1 1 0
A B Q
0 0 0
0 1 1
1 0 1
1 1 1
A B Q
0 0 0
0 1 0
1 0 0
1 1 1
A Q
0 1
1 0
NOT AND OR XOR
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ó
Számítógép architektúrák 252
D
CLK
Q
_Q
D flip-flopCLK=1 tárol DCLK=0 tart előző
CLK
adat bemenet
adat kimenet
4 bites regiszter
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 akimeneten, különben 0 érték.
Számítógép architektúrák 253
4 bites komparátor
Multiplexer
Kombinációs hálózat
N jelből 1-et kiválaszt a vezérlőjelek alapján
K darab vezérlőjel2K darab bemenő jelet tud azonosítani
Számítógép architektúrák 254
D
C
B
A
Z
S0 S14:1 multiplexer
S0 S1 Z
0 0 A
0 1 B
1 0 C
1 1 D
MUX
Címdekódoló
Kombinációs hálózat
A címbemenetre adott jel alapján kiválasztja a kimenő jelek egyikét
N bites címbemenetre adottérték a 2N darab kimeneti vonal közül 1-et aktivál
Számítógép architektúrák 255
A0 A1
D0
D1
D2
D3
2 bites címdekódoló
A0 A1 D0 D1 D2 D3
0 0 0 0 0 1
0 1 0 0 1 0
1 0 0 1 0 0
1 1 1 0 0 0
Memória
Közvetlen hozzáférésű memória
SRAM vagy DRAMkülönbség a cellában
Bitcella:1 bitet tárol
A cím választjaki melyik cellaértéke kerüljöna kimenetre
Számítógép architektúrák 256
Bit cella
Bit cella
Bit cella
Bit cella
Bit cella
Bit cella
Bit cella
Bit cella
Bit cella
Bit cella
Bit cella
Bit cella
Bit cella
Bit cella
Bit cella
Bit cella
Dek
ód
er
Multiplexer
bit vonal
szó
vo
nal
cím
adat
Bit cella
Számítógép architektúrák 257
bit vonal
NOT kapu
szó
vo
nal
bit vonal
tranzisztor
bit vonal
kondenzátor
szó
vo
nal
tranzisztor
SRAM DRAM
4-6 tranzisztor
Gyors kimenet
„Tartós” tárolás
Egyszerű szerkezet
Lassú kimenet
Szivárgás frissítés
Összeadó áramkör
Félösszeadó: 2 bit összeadására képes
Teljes összeadó: 3 bit összeadásáraképes (2 db félösszeadó)
Számítógép architektúrák 258
A B
SC A B
S
Cout Cin
A B C S
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0
A B Ci Co 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
Ripple-carry összeadó
Több bites adatok összeadására képes
Láncba fűzött teljes összeadók
Számítógép architektúrák 259
++++
A3 B3 A2 B2 A1 B1 A0 B0
S3 S2 S3 S2
C 0
++++
A3 A2 A1 A0 B3 B2 B1 B0
S3 S2 S1 S0
c
„primitív 4 bites ALU kezdemény”
teljes összeadó
Primitív ALU vázlat
Számítógép architektúrák 260
KomparátorÉS-elő VAGY-oló Összeadó
Multiplexer
Reg: IN_A Reg: IN_B
Reg: IR Reg: SR
Reg: OUT
…
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
Számítógép architektúrák 262
Magasszintűprogramnyelvek
Assembly programozás
Gépi kód
Utasítás szerkezet
4 címes utasítás
3 címes utasítás
2 címes utasítás
1 címes utasítás
Számítógép architektúrák 263
Műveleti kód1. Operandus
cím2. Operandus
címEredmény cím
Következő utasítás cím
Műveleti kód1. Operandus
cím2. Operandus
címEredmény cím
Műveleti kód1. Operandus + eredmény cím
2. Operandus cím
Műveleti kód2. Operandus
cím
Program és utasítás felépítés
Számítógép architektúrák 264
utasítás_1
utasítás_2
utasítás_3
utasítás_4
utasítás_5
…
Forrás fájl
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 Az elvégzendő művelet mnemonic-ja
Operandus(ok) Adat(ok) vagy adat(ok)ra hivatkozás(ok)
Megjegyzés Sor végéig a fordító figyelmen kívül hagyja
Utasításkészlet architektúra
ISA (Instruction Set Architecture)
A számítógép programozáshoz kötődő részletei
Bitszélesség (buszok és regiszterek)
Regiszter készlet
Gépi utasítások
Címzési módok
Memória architektúra
Megszakítás kezelés
Számítógép architektúrák 265
Utasítás típusok
Adatmozgató utasítások
(Egész) aritmetikai utasítások
Bitenkénti logikai utasítások
Bitléptető utasítások
Vezérlésátadó utasítások
Sztringkezelő utasítások
BCD és valós aritmetikai utasítások
Fordítási direktívák
Egyéb utasítások
Számítógép architektúrák 266
Utasítás típusok
Adatmozgató utasítások
Regiszter-regiszter (mov, xchg)
Regiszter-memória (mov)
Regiszter-I/O port (in, out)
Regiszter-verem (push, pop)
Kiterjesztés (bitszélesség fontos) (cbw, cwd)
Státusz bit állítás (sti, cli)
Számítógép architektúrák 267
Utasítás típusok
Aritmetikai utasítások
Összeadás (átvitel nélkül/átvitellel) (add, adc)
Kivonás (átvitel nélkül/átvitellel) (sub, sbb)
Inkrementálás, dekrementálás (inc, dec)
Kettes komplemens (neg)
Előjeles/előjel nélküli szorzás (imul, mul)
Előjeles/előjel nélküli osztás (idiv, div)
Összehasonlítás (cmp)
Számítógép architektúrák 268
Utasítás típusok
Bitenkénti logikai utasítások
ÉS művelet (and)
VAGY művelet (or)
KIZÁRÓ VAGY művelet (xor)
Egyes komplemens (not)
Bit tesztelés (test)
Számítógép architektúrák 269
Utasítás típusok
Bitléptető utasítások
Logikai/előjel nélküli balra léptetés (shl)
Logikai/előjel nélküli jobbra léptetés (shr)
Aritmetikai/előjeles balra léptetés (sal=shl)
Aritmetikai/előjeles jobbra léptetés (sar)
Jobbra/balra forgatás (ror, rol)
Jobbra/balra forgatás carry-n keresztül (rcr, rcl)
Számítógép architektúrák 270
Utasítás típusok
Vezérlésátadó utasítások
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)
Megszakítás-kezelőből visszatérés (iret)Számítógép architektúrák 271
Példa:sub eax, 1
jnz .L1
mov eax, 9
.L1: mov ebx, eax
Utasítás típusok
Stringkezelő (bájtsorozat kezelő) utasítások
Sztring mozgató (movs, movsb, movsw)
Sztring összehasonlító (cmps)
Keresés sztringben (scas)
Egyéb utasítások
Koprocesszor vezérlő (wait, esc)
Rendszervezérlő (hlt)
Üres utasítás (nop)
Számítógép architektúrák 272
Utasítás típusok
Fordítási direktívák: gépi kód nincs mögöttük, a fordítás menetét befolyásolják
Forrásfájl lezárása (end)
Szegmens definiálás (segment, ends)
Egyszerűsített szegmensdefiníció (stack, .data)
Helyfoglalás (db, dw, dd)
Helyettesítő szimbólum létrehozás (equ)
…
Számítógép architektúrák 273
Címzési módok
Adat vagy utasítás hogyan érhető el. Rejtett (implicit, implied) Közvetlen adat megadás (immediate) Közvetlen cím (direct, absolute) Regiszteres cím (register direct) Közvetett cím (indirekt) Regiszter indirekt Indexelt cím Bázis relatív cím …
Számítógép architektúrák 274
Címzési módok
Rejtett címzés
Nincs igazi cím megadás
Pl. ha nincs operandus
Számítógép architektúrák 275
Op.kód1
Op.kód2
500
501
502
503
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
Számítógép architektúrák 276
Op.kód
Adat
500
501
502
503
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
Számítógép architektúrák 277
Op.kód
Adat500
501
502
503
regiszter
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
Számítógép architektúrák 278
Op.kód
731
500
501
502
503
Adat
730
732
733
731
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
Számítógép architektúrák 279
Op.kód
731
500
501
502
503
945
730
732
733
731
Adat
943
944
946
945
Címzési módok
Regiszter indirekt
A műveleti kód hivatkozik egy regiszterre
A regiszterben található címen helyezkedik el az operandus
Számítógép architektúrák 280
Op.kód
500
501
502
503
Adat
730
732
733
731
regiszter
731
Címzési módok
Indexelt
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
Számítógép architektúrák 281
Op.kód
700
500
501
502
503
Adat
730
732
733
31
index reg.
731
Címzési módok
Bázis relatív
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
Számítógép architektúrák 282
Op.kód
11
500
501
502
503
Adat
730
732
733
720
bázis reg.
731
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
Számítógép architektúrák 283
Assembly szintaxis
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
Utasítások
8086: 114 utasítás
80186: +15 (új és bővített)
80286: +17
80386: +66
80486: +6
8087: +83
80287: +1
80387: +12
+Pentium, +MMX, +SSE, +AVX, +egyéb ()
Számítógép architektúrák 284
Operandusok
Operandusok
Regiszter (8, 16, 32 bites)
Konstans (8, 16, 32 bites)
Memória tartalom
Memória cím és méret kényszerítésmov al, BYTE PTR [ebx]
mov ax, WORD PTR [ebx]
mov eax,DWORD PTR [ebx]
Számítógép architektúrák 285
Címzési módok
Regiszteres
Közvetlen adat
Közvetlen cím
Közvetett regiszteres
Regiszter relatív
Bázisos indexelt
Bázis+index relatív
Skálázott
Szegmens előtag
Számítógép architektúrák 286
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]
Címzési módok
Effektív cím (EA) megadás alakjainak összegzése
Számítógép architektúrák 287
𝐶𝑆:𝑆𝑆:𝐷𝑆:𝐸𝑆:𝐹𝑆:𝐺𝑆:
𝑒𝑔𝑦𝑖𝑘𝑠𝑒𝑚
𝐸𝐴𝑋𝐸𝐵𝑋𝐸𝐶𝑋𝐸𝐷𝑋𝐸𝑆𝐼𝐸𝐷𝐼𝐸𝐵𝑃𝐸𝑆𝑃
𝑒𝑔𝑦𝑖𝑘𝑠𝑒𝑚
+
𝐸𝐴𝑋𝐸𝐵𝑋𝐸𝐶𝑋𝐸𝐷𝑋𝐸𝑆𝐼𝐸𝐷𝐼𝐸𝐵𝑃
𝑒𝑔𝑦𝑖𝑘𝑠𝑒𝑚
∗
1248
𝑒𝑔𝑦𝑖𝑘𝑠𝑒𝑚
+𝑒𝑙𝑡𝑜𝑙á𝑠𝑠𝑒𝑚𝑚𝑖
Szegmens szelektor
Bázis Index Skálázófaktor
Eltolás
Példa:mov EAX, [DS:EBP+EDI*4+10h]
vagy ugyanaz más írásmódban:mov EAX, DS:10h[EBP][EDI*4]
Alprogram hívási konvenció
Hívó szabályai
Paraméterek fordított sorrendben a rendszerverembe helyezése Néha adott sorrendben regiszterekbe: edi, esi, edx, …
Lebegő pontos paraméterek a SSE regiszterekbe(eax-be a float paraméterek száma)
Alprogram hívás (visszatérési cím a verembe kerül, programszámláló átáll az alprogram kezdőcímére)
Visszatérés után veremből paraméterek kivétele
Visszatérési érték az eax regiszterben van
Számítógép architektúrák 288
Alprogram hívási konvenció
Hívott szabályai
Bázis pointer verembe mentés
Verem mutató mentése bázis pointerbe
Helyfoglalás lokális változóknak a veremben
Használandó regiszterek mentése a verembe
Visszatérési érték az eax regiszterbe tétele
Mentett regiszterek és verem visszaállítás
Visszatérés (a veremben lévő címre)
Számítógép architektúrák 289
Gépi kód
Az egyetlen nyelv, amit a processzor megért
Bináris formátum
Processzoronként változó lehet
Példa:assembly: SUB EAX, EBX # eax = eax-ebxgépi kód: 0x29 0xD8
Számítógép architektúrák 290
MOD
0 0 1 0 1 0 0 1 1 1 0 1 1 0 0 0
SUB művelet
REG mező a forrás
Regiszteres címzés
32 bites regiszter
d s REG R/MOpKód
Forrás:EBX
Cél:EAX
Gépi kód példa
Számítógép architektúrák 291
C nyelvű kódy=5;
z=6;
x=z+y*7;
Gépi kód
Assembly kódmov 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
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
Magasszintű programozásleképezése assembly-re 1.
Programozás alapjai
Kifejezéskiértékelés
Elágaztatás
Ciklusszervezés
Gondolatébresztő kérdések
Melyik értékadás fut le rövidebb idő alatt?int a, b=2, c=3, d=4, e=1, f=2;
a=(b+c)*(d-e)%f;
a=(2+3)*(4-1)%2;
a=5;
Mi az alábbi kifejezés értéke?(!3+8==2*4)+-1
Mi az alábbi kifejezés típusa C nyelven?5/(short)2==.5+’2’
Számítógép architektúrák 293
Gondolatébresztő kérdések
Ki/mikor/hogyan végzi a kifejezés kiértékelést?
Van címe a konstansnak?
Van-e különbség a #define és a constközött?
Kétirányú elágaztatásnak minősül-e azif (a==0) b=0; utasítás?
Hányszor fut le az alábbi ciklus magja?for(a<1,b=1;c++;d=1) e=1;
Számítógép architektúrák 294
Mi az outputja a programnak?
Számítógép architektúrák 295
Programozás
Editor
Szövegszerkesztőben forráskód létrehozása
Forrás kód: háttértárolón tárolt szöveges file
Esetleg nyelv érzékeny eszközrendszer
Fordító (compiler, assembler)
Előfeldolgozás, lexikai/szintaktikai/szemantikai elemzés, optimalizálás, kódgenerálás
Eredmény: tárgykód (ojbect file)
Nem interpreter!Számítógép architektúrák 296
Programozás
Kapcsolatszerkesztő (linker)
A tárgykódban nem igazi címek, csak hivatkozások vannak (több fájl, könyvtári függv.)
Linker feloldja a hivatkozásokat: futtatható fájl
Betöltő (loader)
Az op. rendszer része: létrehozza a folyamatot
RAM-ba tölti a gépi kódot
Inicializál: regiszterek, verem
Átadja a vezérléstSzámítógép architektúrák 297
A C nyelv típusai
Aritmetikai (egyszerű) típusok
[unsigned|signed] char
[unsigned|signed] [short|long|long long*] int
enum
float
[long*] double
Összetett/származtatott típusok
struct és union
tömb
mutató
Számítógép architektúrák 298
*ISO C99
A C egész típusai
Számítógép architektúrák 299
típus méret tartomány
[signed] char1 bájt
-128 127
unsigned char 0 255
[signed] short2 bájt
-32.768 32.767
unsigned short 0 65.535
[signed] int4 bájt
(2 bájt)
-2.147.483.648 2.147.483.647
unsigned int 0 4.294.967.295
[signed] long8 bájt
(4 bájt)
-9.223.372.036.854.775.808 9.223.372.036.854.775.807
unsigned long 0 18.446.744.073.709.551.615
[signed] long long*
8 bájt-9.223.372.036.854.775.808 9.223.372.036.854.775.807
unsigned long long 0 18.446.744.073.709.551.615
*ISO C99
Felsorolásos típus
Alacsony szinten int-ként reprezentált
C nyelven a két kód assembly szinten azonos
Számítógép architektúrák 300
A C nyelv valós típusai
Valós típusú konstansok formátuma
0.751
+.75100
Valós típusok paraméterei
Számítógép architektúrák 301
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
longdouble*
10 bájt 3.36 · 10-4932 1.19 · 10+4932 19 számjegy
.751f
75.1e-2
0.751L
0.0751E+1
*ISO C99
Mutató típus
A C nyelvben
Fontos szerepet játszik (mutatóorientált nyelv)
Előjel nélküli egész reprezentáció (32 vagy 64 bit)
NULL: csupa nulla bit
Értéke adatcím és kódcím (!) is lehet
Aritmetikai műveletek is végezhetőek velük
Számítógép architektúrák 302
Rekord típus
struct kulcsszó
Nem biztos, hogy folytonos memóriaterületen
Számítógép architektúrák 303
nem használt bájt
A.a A.b A.c A.d
sizeof(A)==16
B.a B.bB.cB.d
sizeof(B)==24
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)
Számítógép architektúrák 304
egyenértékű utasítások
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 305
Kom
ple
xitá
s n
ő
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 306
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 307
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 308
Változó
Alacsony szinten
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-benSzámítógép architektúrák 309
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)*4prefix * + 2 3 4postfix (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 310
A C precedencia táblázata
Számítógép architektúrák 311
Operátor Leírás Kötés-irány
1.
() Zárójel, függvény paraméter lista
[] Tömb indexelés
. Mező hivatkozás
-> Mező hivatkozás mutatóval
++ --Utólagos inkrementálás/dekrementálás
2.
++ --Előzetes inkrementálás/dekrementálás
+ - Előjel
! ~ Logikai/bitenkénti tagadás
(típus) Típus kényszerítés
* Mutatott terület
& Címképzés
sizeof Méret
3. * / % Szorzás/osztás/maradékos osztás
4. + - Összeadás/kivonás
Operátor Leírás Kötés-irány
5. << >> Shiftelés balra/jobbra
6.< <= > >==
Relációs operátorok (< > )
7. == != Relációs operátorok (= )
8. & Bitenkénti ÉS
9. ^ Bitenkénti XOR
10. | Bitenkénti VAGY
11. && Logikai ÉS
12. || Logikai VAGY
13. ?: Feltételes operátor
14.
= += -= *= /= %= <<= >>= &= ^= |=
Értékadó operátorok
15. , Vessző operátor
Kifejezés kiértékelés
Infix kifejezés kiértékelés
Számítógép architektúrák 312
Infix25 - 15 * 4 + 246 / 2
25 - 60 + 246 / 225 - 60 + 123
-35 + 12388
Infix & ()((25 - 15) * (4 + 246)) / 2
(10 * (4 + 246)) / 2(10 * 250) / 2
2500 / 21250
Precedencia táblázat fontos
Kifejezés kiértékelés
Prefix és postfix kifejezés kiértékelés
Számítógép architektúrák 313
Prefix/ * - 25 ; 15 + 4 ; 246 ; 2
/ * 10 + 4 ; 246 ; 2/ * 10 ; 250 ; 2
/ 2500 ; 21250
Postfix25 ; 15 - 4 ; 246 + * 2 /
10 ; 4 ; 246 + * 2 /10 ; 250 * 2 /
2500 ; 2 / 1250
A pontosvessző (;) itt csak az operandusok elhatárolására szolgál.
Hasonlít a függvényekhez (pl. MS Excel):=szum(3 ; hatvány(sin(0) ; 2) ; 1)
Fordított lengyel jelölésnek (RPN) is hívják.
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ó postfixalakra 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 314
Utasítások
Deklarációs utasítás
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 315
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 316
A feltételes utasítás alacsony szinten
Számítógép architektúrák 317
cmp eax, ebxjne .L0mov ecx, 1
.L0: add edx, 1
if (feltétel)utasítás1;
utasítás2;
cmp eax, ebxjne .L2mov ecx, 1jmp .L3
.L2: mov ecx, 2
.L3: add edx, 1
if (feltétel)utasítás1;
elseutasítás2;
utasítás3;
A switch utasítás alacsony szinten
Számítógép architektúrák 318
switch (kifejezés){case kifejezes1:
utasítás1;case kifejezes2:
utasítás2;default:
utasítás3;}utasítás4;
cmp eax, 1je .L3cmp eax, 2je .L4jmp .L2
.L3: mov ebx, 1
.L4: mov ebx, 2
.L2: mov ebx, 3add edx, 1
A break hatása alacsony szinten
Számítógép architektúrák 319
switch (kifejezés){case 1:
utasítás1;break;
case 2: utasítás2;break;
default: utasítás3;}
utasítás4;
cmp eax, 1je .L3cmp eax, 2je .L4jmp .L2
.L3: mov ebx, 1jmp .L5
.L4: mov ebx, 2jmp .L5
.L2: mov ebx, 3
.L5: add edx, 1
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ételesKezdőfeltételesVégfeltételes
Előírt lépésszámúElőltesztelőHátultesztelő
Felsorolásos Végtelen
Számítógép architektúrák 320
A C nyelv ciklusai
Kezdőfeltételes (nem 0 feltétel esetén ismétel)
Végfeltételes (nem 0 feltétel esetén ismétel)
Számítógép architektúrák 321
while (feltétel)
utasítás;
for ([kif1]; [kif2]; [kif3])
utasítás;
do
utasítás;
while (feltétel);
A while és for ciklus alacsony szinten
Számítógép architektúrák 322
utasítás0;while (feltétel)
utasítás1;utasítás2;
mov eax, 10jmp .L2
.L3: sub eax, 1
.L2: cmp eax, 0jne .L3add ebx, 1
A for és a while ciklus assembly szinten egyenértékű.
x=5;
goto test;
loop:
y=y+1;
x=x-1;
test:
if (x>0) goto loop;
A do-while ciklus alacsony szinten
Számítógép architektúrák 323
utasítás0;do
utasítás1;while (feltétel);utasítás2;
mov eax, 10
.L3: sub eax, 1cmp eax, 0jne .L3add ebx, 1
A do-while ciklus nem lehet üres ciklus.
Magasszintű programozásleké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?
325Számítógép architektúrák
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?
326Számítógép architektúrák
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;}
327Számítógép architektúrák
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;}
328Számítógép architektúrák
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;
}
329Számítógép architektúrák
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;
}
330Számítógép architektúrák
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;}
331Számítógép architektúrák
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ény332Számítógép architektúrák
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’);…
333Számítógép architektúrák
Függvény
Értéket határoz meg
Aktiválás kifejezésben
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;…
334Számítógép architektúrák
A verem
Last In First Out tároló
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 van335Számítógép architektúrák
Eljárás hívás alacsony szinten…
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
…
PC
SP
1
2
3
12
7
8
9
50
10
RAM:
old_PC
4
11
336
6
Számítógép architektúrák
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 minden tagja aktív, de csak a legutóbbi működik
Rekurzió: egy aktív alprogram meghívása
337Számítógép architektúrák
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
338Számítógép architektúrák
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
339Számítógép architektúrák
Lokális változó alacsony szinten
void eljar(){
int a=1;
int b=2;
int c=3;
… *
}
Számítógép architektúrák 340
a=1
b=2
c=3
730
734
738
742
???
régi ebp
746
750
ret. cím754
esp=734
ebp=750
[ebp-8]
[ebp-4]
[ebp-12]
* A RAM tartalma:
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 341
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ó
342Számítógép architektúrák
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ás343Számítógép architektúrák
Érték szerinti paraméterátadás
Formális paraméternek van címkomponense ahívott területén.
Aktuális paraméternek van érték komponense.
Az aktuális paraméter értéke átkerül a hívottalprogram 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ó.
344Számítógép architektúrák
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
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;
}
Számítógép architektúrák 348
730
734
738
742
746
750
754
esp=726
ebp=734
[ebp-8]
[ebp-4]fuggv: a
régi ebp
fuggv: c
param.
visszatér.cím
main: a
ősi ebp
main: b
758
762
[ebp+4]
[ebp+8]
[ebp+12]
[ebp+16]
726
766
770
[ebp+20]
* A RAM tartalma:
vere
m k
eret
Példa assembly-ben #1fuggv: push rbp
mov rbp, rsp
sub rsp, 8
mov eax, DWORD PTR [rbp+16]
mov DWORD PTR [rbp-8], eax
mov eax, DWORD PTR [rbp-8]
add eax, 1
mov DWORD PTR [rbp-4], eax
mov eax, DWORD PTR [rbp-4]
mov DWORD PTR [rbp+16], eax
mov rsp, rbp
pop rbp
ret
Számítógép architektúrák 349
Példa assembly-ben #2main: push rbp
mov rbp, rsp
sub rsp, 8
mov DWORD PTR [rbp-8], edi
mov eax, DWORD PTR [rbp-8]
push rax
call fuggv
pop rax
mov DWORD PTR [rbp-4], eax
mov eax, DWORD PTR [rbp-4]
mov rsp, rbp
pop rbp
ret
Számítógép architektúrák 350
Cím szerinti paraméterátadás
Formális paraméternek nincs címkomponense ahívott területén.
Aktuális paraméternek van cím komponense ahívó területén.
Az aktuális paraméter címe átkerül a hívottalprogramhoz, aki itt dolgozik.
Az információátadás két irányú.
Az alprogram a hívó területén dolgozik.
Gyorsabb, de veszélyesebb.
351Számítógép architektúrák
A C nyelv és az assembly
Inline assembly C-ben
asm(” movl $10, %eax ”);
C forráskód fordítás assembly-re gcc-vel
gcc -S -masm=intel prog.c
Kimenet: prog.s
Assembly forráskód fordítás gcc-vel
gcc prog.s
Kimenet: a.out
Számítógép architektúrák 352
Képernyőre írás lehetőségei.TEXT:.string "This is a text.\n"
...
# printf("This is a text.\n");
mov eax, 0
mov edi, OFFSET FLAT:.TEXT
call printf
# puts("This is a text.\n");
mov edi, OFFSET FLAT:.TEXT
call puts
# write(1,"This is a text.\n",16);
mov edi, 1
mov esi, OFFSET FLAT:.TEXT
mov edx, 16
call write
# interrupt
mov eax, 4
mov ecx, OFFSET FLAT:.TEXT
mov edx, 16
int 0x80
Számítógép architektúrák 353
OpenMP
Open Multi-Processing API
Osztott memória modell
Folyamatos fejlesztés 1997 óta
Támogatott nyelvek: C, C++, Fortran
Támogatott operációs rendszer: Windows, Linux
Tartalmaz:
Fordítási direktívákat
Könyvtári függvényeket
Környezeti változókat
Számítógép architektúrák 354
OpenMP
Folyamaton belül párhuzamosan futó szálak
Egyik szál kitüntetett: master
Feladat- és adat párhuzamosság
Számítógép architektúrák 355
Feladat 1 A B
Feladat 3 A B
Feladat 4 x w
Feladat 5 x w
Feladat 2 A B
futásidőmaster
OpenMP direktívák
#pragma omp parallel
A következő utasítás fusson több szálon is!
#pragma omp parallel
num_threads(4)
A következő utasítás fusson 4 szálon egyszerre!
#pragma omp parallel private(x,y)
shared(a,b)
A következő blokkban szereplő változók közülx és y legyen minden szálon egyedia és b legyen minden szálon közös
Számítógép architektúrák 356
OpenMP direktívák
#pragma omp parallel for
A következő for ciklus lépéseit oszd fel a szálak között egyenletesen!
#pragma omp parallel for
schedule(guided)
A következő for ciklus lépéseit oszd fel a szálak között terheléstől függően!
#pragma omp parallel for
reduction(+:Sum)
A következő for ciklus elosztott lefutása után az egyes privát Sum változó értékeket add össze!
Számítógép architektúrák 357
OpenMP direktívák
#pragma omp parallel sections
Hozz létre párhuzamosan futó szakaszokat!#pragma omp section
A következő blokk legyen az imént létrehozott egyik párhuzamosan futó szakasz!
#pragma omp master
A következő utasítást csak a master futassa!#pragma omp single
A következő utasítást csak az egyik szál futassa!
Számítógép architektúrák 358
OpenMP direktívák
#pragma omp barrier
Hozz létre itt egy szinkronizációs pontot! Egyik szál sem mehet addig tovább amíg mindegyik el nem ért idáig.
#pragma omp critical
A következő utasítás (blokk) alkosson kritikus szakaszt, azaz egyszerre csak egy szál futtathassa ezt a részt (a többiek csak azután hogy az előző befejezte). Kölcsönös kizárás.
Számítógép architektúrák 359
OpenMP könyvtári függvények
int omp_get_num_procs()
Visszaadja az elérhető processzormagok számátint omp_get_num_threads()
Visszaadja a szálak aktuális számátvoid omp_set_num_threads()
Beállítja hány szálon fussanak a párhuzamos szakaszok
int omp_get_thread_num()
Visszaadja az adott szál azonosítóját
Számítógép architektúrák 360
OpenMP példa// gcc openmp.c -fopenmp
#include<stdio.h>
#include<omp.h>
int IsSame(int *A, int N){
int i, Sum1=0, Sum2=0;
#pragma omp parallel for
for(i=0;i<N;i++){
// #pragma omp critical
Sum1=Sum1+A[i];
}
#pragma omp parallel for reduction(+:Sum2)
for(i=0;i<N;i++)
Sum2=Sum2+A[i];
return Sum1==Sum2;
}
Számítógép architektúrák 361
Ajánlott irodalom
Andrew S. Tanenbaum: Számítógép architektúrák, Panem,
2006
Kovács György: Számítógép architektúrák, DE AVK, 2007
Budai Attila: Mikroszámítógép-rendszerek, LSI Oktatóközpont, 2000
Joseph Cavanagh: X86 Assembly Language and C Fundamentals, CRC Press, 2013
Richard Blum: Professional Assemby Language, Wiley, 2005
Nicholas Charter: Computer architecture, McGraw-Hill, 2001
R. E. Bryant, D. R. O’Hallaron: Computer Systems – A programmer’s perspective, Pearson, 2016
Számítógép architektúrák 362
Számítógép architektúrák 363
Köszönöm a figyelmet!
Sikeres felkészülést!