debreceni egyetem informatikai rendszerek és hálózatok tanszék

Post on 31-Oct-2021

1 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

HARDVERKÖZELI PROGRAMOZÁS 1

Dr. Varga Imre

Debreceni Egyetem

Informatikai Rendszerek és Hálózatok Tanszék

2017. február 14.

Követelmények

� Gyakorlat (aláírás)

�Ó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)

�C programozási „szintfelmérő” (plusz pontért)

� Írásbeli vizsga (gyakorlati aláírás esetén)

� Jegy: 75% elméleti vizsga + 25% gyakorlati eredmény

Hardverközeli programozás 1 2

Mérnökinformatikus képzés

Döntéstámogató rendszerek

Mesterséges intelligencia alapjai

Bevezetés a LabView programozásba

Magas szintű programozási nyelvek 1-2

Hardverközeli programozás 1-2

Digitális technika

Elektronika 1-2

Fizika 1-2

Hardverközeli programozás 1 3

absz

takc

ió, l

ogi

kai s

zin

t

Tematika

� Számábrázolás, adattípus implementáció

� Digitális elektronika alapjai

� CPU felépítése és működése

� Assembly programozás�Magas szint leképezése alacsonyra

� Modern processzorok

� A programozás operációsrendszerhez kapcsolódó aspektusai

� Konkrét processzor architektúrák�Utasításkészletük, programozásuk

Hardverközeli programozás 1 4

A tárgy célja

� Összeköttetés teremtése

�Az ‚absztrakt’ és az ‚alapozó’ ismeretek között

�A ‚program’ és az ‚elektronika’ között

� Hardver ismeretek átadása

� 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

Hardverközeli programozás 1 5

Számábrázolás, adattípusok

Fixpontos számábrázolás

Lebegőpontos számábrázolás

A C nyelv típusainak reprezentációja

Mi az outputja a programnak?

Hardverközeli programozás 1 7

Adatszervezés

Adategységek

� Bit: két állapot (0, 1)

� Nibble (fél byte): 4 bit

� Byte: 8 bit

� Félszó: 16 bit

� Szó: (többnyire) 32 bit

� Dupla szó: 64 bit

Hardverközeli programozás 1 8

21625665.5364.294.967.29618.446.744.073.709.551.616

Adattípus

Megadás

� Reprezentáció

� Tartomány

� Műveletek

A C nyelv aritmetikai (egyszerű) típusai

� [unsigned|signed] char

� [unsigned|signed] [short|long|long long*] int

� float

� [long*] double

Hardverközeli programozás 1 9

*ISO C99

Fixpontos számábrázolás

� Egész értékek reprezentálása

� Előjel nélküli eset

�ábrázolandó szám kettes számrendszerben

�adott számú biten

� Példa (1 byte esetén)4110 � 1010012 �

� N biten ábrázolható

� legkisebb szám: 0

� Legnagyobb szám: 2N-1

Hardverközeli programozás 1 10

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 byte esetén)-4110 � -1010012 �

� N biten ábrázolható

� legkisebb szám: -(2N-1)

� Legnagyobb szám: 2N-1-1Hardverközeli programozás 1 11

1 0 1 0 1 1 11

meghatározza az előjelet

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

Hardverközeli programozás 1 12

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

�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

�Rövid előjeles értékből hosszú előjeles8 bit: 01101001 � 16 bit: 00000000011010018 bit: 11010010 � 16 bit: 1111111111010010

Hardverközeli programozás 1 13

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 byte: 0000 vagy (0011*) bevezető1395 � 00000001 00000011 00001001 00000101

Pakolt BCD

� 2 számjegy – 1 byte: nibble alapú1395 � 00010011 10010101

Hardverközeli programozás 1 14

*ASCII miatt

Egész típus

Ábrázolás

� Fixpontos számábrázolás�Előjeles vagy előjel nélküli

� BCD

Bájtsorrend

� Little-endian: LSB elől (gazdagép bájtsorrend)

� Big-endian: MSB elől (hálózati bájtsorrend)

Megadás különböző módokon

� Pl. C nyelven: 30=30u=30l=036=0x1E=0b11110*

Hardverközeli programozás 1 15

*ISO C99

Karakter típus

� Értékei karakter kódok

� Fixpontos számábrázolás

� C: ASCII (1 byte, előjeles/előjel nélküli, egészként használható)

� Java: Unicode (2byte, előjel nélküli)

� ASCII ⊂ ISO-8859-1 (Latin 1) ⊂ Unicode

� ASCII kódtábla

� 0x00-0x1F: vezérlő karakter

� 0x30-0x39: számjegy

� 0x41-0x5A: angol nagy betű

� 0x61-0x7A: angol kis betű

Hardverközeli programozás 1 16

Felsorolásos típus

� Alacsony szinten int-ként reprezentált

� C nyelven a két kód assembly szinten azonos

Hardverközeli programozás 1 17

A C egész típusai

Hardverközeli programozás 1 18

típus méret tartomány

[signed] char1 byte

-128 127

unsigned char 0 255

[signed] short2 byte

-32.768 32.767

unsigned short 0 65.535

[signed] int4 byte

-2.147.483.648 2.147.483.647

unsigned int 0 4.294.967.295

[signed] long8 byte(4 byte)

-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 long8 byte

-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

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

Hardverközeli programozás 1 19

Lebegő pontos szabvány

IEEE 754/1985 szabvány (ISO/IEC/IEEE 60559:2011)

� Előjel

�Pozitív: 0; Negatív: 1

� Formátumok

Hardverközeli programozás 1 20

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

Hardverközeli programozás 1 21

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

Hardverközeli programozás 1 22

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

� „nem szám” (NaN)karakterisztika csupa ’1’, mantissza nem csupa ’0’Pl.: 0.0/0.0, inf-inf, NaN+1.0

� denormalizált szám (subnormal)karakterisztika csupa ’0’, mantissza nem csupa ’0’

Hardverközeli programozás 1 23

A C nyelv valós típusai

Valós típusú konstansok formátuma

� 0.751

� +.75100

Valós típusok paraméterei

Hardverközeli programozás 1 24

méret minimum maximum pontosság

float 4 byte 1.18 · 10-38 3.40 · 10+38 ≈7 számjegy

double 8 byte 2.23 · 10-308 1.80 · 10+308 ≈15 számjegy

longdouble*

10 byte 3.36 · 10-4932 1.19 · 10+4932 ≈19 számjegy

� .751f

� 75.1e-2

� 0.751L

� 0.0751E+1

Mutató típus

� Indirekt hivatkozásra szolgálnak

� Tartományának elemei tárcímek

� A mutató típusú változónak is van saját címe

� A C nyelvben

�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

Hardverközeli programozás 1 25

Rekord típus

� Különböző típusú területek együtt

� Mindegyik mező a saját reprezentációjával

� Nem biztos, hogy folytonos memóriaterületen

Hardverközeli programozás 1 26

nem használt byte

A.a A.b A.c A.d

sizeof(A)==16

B.a B.bB.cB.d

sizeof(B)==24

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

ahol E egy adatelem mérete és A1 a tömb kezdőcíme

Hardverközeli programozás 1 27

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 � j � 1 E

ahol E egy adatelem mérete és A1,1 a mátrix első elemének címe

Hardverközeli programozás 1 28

�,� �

��,� ��,�

��,� ��,�

��,� ��,�

→ � � ��,���,���,���,���,���,�

Sztring típus

� Karakterek sorozata

� Elemei a megfelelő belső reprezentációban(pl. C: 1byte, ASCII; Java: 2 byte, 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)

Hardverközeli programozás 1 29

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)

Hardverközeli programozás 1 30

egyenértékű utasítások

Digitális elektronikai alapok

Félvezető

Dióda, tranzisztor

Logikai kapu

Flip-flop

Multiplexer, címdekódoló

Összeadó áramkör

Félvezetők

� „Rossz vezető, rossz szigetelő”

� Ok: szilárdtestek sávszerkezete

�4 vegyérték elektron (Si, Ge)

�Kvantumfizika

�Bohr-féle atommodell

Hardverközeli programozás 1 32

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

Hardverközeli programozás 1 33

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.

Hardverközeli programozás 1 34

+-

-+-

-+

+-

-+

+ -+

+ -

+ -+-

-+-

-+

+-

-+

+ -+

+-

-+-

-+

+-

-+

+ -+

+ -

+ -+-

-+-

-+

+-

-+

+ -+

+-töltéssűrűség

elektrosztatikus potenciál potenciálgát

n p

kiürített réteg

Hardverközeli programozás 1 35

Dióda

Záró irányú előfeszítés Nyitó irányú előfeszítés+ -

+-

-+-

-+

+-

-+

+ -+

+ -

+ -+-

-+-

-+

+-

-+

+ -+

+-

-+-

-+

+-

-+

+ -+

+ -

+ -+-

-+-

-+

+-

-+

+ -+

- -- ++ +

+-

+-

-+-

-+

+-

-+

+ -+

+ -

+ -+-

-+-

-+

+-

-+

+ -+

+-

-+-

-+

+-

-+

+ -+

+ -

+ -+-

-+-

-+

+-

-+

+ -+

-

-

-

-

-

-

+

+

+

+

+

+

�Dióda: egyenirányításra képes

�Jele:

�Speciális: LED

Tranzisztor

� 2 darab p-n átmenet („összefordított diódák”)

� Kapcsoló, erősítő

Hardverközeli programozás 1 36

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:

Hardverközeli programozás 1 37

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

Hardverközeli programozás 1 38

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ó

Hardverközeli programozás 1 39

D

CLK

Q

_Q

D flip-flop

CLK

adat bemenet

adat kimenet

4 bites regiszter

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

Hardverközeli programozás 1 40

D

C

B

A

Z

S0 S14:1 multiplexer

S0 S1 Z

0 0 A

0 1 B

1 0 C

1 1 D

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

Hardverközeli programozás 1 41

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

Összeadó áramkör

� Félösszeadó: 2 bit összeadására képes

� Teljes összeadó: 3 bit összeadásáraképes (2 félösszeadó)

Hardverközeli programozás 1 42

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

Hardverközeli programozás 1 43

++++

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ó

A processzorok felépítése

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

CPU

Regiszterek

Fetch-execute ciklus

RISC / CISC processzorok

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)

Hardverközeli programozás 1 45

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

Hardverközeli programozás 1 46

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 elterjedtHardverközeli programozás 1 47

A számítógép alapvető felépítése

� Processzor

� Memória

� Input-Output interfész

� Buszrendszer

� Perifériák

Hardverközeli programozás 1 48

Processzor Memória I/O interfész

Buszrendszer

Perifériák

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

Hardverközeli programozás 1 49

Processzor Memória I/O interfész

címbusz

adatbusz

vezérlő busz

Processzor

� Központi feldolgozó egység (CPU)

� A számítógép „agya”

�Vezérlés, utasítás végrehajtás

� 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ő gyorsítótár

Hardverközeli programozás 1 50

Végrehajtó egység (EU)

Regiszterek

� Kis méretű (flip-flop-szerű) tároló áramkör

�Mérete általában az adatbusz szélességével egyenlő

�Általában 8-512 bit

� Gyors hozzáférésű (elérési idő < 1ns)

� Darabszámát a processzor határozza meg (10-100)

� Gyakran regisztertömböket alkot

� Néha átnevezhetőek

� 3 kategória:

�Rendszer- , általános célú- és speciális célú regiszter

Hardverközeli programozás 1 51

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 (általában) átáll 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

Hardverközeli programozás 1 52

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 hol van)

� A programozó által nem hozzáférhető

Hardverközeli programozás 1 53

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

Hardverközeli programozás 1 54

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

Hardverközeli programozás 1 55

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

Hardverközeli programozás 1 56

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 kapcsolódnak

� Tömbök, sztringek és lokális változók esetén hasznos

� Például: BP, X, SI, DI, CS, DS, SS, ES

Hardverközeli programozás 1 57

Regiszterek

Memória cím regiszter (MAR)

� Összeköti a 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ű

Hardverközeli programozás 1 58

Regiszterek

Memória adat regiszter (MDR)

� Összeköti a 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ű

Hardverközeli programozás 1 59

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

Hardverközeli programozás 1 60

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

Hardverközeli programozás 1 61

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

Hardverközeli programozás 1 62

Ó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

� Arányos a CPU által disszipált hővel

� Periódusidő nagyobb, mint a jelterjedési idő

� 1 MHz – 3 GHz

� Gyakran változtatható (turbo, powersave)

� Egyéb sebesség jellemzők: MIPS, FLOPS

Hardverközeli programozás 1 63

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

� 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

Hardverközeli programozás 1 64

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

Hardverközeli programozás 1 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

Hardverközeli programozás 1 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

Hardverközeli programozás 1 67

Olvasási ciklus

� DIY Calculator esetén

Hardverközeli programozás 1 68

C. Maxfield, A. Brown: The Official DIY Calculator Data Book

Írási ciklus

� DIY Calculator esetén

Hardverközeli programozás 1 69

C. Maxfield, A. Brown: The Official DIY Calculator Data Book

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

Hardverközeli programozás 1 71

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

Hardverközeli programozás 1 72

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

cím2. Operandus + eredmény cím

Műveleti kód1. Operandus

cím

Program és utasítás felépítés

Hardverközeli programozás 1 73

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

Hardverközeli programozás 1 74

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

Hardverközeli programozás 1 75

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)

Hardverközeli programozás 1 76

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őjeltelen/előjeles szorzás (mul, imul)

� Előjeltelen/előjeles osztás (div, idiv)

� Összehasonlítás (cmp)

Hardverközeli programozás 1 77

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)

Hardverközeli programozás 1 78

Utasítás típusok

Bitléptető utasítások

� Logikai/előjeltelen balra léptetés (shl)

� Logikai/előjeltelen jobbra léptetés (shr)

� Aritmetikai/előjeles balra léptetés (sal=shl)

� Aritmetikai/előjeles jobbra léptetés (sar)

� Jobbra/balra forgatás (ror, rol)

� Jobbra/balra forgatás carry-n keresztül (rcr, rcl)

Hardverközeli programozás 1 79

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)

Hardverközeli programozás 1 80

Utasítás típusok

Stringkezelő (byte-sorozat 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)

Hardverközeli programozás 1 81

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)

� …

Hardverközeli programozás 1 82

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� …

Hardverközeli programozás 1 83

Címzési módok

Rejtett címzés

� Nincs igazi cím megadás

� Pl. ha nincs operandus

Hardverközeli programozás 1 84

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

Hardverközeli programozás 1 85

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

Hardverközeli programozás 1 86

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

Hardverközeli programozás 1 87

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

Hardverközeli programozás 1 88

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 memóriacíme

Hardverközeli programozás 1 89

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

Hardverközeli programozás 1 90

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

Hardverközeli programozás 1 91

Op.kód

11

500

501

502

503

Adat

730

732

733

720

bázis reg.

731

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

Hardverközeli programozás 1 92

0 0 1 0 1 0 0 1 1 1 0 1 1 0 0 0

SUB művelet

Regiszter a forrás

Regiszteres címzés

32 bites regiszter

d s MOD REG R/MOpKód

Forrás:EBX

Cél:EAX

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!Hardverközeli programozás 1 93

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éstHardverközeli programozás 1 94

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?5/( short )2==.5+’2’

Hardverközeli programozás 1 96

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 ;

Hardverközeli programozás 1 97

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

Hardverközeli programozás 1 98

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

Hardverközeli programozás 1 99

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

Hardverközeli programozás 1 100

Változó

� Komponensei: név, attribútum, cím, érték

� Hatáskör: statikus, dinamikus

� Deklaráció: explicit, implicit, automatikus

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

Hardverközeli programozás 1 101

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-benHardverközeli programozás 1 102

Kifejezés

� Komponensei: típus, érték

� Formálisan: operátor, operandus és zárójel

� Operátor: uniáris, bináris, ternáris

� Alak: infix (2+3)*4perfix * + 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

Hardverközeli programozás 1 103

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 , ecxeax + ebx * ecx & edx add eax , ebx

and eax , edx

Hardverközeli programozás 1 104

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

Hardverközeli programozás 1 105

Elágaztató utasítás

Kétirányú elágaztató utasítás C nyelven:if (kifejezés)utasítás1;[elseutatsí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;]}

Hardverközeli programozás 1 106

A feltételes utasítás alacsony szinten

Hardverközeli programozás 1 107

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

Hardverközeli programozás 1 108

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

Hardverközeli programozás 1 109

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ételes

�Kezdőfeltételes�Végfeltételes

� Előírt lépésszámú�Előltesztelő�Hátultesztelő

� Felsorolásos� Végtelen

Hardverközeli programozás 1 110

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)

Hardverközeli programozás 1 111

while (feltétel)utasítás;

for ([kif1 ]; [kif2]; [kif3])utasítás;

doutasítás ;

while (feltétel);

A while és for ciklus alacsony szinten

Hardverközeli programozás 1 112

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ű.

A do-while ciklus alacsony szinten

Hardverközeli programozás 1 113

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?

115

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?

116

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;}

117

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;}

118

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;}

119

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;}

120

Gondolatébresztő kérdések

� Mit ír az alábbi program a képernyőre?#include <stdio.h >void one (){

int a= -43;}void two (){

int b;printf (” %d\n”,b);}

int main(){one();two ();return 0;}

121

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ény122

Eljárás

� Tevékenységet hajt végre

� Aktivizá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’);…

123

Függvény

� Értéket határoz meg

� Aktivizá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;…

124

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 van125

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

11

RAM:

old_PC

4

10

126

6

Hívási lánc

� Az alprogramok hívhatnak újabb alprogramokat, azok továbbiakat, …

� A visszatérési címek folyamatosan a verem tetejére kerülnek (A verem mérete nő.)

� A hívási lánc dinamikusan épül fel, bomlik le

� A lánc miden tagja aktív, de csak a legutóbbi működik

� Rekurzió: egy aktív alprogram meghívása

127

Lokális változók

Az programegységben deklarált nevek (változók) a programegység lokális nevei (változói).

C nyelvnél (alapesetben):

� Statikus hatáskörkezelés

� Dinamikus élettartam kezelés

� Nincs automatikus kezdőérték

128

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 verembenA verem nem csak LIFO módon kezelhető

� A lokális változók ‚bázis relatív’ címzéssel elérhetőek

129

Lokális változó alacsony szinten

void eljar (){

int a=1;

int b=2;

int c=3;

… *

}

Hardverközeli programozás 1 130

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 ebpmov ebp , espsub esp , 16mov DWORD PTR [ebp-12], 1mov DWORD PTR [ebp -8], 2mov DWORD PTR [ebp -4], 3…mov esp , ebppop ebpret

Hardverközeli programozás 1 131

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ó

132

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ás133

É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ó.

134

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 felhasználja a veremben lévő paramétereket (bázis relatív, lokális változó).Meghatározódik a visszatérési érték.

135

Függvényhívás alacsony szinten

5. Visszatérési érték betétele a verembe (a visszatérési cím alá).

6. Veremből visszatérési cím (hívást követő utasítás

címe) kivétele.

7. Vezérlés visszaadása a megadott címre (lásd 6. pont).

8. Visszatérési érték kivétele a veremből.

9. Paraméterek kitakarítása a veremből.

10. Végrehajtás folytatása a következő utasítással.

136

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)

� … a visszatérési értéket az egyik regiszteren keresztül adjuk vissza

� A paraméterek kitakarítása a veremből lehet a hívó vagy a hívott feladata is

Hardverközeli programozás 1 137

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;}

Hardverközeli programozás 1 138

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:

Példa assembly-ben #1fuggv: push rbp

mov rbp, rspsub rsp, 8mov eax, DWORD PTR [rbp+16]mov DWORD PTR [rbp-8], eaxmov eax, DWORD PTR [rbp-8]add eax, 1mov DWORD PTR [rbp-4], eaxmov eax, DWORD PTR [rbp-4]mov DWORD PTR [rbp+16], eaxmov rsp, rbppop rbpret

Hardverközeli programozás 1 139

Példa assembly-ben #2main: push rbp

mov rbp, rspsub rsp, 8mov DWORD PTR [rbp-8], edimov eax, DWORD PTR [rbp-8]push raxcall fuggvpop raxmov DWORD PTR [rbp-4], eaxmov eax, DWORD PTR [rbp-4]mov rsp, rbppop rbpret

Hardverközeli programozás 1 140

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.

141

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 fontosképessége, hogy kölcsön hat az I/O eszközökkel(billentyűzet, egér, hálózati interfész, monitor).

� Ezek ez eszközök azonnali választ várnak aprocesszortól, függetlenül attól mivelfoglalkozik éppen.

� Váratlanul bekövetkező eseményekre a CPU-nakreagálnia kell.

� A megszakítás szolgál a CPU figyelménekfelhívására.

Hardverközeli programozás 1 143

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

Hardverközeli programozás 1 144

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

�Csapda: pl. nyomkövetésnél

�Elvetés: jelentős, „javíthatatlan” (hardver) hiba

� Programozott kivétel (rendszerhívás)

Hardverközeli programozás 1 145

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

Hardverközeli programozás 1 146

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

Hardverközeli programozás 1 147

Fogalmak

Maszkolás

� Egyes megszakítási kérelmek figyelése kikapcsolható

�Egyszerre, globálisan, 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

Hardverközeli programozás 1 148

Megszakításkezelés

Hardverközeli programozás 1 149

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

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

Hardverközeli programozás 1 150

Megszakításkezelési technikák

Hardverközeli programozás 1 151

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

Hardverközeli programozás 1 152

Periféria 1 Periféria 2

Külső buszok

Processzor Memória

Rendszer busz

I/O interfészek

buffer buffer

Input/output interfészek

� Kapcsolat 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 átvitel

�Párhuzamos átvitel

� Az eszközvezérlés nem a CPU feladata

Hardverközeli programozás 1 153

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

Hardverközeli programozás 1 154

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

Hardverközeli programozás 1 155

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ággalHardverközeli programozás 1 156

Hardverközeli programozás 1 157

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

Hardverközeli programozás 1 158

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: 4000-31500 MB/s (v4.0)

� Fejlesztés: 2003-

� Minden eszköznek külön link (nem osztoznak)

Hardverközeli programozás 1 159

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

Hardverközeli programozás 1 160

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: 2003-

� HDD, SSD, CD és DVD meghajtó csatlakoztatás

Hardverközeli programozás 1 161

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-1250 MB/s (v3.1)

� Fejlesztés: 1996-

� Csatlakozók: standard-A, standard-B, mini-A, mini-B, micro-A, micro-B

Hardverközeli programozás 1 162

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)

Hardverközeli programozás 1 163

CPU

North-bridge

South-bridge

AGP RAM

BIOS PCI IDE USB LAN I/O

Eszközmeghajtó

� Device Driver

� 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

Hardverközeli programozás 1 164

Perifériák

Hardverközeli programozás 1 165

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

Adattárolás

Operatív memória

Cache

Háttértárak

Tárolók osztályzása

� Írhatóság szempontjából�Csak olvasható, olvasható-írható

� Hierarchiabeli helye szerint�Elsődleges, másodlagos, harmadlagos

� Tárolási közeg szerint �Félvezető, mágneses, optikai

� Adatmegőrzés szerint�Megmaradó, nem megmaradó

� Elérés szerint�Soros elérésű, tetszőleges elérésű

Hardverközeli programozás 1 167

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 memória

Hardverközeli programozás 1 168

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, SDD

�CD-, DVD-meghajtó

�Memóriakártya

Hardverközeli programozás 1 169

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

Hardverközeli programozás 1 170

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

Programable 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)

Hardverközeli programozás 1 171

Félvezető memóriák

Erasable Programable ROM (EPROM)

� Erős UV fénnyel (lassan) törölhető a tartalom

� Majd ismét újraírható

Electrically Erasable Programable ROM (EEPROM)

� Elektronikusan, bájtonként törölhető tartalom

Flash memória

� Speciális továbbfejlesztett EEPROM

� Blokkonként (gyorsabban) törölhető

Hardverközeli programozás 1 172

Félvezető memóriák

Random Access Memory (RAM)

� Véletlen 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)

Hardverközeli programozás 1 173

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

Syncronous Dynamic RAM (SDRAM)

� Órajellel szinkronizált válasz

� Gyorsabb az aszinkron DRAM-nál (pipelineműködés)

Hardverközeli programozás 1 174

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)

Hardverközeli programozás 1 175

Gyorsítótár

� Egyes eszközök rendszeresen adatot cserélnek

� Az eszközök adatátviteli sebessége nagyon eltér

� A lassú eszköz miatt a gyors is „lelassul”

� Pl. a CPU kb. 10-szer gyorsabb a RAM-nál

� Megoldási ötlet

�Köztes tároló beiktatása (cache)

�Gyorsabb, mint a lassú eszköz (SRAM, közeli)

�Magas ára miatt teljesen nem helyettesíti a lassút

� Létjogosultság: lokalitási elvek

Hardverközeli programozás 1 176

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 is�Szekvenciális végrehajtás, tömbök

Időbeli lokalitás elve

� Ha egy program hivatkozik egy memóriacímre, akkor nagy valószínűséggel hamarosan ismét hivatkozik rá�Ciklusok

Hardverközeli programozás 1 177

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 tartalmaz

� CPU cache, GPU cache, Web cache, DNS cache

� CPU cache

�Többszintű: L1, L2, L3 cache

�On-chip vagy off-chip

Hardverközeli programozás 1 178

Gyorsítótár felépítése

� A tárolás egysége a „Sor”

� A Sor részei a „Tag” (toldalék) és a „Blokk”

� A Tag tartalmazza a Blokk főtárbeli címét és egyéb vezérlő információkat

� A Blokk a főtár egy részének a másolata

Hardverközeli programozás 1 179

Cache

Tag 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

Hardverközeli programozás 1 180

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

� Gyorsítótár írásával egyidejűleg a főtár is íródik

� Az írást a cache nem gyorsírja

Hardverközeli programozás 1 181

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.

Hardverközeli programozás 1 182

A cache működése

Hardverközeli programozás 1 183

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

� 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ő

Hardverközeli programozás 1 184

Cache hierarchia

Hardverközeli programozás 1 185

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];

...

Hardverközeli programozás 1 186

Ha az adat elfér a cache-ben,akkor a program gyorsabb!

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

Hardverközeli programozás 1 187

Merevlemez

� Winchester, Hard Disc Drive (HDD)

� Mágnesezhető, forgó lemezeken tárolt adat

� Lemezenként 2 író/olvasó fej

� Tulajdonságai

�Tárolókapacitás: <2TB

� Írási/olvasási sebesség: 100MB/s - 1GB/s

�Fordulatszám: 5400 - 15000 rpm

�Csatoló felület: ATA, SATA, SCSI, USB

� Lemez gyorsítótár mérete: 1MB – 64MB

Hardverközeli programozás 1 188

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

Hardverközeli programozás 1 189

Szektor

Hagyományos szerkezet512 bájtos szektor

Advanced Format (AF)4K native

Hardverközeli programozás 1 190

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);

...

Hardverközeli programozás 1 191

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++;}

Hardverközeli programozás 1 192

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

Hardverközeli programozás 1 193

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 Hardverközeli programozás 1 194

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

Hardverközeli programozás 1 195

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

Hardverközeli programozás 1 196

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

Hardverközeli programozás 1 197

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

Hardverközeli programozás 1 198

FAT file rendszer

Hardverközeli programozás 1 199

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 file rendszerek

� Pl.: Ext2, Ext3, Ext4

� Fájl tárolása

� Könyvtár tárolás

Hardverközeli programozás 1 200

attribútumok mutató filetartalom

a lemezen

file 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

file1 inode ID 1

file2 inode ID 2

file3 inode ID 3

file4 inode ID 4

Linux file rendszerek

Könyvtár hierarchia

Hardverközeli programozás 1 201

könyvtáribejegyzés

inode file adat

inode tábla

sys

MBR cilinder csop. cilinder csop. cilinder csop. cilinder csop. cilinder csop. cilinder csop.

partíció

adat szektorok

inode

Hardverközeli programozás 1 202

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 Disks

� 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)

� Szoftveres vagy hardverrel támogatott megvalósítás

Hardverközeli programozás 1 203

RAID példák

Hardverközeli programozás 1 204

A1

A3

A5

A7

A2

A4

A6

A8

RAID 0 (összefűzés)

A1

A2

A3

A4

RAID 1 (tükrözés)

AP

BP

CP

DP

RAID 5 (forgó paritás)

A1

B1

C1

D1

A2

B2

C2

D2

RAID 4 (paritás lemez)

Lemez 1 Lemez 2 Lemez 1 Lemez 2

Lemez 1 Lemez 2

A1

A2

A3

A4

Lemez 3

AP

B2

C2

DP

A1

B1

CP

D1

A2

BP

C1

D2

Lemez 1 Lemez 2 Lemez 3

Memória hierarchia

Regiszter

L1 cache

L2 cache

L3 cache

Memória

Lemez

Harmadlagos tár

Hardverközeli programozás 1 205

ns

µs

ms

s

Elérési idő

Memória hierarchia

Regiszter

L1 cache

L2 cache

L3 cache

Memória

Lemez

Harmadlagos tár

Hardverközeli programozás 1 206

kB

MB

GB

TB

EB

B

Tároló kapacitás

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ő

Hardverközeli programozás 1 208

Rendszerhívás

� Interfész a felhasználói program és az operációs rendszer kernel között

� A program egy szolgáltatást igényelhet az operációs rendszer kerneltől

� Tipikus megvalósítás szoftver interrupt-tal

� Kernel módú működés

� Például�Folyamatok kezelése

�Fájlok kezelése

�Eszközök kezelése

Hardverközeli programozás 1 209

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

Hardverközeli programozás 1 210

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)

Hardverközeli programozás 1 211

Folyamat

� Egyedi azonosítóval rendelkezik (PID)

� Minden folyamatnak egy szülő- és több gyermek folyamata lehet

� Multi-programozott környezetben egynél több folyamat is lehet egyszerre

� 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

Hardverközeli programozás 1 212

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).

Hardverközeli programozás 1 213

Folyamat állapotátmenetek

Hardverközeli programozás 1 214

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

� …Hardverközeli programozás 1 215

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)

Hardverközeli programozás 1 216

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

Hardverközeli programozás 1 217

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

Hardverközeli programozás 1 218

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!

Hardverközeli programozás 1 219

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.

Hardverközeli programozás 1 220

Hardverközeli programozás 1 221

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

Hardverközeli programozás 1 222

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

Hardverközeli programozás 1 223

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

Modern architektúrák

Futószalag végrehajtás

Párhuzamos végrehajtás

Szuperskalár és vektor processzorok

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

Hardverközeli programozás 1 225

„Klasszikus” architektúrák

In-order (soros) végrehajtás (Neumann)

A hagyományos SISD architektúrán alapuló rendszerek teljesítmény növelésének lehetőségei

� CPU órajel frekvencia növelés

� Közvetlen memória hozzáférés (DMA)

� Gyorsítótár (cache) használat

� Gyorsabb buszrendszer

� Társprocesszor alkalmazás (FPU)

� …Hardverközeli programozás 1 226

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

� Intel SpeedStep és AMD PowerNow!Ha a mag „üresjáratban” van az órajele és a mag feszültsége csökken (energiatakarékosság)

Hardverközeli programozás 1 227

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

�ST0-ST7

� Külön utasításkészlet

�Pl. FADD, FMUL, FDIV, FSQRT, FSIN, …

Hardverközeli programozás 1 228

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

Hardverközeli programozás 1 229

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

Hardverközeli programozás 1 230

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

Hardverközeli programozás 1 231

Pipelining

Hardverközeli programozás 1 232

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

Hardverközeli programozás 1 233

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

Hardverközeli programozás 1 234

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

Hardverközeli programozás 1 235

Hazárdok kezelése

� Adat hazárd kezelése�Pipeline buborék

�Operandus/eredmény továbbítás (bypassing)

�Sorrenden kívüli végrehajtás (OoOE)

�Regiszter átnevezés

� Strukturális hazárd�Pipeline buborék

� Vezérlési hazárd�Pipeline buborék

�Elágazásbecslés

Hardverközeli programozás 1 236

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)

Hardverközeli programozás 1 237

Pipeline buborék

Hardverközeli programozás 1 238

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

Hardverközeli programozás 1 239

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

Hardverközeli programozás 1 240

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

Hardverközeli programozás 1 241

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

Hardverközeli programozás 1 242

Regiszter átnevezés

Hardverközeli programozás 1 243

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)

Hardverközeli programozás 1 244

Elágazás becslé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

Hardverközeli programozás 1 245

Szuperskalár processzorok

� Órajelenként több utasítás hajtódik végre

� Egy processzor magban több műveleti egység

� ILP és OoOE szekvenciális program esetén

Hardverközeli programozás 1 246

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

Vektor processzorok

� A CPU egy utasítást hajt végre egyszerre adatok egydimenziós tömbjén (SIMD)

� Nagy méretű regiszterek használata (több önálló adatot is tárol egyszerre)

� Újabb utasítások bevezetése ezek kezelésére

� Példák�MMX (Intel)

�3DNow! (AMD)

�SSE

�AVX

Hardverközeli programozás 1 247

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!

Hardverközeli programozás 1 248

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

Hardverközeli programozás 1 249

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)

Hardverközeli programozás 1 250

Vektor processzorok

AVX2

� int és float adatokra is

� Új utasítások

AVX-512

� 512 bites regiszter (int, float)

� 32 darab (ZMM0-ZMM31)

Hardverközeli programozás 1 251

ZMM0 YMM0 XMM0 MM0

64 bit128 bit256 bit512 bitMMXSSEAVXAVX-512

VLIW processzorok

� Very Large Instruction Word

� Olyan speciálisan fordított programot igényel, amely explicit módon jelzi a párhuzamosan végrehajtható utasításokat

� Egy „utasítás” (ún. köteg) több kisebb, de egyszerre végrehajtható utasítást tartalmaz

� Szuperskalár ILP és OoOE

� Egyszerűbb hardver bonyolultabb fordító

� Utód: Explicitly Parallel Instruction Computing

Hardverközeli programozás 1 252

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

Hardverközeli programozás 1 253

Hyper-threading

� Az Intel SMT (Simultaneous MultiThreading) megvalósítása

� Több szál kezelése magon belül

�Több „állapottároló” processzor elem

�Egy „végrehajtó” elem

� Ha egy szálnak várnia kell, addig fusson a másik

� Minden „fizikai” mag két „logikai” magként viselkedik

� Az operációs rendszer támogatás fontos

Hardverközeli programozás 1 254

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)

Hardverközeli programozás 1 255

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

Hardverközeli programozás 1 256

OpenMP

� Folyamaton belül párhuzamosan futó szálak

�Egyik szál kitüntetett: master

� Feladat- és adat párhuzamosság

Hardverközeli programozás 1 257

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

Hardverközeli programozás 1 258

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 forschedule (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 forreduction (+:Sum)

� A következő for ciklus elosztott lefutása után az egyes privát Sum változó értékeket add össze!

Hardverközeli programozás 1 259

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!

Hardverközeli programozás 1 260

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 ez előző befelyezte). Kölcsönös kizárás.

Hardverközeli programozás 1 261

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

Hardverközeli programozás 1 262

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;}

Hardverközeli programozás 1 263

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ő

Hardverközeli programozás 1 264

CPU

RAM

busz

cso

po

nt

1

CPU

RAM

busz

cso

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

� � � ���

���

���

������

ahol S a gyorsulás, T a futásidő és A a futásidő soros végrehajtású hányada0 ≤ A ≤ 1

Hardverközeli programozás 1 265

processzor szám (N)

gyo

rsu

lás

(S)

A=0,1

A=0,2

A=0,5

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, HDMIHardverközeli programozás 1 266

Á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

Hardverközeli programozás 1 267

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

Hardverközeli programozás 1 268

Intel x86 architektúra

Processzor felépítés

Memóriakezelés

Assembly nyelv

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

Hardverközeli programozás 1 270

Memória szegmentáció

� A memória részekre van osztva

�Kód szegmens

�Adat szegmens

�Verem szegmens

�Extra 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

Hardverközeli programozás 1 271

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 + offset

� Lineáris cím = fizikai cím

Hardverközeli programozás 1 272

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)

Hardverközeli programozás 1 273

x86 regiszterkészlet

Hardverközeli programozás 1 274

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 akkumulátor, szorzás, osztás

� EBX

�Akkumulátor, bázis mutató DS-ben

� ECX

�Akkumulátor, (ciklus)számláló

� EDX

�Akkumulátor, input/output, szorzás, osztás

Hardverközeli programozás 1 275

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

Hardverközeli programozás 1 276

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

Hardverközeli programozás 1 277

x86 regiszterkészlet

EFLAGS regiszter

� Állapot bitek

� Vezérlő bitek

� Rendszer bitek

Hardverközeli programozás 1 278

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

Hardverközeli programozás 1 279

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óHardverközeli programozás 1 280

x86-64 architektúra

� Visszafelé kompatibilis az x86 (IA-32) architektúrával

� 64 bites általános célú regiszterek (RAX, RBX, RCX, RDX, RBP, RSP, RIP, RSI, RDI, R8-R15)

� 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)

Hardverközeli programozás 1 281

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

Hardverközeli programozás 1 282

Intel szintaxis.intel_syntax noprefix.globl mainmain: push ebp

mov ebp, espsub esp, 16mov DWORD PTR [ebp-16], 2mov DWORD PTR [ebp-12], 3cmp DWORD PTR [ebp-16], 4jne .L2mov eax, DWORD PTR [ebp-12]mov DWORD PTR [ebp-8], eaxjmp .L3

.L2: mov DWORD PTR [ebp-8], 4

.L3: mov eax, DWORD PTR [ebp-8]add esp, 16pop ebpret

Hardverközeli programozás 1 283

Assembly szintaxis

AT&T szintaxis.att_syntax noprefix.globl mainmain: pushl %ebp

movl %esp, %ebpsubl $16, %espmovl $2, -16(%ebp)movl $3, -12(%ebp)cmpl $4, -16(%ebp)jne .L2movl -12(%ebp), %eaxmovl %eax, -8(%ebp)jmp .L3

.L2: movl $4, -8(%ebp)

.L3: movl -8(%ebp), %eaxaddl $16, %esppopl %ebpret

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 (∞)

Hardverközeli programozás 1 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 ]

Hardverközeli programozás 1 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

Hardverközeli programozás 1 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

Hardverközeli programozás 1 287

��:��:!�:

�:

"�:#�:

�$%�&'�(

�)*)�)

!)

�+!+*,

�,�$%�&'�(

�)*)�)

!)

�+!+

*,�$%�&'�(

1

248

�$%�&'�(

��1231á'

'�((�

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

Hardverközeli programozás 1 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)

Hardverközeli programozás 1 289

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

Hardverközeli programozás 1 290

Képernyőre írás lehetőségei.TEXT:.string "This is a text.\n"...

# printf("This is a text.\n");mov eax, 0mov edi, OFFSET FLAT:.TEXTcall printf

# puts("This is a text.\n");mov edi, OFFSET FLAT:.TEXTcall puts

# write(1,"This is a text.\n",16);mov edi, 1mov esi, OFFSET FLAT:.TEXTmov edx, 16call write

# interruptmov eax, 4mov ecx, OFFSET FLAT:.TEXTmov edx, 16int 0x80

Hardverközeli programozás 1 291

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ás

Hardverközeli programozás 1 292

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

Hardverközeli programozás 1 293

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

Hardverközeli programozás 1 294

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

Hardverközeli programozás 1 295

Intel Core i7

� Megjelenési év 2008

� 64 bites regiszterek (x86-64)

� Mikroarchitektúra: Nehalem, Sandy Bridge, IvyBridge, Haswell, Broadwell, …

� 45-14nm technológia

� 2-6 mag

� LGA aljzat (1000-2000 kontaktus)

� L3 cache, integrált GPU, AVX-512, integrált NorthBridge

Hardverközeli programozás 1 296

Főbb architektúra családok

� Intel X86 �

� Motorola 68000

� MIPS

� Transmeta

� PowerPC

� ARM

� Microchip PIC

� AVR

Hardverközeli programozás 1 297

MCU

CPU

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 D1, (A1) ;move 2 bytes from D1 to theaddress stored in A1

Hardverközeli programozás 1 298

MIPS

� RISC� 32/64 bites� 5 fokozatú pipe-line 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 addressstored in t0 to t1

Hardverközeli programozás 1 299

Transmeta Crusoe

� Alacsony fogyasztás� Szoftveres ISA

�X86 kompatibilitás�Akár Java bájtkód futtatás

� VLIW (128bit)� Megjelenés: 2000� Többszintű cache� Utód: Efficeon� Alkalmazás: tablet-ek, laptop-ok

Hardverközeli programozás 1 300

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

Hardverközeli programozás 1 301

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

Hardverközeli programozás 1 302

Microchip PIC

� Mikrokontroller� (Módosított) Harvard architektúra� RISC� 8/12/14/16 bites� 1 általános munkaregiszter (W)� Nincs különbség adatmemória és regiszter között

�Pl.: a PC és egyéb regiszterek memóriára vetítve

MOVLW d’29’ ;move decimal 29 into W

Hardverközeli programozás 1 303

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

Hardverközeli programozás 1 304

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

Hardverközeli programozás 1 305

High-Performance Computing

HPC - TOP 1 (2015)

� 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)

Hardverközeli programozás 1 306

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

� …

Hardverközeli programozás 1 307

Hardverközeli programozás 1 308

Köszönöm a figyelmet!

Sikeres felkészülést!

top related