szar_tetelek
TRANSCRIPT
![Page 1: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/1.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 1/133
Számítógép architektúra
k idolgozott tételsor
Szegedi Tudományegyetem
Szeged, 2007.
![Page 2: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/2.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 2/133
2.
Tartalomjegyzék
1. Fordítás, értelmezés ........................................................................................................................ 4
2. Numerikus adatok ábrázolása: fixpontos ábrázolás, konverzió számrendszerek között. Negatív
számok ábrázolásai. ......................................................................................................................... 5
3. Lebegőpontos számok. IEEE 754 szabvány. ..................................................................................... 8
4. Hamming távolság. Hibaészlelő, hibajavító kódok. ....................................................................... 10
5. Digitális logikai szint. Kapuk. Boole algebra. Boole függvények megvalósítása, áramköri
ekvivalenciája. A Boole algebra legfontosabb azonosságai, dualitás............................................ 12
6. Kombinációs áramkörök, multiplexer, demultiplexer, dekódoló, összehasonlító, programozható
logikai tömbök. .............................................................................................................................. 15
7. Aritmetikai áramkörök. Léptető, fél és teljes összeadó, ALU, átvitel továbbterjesztő és kiválasztó
összeadás....................................................................................................................................... 17
8. Nem kombinációs áramkörök. Óra, tárolók, flip-flop-ok............................................................... 20
9. Processzor szintű párhuzamosítás................................................................................................. 24
10. Gyorsító tár (cache). Találati és hiba arány. Közös és osztott gyorsító tár. Direkt leképezésű és
halmaz kezelésű gyorsító tár. Memóriába írás.............................................................................. 26
11. Operandus megadás módjai. Közvetlen operandus, direkt, regiszter, regiszter-indirekt, indexelt,
bázis-index címzés ......................................................................................................................... 29
12. Sínek. Sín Protokoll. Master – szolga. Sín vezérlő, vevő, adóvevő. Sín szélessége. Sokszorozott
sín. Sín időzítés: szinkron, aszinkron sín, teljes kézfogás. Sín ütemezés. Sín műveletek. ............. 31
13. Általános soros sín ......................................................................................................................... 34
14. PCI Express ..................................................................................................................................... 37
15. A CPU részei, feladatai. CPU, adatút. Három, kettő, egy és nulla címes utasítások. ..................... 41
16. Mikroarchitektúra szint. Az ALU-val végezhető műveletek. Memória műveletek. ALU és az adatút
vezérlése. Mikroutasítások: Mic-1. Mic-1 működése.................................................................... 43
17. A Mic-1 memória ciklusa. .............................................................................................................. 47
18. MPC új értékének kialakulása Mic-1-en. ....................................................................................... 48
19. A WIDE utasítás hatása és működése Mic-1-en. ........................................................................... 49
20. Parallel Input/Output (PIO), valódi és memória leképezett I/O eszközök. Teljes és részleges
címdekódolás. Programozott és megszakítás vezérelt I/O. DMA. ................................................ 50
21. Utasítás szintű párhuzamosítás, csővezeték (pipelining). ............................................................. 52
22. Utasítás betöltő egység. Mic – 2. ................................................................................................... 54
23. Csővonalas terv: a Mic-3 ................................................................................................................ 5624. Egy hétszakaszú szállítószalag: a Mic-4 csővezetéke..................................................................... 57
![Page 3: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/3.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 3/133
3.
25. Elágazás, eltolási rés, statikus és dinamikus elágazás jövendölés................................................. 60
26. Sorrendtől eltérő végrehajtás, szuperskaláris architektúra, függőségek, regiszter átnevezés,
feltételezett végrehajtás................................................................................................................ 62
27. Feltételes végrehajtás, predikáció................................................................................................. 64
28. A Pentium 4, az UltraSPARC III és az I-8051 mikroarchitektúrája. ................................................ 65
29. A Pentium 4, az UltraSPARC III és az I-8051 mikroarchitektúrájának összehasonlítása................ 70
30. Gépi utasítási szint. Memória modellek, memória szemantika. A Pentium 4, az UltraSPARC III és
az I-8051 regiszterei ....................................................................................................................... 71
31. A Pentium 4, az UltraSPARC III, az I-8051 utasítás formátumai, címzési módjai........................... 75
32. Veremcímzés. Fordított lengyel (postfix) jelölés. Dijkstra algoritmusa. Postfix alakú formulák
kiértékelése ................................................................................................................................... 79
33. Vezérlési folyamat. Szekvenciális vezérlés, elágazás, ciklus szervezés, eljárás, rekurzív eljárás,
korutinok, megszakítás, csapda ..................................................................................................... 81
34. Operációs rendszer szintje. Virtuális memória. Lapméret, elaprózódás. Szegmentálás. A Pentium
4 és az UltraSPARC III virtuális memóriája..................................................................................... 84
35. Terminál. Modemek, jelzési, adatátviteli sebesség....................................................................... 90
36. ADSL, kábeles internet. .................................................................................................................. 93
37. Az Intel 8086/88 utasításai (adatmozgató, aritmetikai, logikai, string-kezelő, bitléptető/forgató,
vezérlésátadó, processzor-vezérlő, input/output utasítások, program megszakítás, szemafor). 97
38. Pszeudo operátorok. Egyszerű adatdefiníciós utasítások. Struktúra, rekord (definíció, hívás,
mezőre hivatkozás)...................................................................................................................... 103
39. Eljárás (deklaráció, hívás). Paraméter átadás/átvétel különböző módjai................................... 106
40. Lokális adatterület, rekurzív és reentrant eljárások.................................................................... 108
41. Feltételes fordítás........................................................................................................................ 109
42. Makró (definíció, hívás), blokk ismétlés ...................................................................................... 110
43. Címkék, változók, konstansok, kifejezések .................................................................................. 115
44. Szegmens definíció, szegmens csoport, aktív szegmensek kijelölése, globális szimbólumok..... 119
45. Egyszerûsített lexikális elemzõ .................................................................................................... 121
46. Két menetes assembler fordító ................................................................................................... 125
47. Az include utasítás. Az include utasítás feldolgozása a fordítás során........................................ 127
48. Makró generátor.......................................................................................................................... 128
49. Szerkesztő.................................................................................................................................... 129
50. Time sharing (időosztás). binding (cím hozzárendelés), dinamikus szerkesztés ......................... 131
51. Programok hangolása .................................................................................................................. 133
![Page 4: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/4.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 4/133
4.
1. Fordítás, értelmezés
A probléma két oldalról is megközelíthető. Mindkettő az ember számára a gépi nyelvnél
kényelmesebben használható új utasításrendszer tervezésére épül. Az új utasítások együttese is egy
nyelvet alkot – nevezzük ezt L1-nek -, ugyanúgy, ahogy a beépített utasítások nyelvet alkotnak – legyen ez utóbbi L0. A kétféle megközelítés abban különbözik egymástól, hogy a számítógép hogyan
hajtja végre az L1 nyelven írott porgramokat, miközben csak a saját, L0 gépi nyelvén írt programokat
képes végrehajtani.
Az L1 nyelvű program végrehajtásának egyik módja az, hogy először minden utasítását
helyettesítjük az L0 nyelv utasításainak egy vele ekvivalens sorozatával. Az így nyert program teljes
egészében az L0 utasításaiból áll. Ekkor az eredeti L1 nyelvű program helyett a számítógép ezt az L0
nyelvű programot hajtja végre. Ezt a módszert fordításnak nevezzük.
A másik módszer szerint megírunk egy L0 nyelvű programot, amely az L1 nyelvű programokatbemenő adatokként kezeli, és úgy hajtja végre azokat, hogy minden utasításukat elemzi, és a vele
ekvivalens L0 nyelvű utasítássorozatot azonnal végrehajtja. Ez a módszer nem igényli, hogy először
egy új, L0 nyelvű programot állítsunk elő. A módszert értelmezésnek, a végrehajtó programot pedig
értelmezőnek nevezzük.
A fordítás és az értelmezés módszere hasonló. Végül is mindkettő az L1 utasításait az L0
utasításaiból álló sorozatok végrehajtásával teljesíti. A különbség csak az, hogy a fordítás esetében
először az egész L1 nyelv programot átírjuk L0 nyelvűvé, majd az L1 programtól megszabadulunk, és
az L0 programot töltjük a számítógép memóriájába, és azt hajtjuk végre. A végrehajtás során az
újonnan előállított L0 program az, ami fut, és ami a számítógépet vezérli.
Az értelmezés esetében L1 minden utasításának elemzését és dekódolását az utasítás
azonnali végrehajtása követi. Nem keletkezik lefordított program. A számítógépet az értelmező
vezérli, számára az L1 nyelvű program csak adat. Mindkét módszert – és egyre gyakrabban a kettő
kombinációját is – széles körben alkalmazzák.
![Page 5: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/5.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 5/133
5.
2. Numerikus adatok ábrázolása: fixpontos ábrázolás, konverziószámrendszerek között. Negatív számok ábrázolásai.
A legtöbb számítógép egy szám tárolására szóló memóriája fix méretű, rögzítették a
számítógép tervezésekor. Bizonyos erőfeszítésekkel a programozó tudja a számokat ábrázolni azeredeti fix méretnél kétszer, háromszor, sőt többször nagyobb helyen is, de ez nem változtatja meg a
probléma természetét. A számítógépes erőforrásnak ez a véges természete csak azokkal a számokkal
enged foglalkozni, amelyek fix számú számjeggyel ábrázolhatók. Ezeket a számokat véges pontosságú
számoknak hívjuk.
Fixpontos számok például az előjeles, kétjegyű decimális számok.
Ábrázolási tartomány: -99 ; +99
Pontosságuk (két szomszédos szám különbsége): 1
Maximális hiba: (az ábrázolási tartományba eső) tetszőleges valós szám, és a hozzá
legközelebb lévő ábrázolható szám maximális különbsége: 1/2.
Az ember általában tízes számrendszert használ, de a számítógépek használatánál
kényelmesebb nem tízes alapú, hanem más rendszereket használni. A legfontosabb alapszámok a 2, a
8 és a 16. Ezen alapszámokra épülő számrendszereket sorrendben kettesnek (bináris), nyolcasnak
(oktális) és tizenhatosnak (hexadecimális) nevezzük.
A decimális számok 10 decimális jegyből épülnek fel: 0 1 2 3 4 5 6 7 8 9.
Szemben a bináris számokkal, amelyek nem tíz jegyet használnak, hanem 2 jegyből
szerkeszthetünk meg: 0 1.
Az oktális számok 8 oktális jegyből épülnek fel: 0 1 2 3 4 5 6 7.
A hexadecimális számoknál 16 jegy szükséges. Így 6 új szimbólum bevezetésére van szükség.
Kényelmes bevezetni az A-tól F-ig nagybetűket, amelyek a 9-et követő hat számjegy számára
szolgálnak. Így a számok a következő jegyekből épülnek fel: 0 1 2 3 4 5 6 7 8 9 A B C D E F.
Az alábbi táblázat a 4 számrendszerbeli megfelelőket mutatja be:
Decimális Bináris Oktális Hexadecimális 0 0 0 0
1 1 1 12 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
![Page 6: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/6.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 6/133
6.
Nagyon fontos az egyes számrendszerek közötti konverzió.
Bináris ->Oktális:
Osszuk hárombites csoportokra a számot. Az első 3 bit közvetlenül balról (vagy jobbról) a
decimális pont után (ezt gyakran bináris pontnak hívjuk) alkot egy csoportot, a tőlük balra eső 3 bit akövetkező csoportot és így tovább. Minden egyes ilyen hárombites csoportot direkt módon
konvertálhatunk egy egyszerű oktális számjegyre 0-tól 7-ig.
Lehet hogy szükséges egy vagy két kezdő vagy záró 0-val kitölteni a hárombites sorozatokat.
Pl.: 0 001 100 101 001 000 . 101 101 100
1 4 5 1 0 . 5 5 4
Oktális -> Bináris:
Minden oktális számjegyet cseréljünk le egy vele ekvivalens hárombites számra.
Hexadecimális -> Bináris:
Hasonló az oktálisból binárisba történő konverzióhoz, kivéve, hogy minden hexadecimális
jegy megfelel egy négybites csoportnak az előzőekben használt három bit helyett.
Pl.: 7 B A 3 . B C 4
0111 1011 1010 0011 . 1011 1100 0100
Bináris -> Hexadecimális:
Mint a binárisból oktálisba, csak 3 helyett 4 bites csoportokat kell létrehozni.
Decimális -> Bináris:
Pl.: 23,375 átszámítása kettes számrendszerbe.
Egész rész: Tört rész:
/2 marad egész *2
23 1 0.37511 1 0 .750
5 1 1 .500
2 0 1 .000
1 1
101112 0,0112
23,375 = 10111,0112
Véges tizedes tört nem biztos, hogy binárisan is véges!
![Page 7: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/7.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 7/133
7.
Bináris -> Decimális:
A legegyszerűbb módszer, amikor összegezzük a kettő azon hatványait, ahol 1-es volt a kitevőben.
Pl.: 10110 = 24 + 22 + 21 = 16 + 4 + 2 = 22.
A negatív számok megjelenítésére négy különböző módszert is használnak.
1. Előjeles nagyság (signed magniture)
Ebben a rendszerben a legbaloldalibb bit az előjelbit (a 0 , és az 1 -), és a maradék bitek
jelzik a szám abszolút értékét.
2. Egyes komplemens (one’s complement) Az egyes komplemensnek is van előjelbitje, amelynél a 0 jelenti a pozitív, 1 a negatív számot.
Azért, hogy negáljuk ezt a számot, minden 1-est 0-ra cseréljük, és minden 0-t 1-esre. Ez
természetesen az előjelbitre is vonatkozik. Az egyes komplemens képzése elavult rendszer.
Pl.: +25 =00011001,
- 25 =11100110.
Jellemzők:
a nulla kétféleképpen ábrázolható,
a legkisebb szám -127, a legnagyobb 127.
3. Kettes komplemens (two’s complement) A kettes komplemens szintén tartalmaz előjelbitet, amely 0 a pozitív, 1 pedig a negatív
számok esetében. Egy szám átváltásánál negálni kell az eredeti számot, valamint hozzá k ell adni
egyet.
Pl.: +25 =00011001
-25 =11100110 egyes komplemens,
-25 =11100111 kettes komplemens.
Jellemzők:
a nulla egyértelműen ábrázolható,
a legkisebb szám -128, a legnagyobb 127.
4. Többletes
A negyedik rendszer, amit m bites szám esetében 2m-1-többletesnek hívunk, úgy tárol egy
számot, mint saját magának és a 2m-1
-nek az összegét. Például egy 8 bites számra m = 8, a rendszert128 többletesnek nevezzük, és egy számot úgy tárolunk, mint a valódi számot plusz 128. Így a -3
megfelelője: -3 + 128 = 125, azaz a -3-at egy nyolcbites számként ábrázolva 125-öt jelent (01111101).
A -128-tól 127-ig elhelyezkedő számokat így meg tudjuk feleltetni 0-tól 255-ig terjedő számoknak,
amelyeket 8 bites pozitív számként fejezhetünk ki. Érdekességképpen igaz, hogy ez a rendszer azonos
a kettes komplemenssel fordított előjelbittel.
Pl.: +25 = 10011001 25 + 128 = 153
- 25 = 01100111 - 25 + 128 = 103
Jellemzők (128 többlet esetén):
a nulla egyértelműen ábrázolható, a legkisebb szám -128, a legnagyobb 127.
![Page 8: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/8.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 8/133
8.
3. Lebegőpontos számok. IEEE 754 szabvány.
A lebegőpontos számok:
A nagyság és a pontosság szétválasztásának módja, hogy a számokat a jól ismert tudományos jelöléssel fejezhetjük ki:
e f n 10* ahol az f a törtrész (fraction), vagy mantissza (mantissa) és az e egy pozitív vagy
negatív szám, amelyet kitevőnek vagy exponensnek (exponent) hívunk. Ennek a jelölésnek a
számítógépes verzióját lebegőpontos számnak (floating point) hívjuk.
Pl.: 3,14 = 0,314 x 101 vagy 0,000001 = 0,1 x 10-5 = 1,0 x 10-6
A kitevő nagysága a nagyságrendet tartalmazza, a pontosságot pedig a törtrész jegyeinek a
száma határozza meg. Mivel különböző módon fejezhetünk ki egy adott számot, az egyik formát
általában szabályosnak nevezzük a sok forma közül. A leggyakrabban a törtrész első számjegye az
adott szám első, nullától különböző számjegye (normalizált alak).
Pl.: 254 = 0,0254 x 104
= 0,254x103
(= 2,54x102)
Megjegyzések:
A nulla ábrázolásához külön megállapodásra van szükség (általában csupa nulla számjegybőláll).
A lebegőpontos ábrázolásoknál is meghatározható a legkisebb és a legnagyobb ábrázolhatószám, továbbá a legkisebb és legnagyobb hiba.
Máté: Architektúrák 1. előadás 43
Feladat: Ábrázoljuk nyolcas számrendszerben 25410-et: elő jelbittel kezdve, a kitevő legyen 1 jegyű(3 bites), 4-többletes, a törtrész 4 jegyű.
Megoldás: 254/8 6
31/8 7
3/8 3
3768, normalizált alak: 0,376x83,
a megoldás: 0 111 011 111 110 0002
= 0737608
+ törtrész
4-többletes kitevő
![Page 9: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/9.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 9/133
9.
Az IEEE 754-es lebegőpontos szabvány:
Körülbelül 1980-ig minden számítógépgyártónak saját lebegőpontos formája volt,
természetesen mindegyik más és más. Ennél is rosszabb, hogy néhányan valóban rosszul kezdték a
lebegőpontos számítási módszereket, amelyeknek néhány finomságát az átlag hardvertervező nem
ismeri. Ezért az 1970-es évek végén az IEEE felállított egy bizottságot a lebegőpontos számításokszabványosítására. Ez a munka vezetett el az IEEE 754-es szabványhoz. A szabvány 3 formát
(pontosságot) definiál, az egyszeres pontosságot (32 bit), a dupla pontosságot (64 bit) és a
kiterjesztett pontosságot (80 bit). A kiterjesztett arra szolgál, hogy csökkentse a kerekítési hibákat.
Ezt főleg a lebegőpontos aritmetikai egységben használják. Mind az egyszeres, mind a dupla
pontosságú forma a kettes alapot használja a törtrészben, és a többletes jelölést a kitevőben.
Mindkét forma egy előjelbittel kezdődik, ahol a 0 a pozitívat, 1 a negatívat jelöli. Ezután következik a
kitevő, amely 127-többletes kitevőt használ a szimpla pontosságban és 1023-többletest a dupla
pontosságban. A minimum (0) és a maximum (255 és 2047) kitevőket nem használjuk a normalizált
számoknál, ezek használata speciális. Végül a törtrészek következnek, 23 illetve 52 biten.
Máté: Architektúrák 1. előadás 44
IEEE 754 standard
single 32 bites, double 64 bites (, extended 80 bites).
single: Ha 0 < a kitevőrész < 255, a szám normalizált.
Normalizált tört vezető 1-es bitje nincs ábrázolva!
52 bit11 bit
1023-többletes1 bitdouble
23 bit8 bit
127-többletes1 bitsingle
| törtrész |kitevőrészelő jeltípus
Máté: Architektúrák 1. előadás 45
Normalizált számok (IEEE 754, single)
0 < kitevőrész < 255
kitevőrész = kitevő + 127, 127 többletes.
Lehetséges kitevők: -126, -125, ... , +127.Közvetlenül a törtrész elé kell képzelni egy 1-est
(implicit bit) és a bináris pontot.
Az ábrázolt szám: ± (1 + törtrész) * 2kitevő
Pl.: 1 0011 1111 1000 ... 00002 = 3F80 000016
0,5 0011 1111 0000 ... 00002 = 3F00 000016
-1,5 1011 1111 1100 ... 00002 = BFC0 000016
± kitevőrész 1. törtrész
Máté: Architektúrák 1. előadás 1
Normalizálatlan számok (IEEE 754, single)
Ha a kitevőrész = 0A bináris pontot 0 előzi meg (nincs ábrázolva).Az ábrázolt szám: ± (törtrész) * 2-127
Pl.: 2-128 = 2-127 * 0,100 ... 00002 == 0000 0000 0100 ... 0000
2= 0040 0000
16- 2-150 = - 2-127 * 0,000 ... 00012 == 1000 0000 0000 ... 00012 = 8000 000116
2-127 = 2-127 * 1,000 ... 00002 = 0000 0000 0111 ... 11112 = 007F FFFF16
± kitevőrész 0. törtrész
Máté: Architektúrák 1. előadás 47
Normalizálatlan számok (IEEE 754, single)
Ha a kitevőrész = 255
Túl nagy számok (túlcsordulás):
• (végtelen): pl. 1/0,
• NaN (Not a Number): pl. /
![Page 10: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/10.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 10/133
10.
4. Hamming távolság. Hibaészlelő, hibajavító kódok.
Az elektromos hálózatban keletkező áramlökések és egyéb okok miatt a számítógépek
memóriái néha hibáznak. Ezeknek a hibáknak a kiszűrésére bizonyos memóriák hibafelismerő vagy
hibajavító kódot alkalmaznak. Ezek használata esetén minden memóriabeli szót kiegészítenekspeciális bitekkel. Egy szó kiolvasása során a kiegészítő biteket ellenőrzik, hogy a hiba kiderüljön.
Tegyük fel, hogy egy memóriabeli szó m adatbitből áll, ehhez adunk még r redundáns vagy
más néven ellenőrző bitet. A teljes hossz legyen n (vagyis n = m + r). Egy n bites (m adatbitet és r
ellenőrző bitet tartalmazó) egységet gyakran n bites kódszónak neveznek.
Ha adott két szó, mondjuk 10001001 és 10110001, akkor megállapíthatjuk, hogy hány
bitpozíción térnek el. Az ellenőrző kódszavak 3 bitpozíción különböznek. Az eltérő bitpozíciók
számának megállapításához egy egyszerű logikai KIZÁRÓ VAGY műveletet kell végezni a két kódszón,
majd megszámolni az eredmény 1-es bitjeit. Az eltérő bitpozíciók számát a két kódszó Hammingtávolságának nevezzük. Ennek az a jelentősége, hogy ha 2 kódszó távolsága d, akkor d darab
egyszeres bithibának kell előfordulnia, ahhoz hogy az egyik kódszó a másikba alakulhasson. Például
az 11110001 és a 00110000 Hamming távolsága 3, mert 3 egyszeres bithiba szükséges ahhoz, hogy az
egyik a másikba alakulhasson.
Egy m bites memóriaszó esetén mind a 2m bitminta előfordulhat, de a redundáns bitek
kiszámításának szabálya miatt a 2n kódszó közül csak 2
m érvényes. Ha egy memóriaolvasás
érvénytelen kódot ad, akkor a számítógép azonnal tudja, hogy memóriahiba lépett fel. Az ellenőrző
biteket kiszámító algoritmus ismeretében meghatározható az összes érvényes kódszó listája, majd
ebben a listában meg lehet keresni azt a két kódszót, amelynek a Hamming távolsága minimális. Ezaz érték a teljes kódolás Hamming távolsága.
Egy kódolás hibafelismerő és hibajavító képessége a Hamming távolságtól függ: d egyszeres
bithiba felismeréséhez d1 távolságú kódolás kell, mert ebben az esetben d egyszeres bithiba
semmiféleképpen nem alakíthat át egy érvényes kódszót egy másik érvényes kódszóvá.
Hasonlóképpen, d egyszeres bithiba javításához 2d1 távolságú kódolás kell, mert így az érvényes
kódszavak olyan távol vannak egymástól, hogy még d egyszeres bithiba esetén is az eredeti kódszó
minden más kódszónál közelebb van, így egyértelműen meghatározható. Egyszerű hibafelismerő
kódolásra példaként tekintsük azt a kódolást, amikor az adatbitekhez egyetlen paritásbitet adunk. A
paritásbit értékét úgy határozzuk meg, hogy a kódszóban páros (vagy páratlan) számú 1 -es legyen.Ennek a kódolásnak a távolsága 2, mert minden egyes bithiba hibás paritású kódot eredményez.
Egyetlen bithiba felismeréséhez lehet használni. Ha hibás paritású szó kerül kiolvasásra a
memóriából, akkor hibaüzenetet kapunk.
![Page 11: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/11.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 11/133
11.
Egy hibát javítani képes, kódoláshoz szükséges ellenőrző bitek száma:
Szó hossza Ellenőrző bitek Teljes hossz Hozzáadott bitek %a
8 4 12 50
16 5 21 31
32 6 38 1964 7 71 11
128 8 136 6
256 9 265 4
512 10 522 2
Tetszőleges hosszúságú memóriaszavak hibajavító kódolására használt Hamming algoritmus,
mellyel az elméleti alsó korlát számolható ki:
A kódolás során r redundáns bitet adunk egy m bites szóhoz, így a kódszó teljes hossza n = m + r bit lesz. A biteket nem 0-val, hanem 1-gyel kezdődően sorszámozzuk, a legnagyobb helyi
értékű lesz az 1-es sorszámú. Minden olyan bit paritásbit lesz, amelynek sorszáma 2 hatványa; a többi
adatbit. Például egy 16 bites kódszóhoz 5 paritásbitet adunk. Az 1, 2, 4, 8, 16 pozíción vannak a
paritásbitek, a többi mind adatbit. A memóriaszó összesen 21 bites. Ebben a példában páros paritást
fogunk használni.
Minden paritásbit meghatározott bitpozíciókat ellenőriz; a paritásbit értékét úgy állítjuk be,
hogy az ellenőrzött pozíciókon lévő 1-esek száma páros legyen. Az egyes paritásbitek által ellenőrzött
bitpozíciók:
1.bit: 1, 3, 5, 7, 8, 9, 11, 13, 15, 17, 19, 21
2.bit: 2, 3, 6, 7, 10, 11, 14, 15, 18, 19
4.bit: 4, 5, 6, 7, 12, 13, 14, 15, 20, 21
8.bit: 8, 9, 10, 11, 12, 13, 14, 15
16.bit: 16, 17, 18, 19, 20, 21
![Page 12: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/12.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 12/133
12.
5. Digitális logikai szint. Kapuk. Boole algebra. Boole függvények megvalósítása, áramköri ekvivalenciája. A Boole algebralegfontosabb azonosságai, dualitás.
A digitális logikai szint a számítógép hierarchiáját bemutató táblázat legalján található, ezalkotja a számítógép igazi hardverét. Az alapelemek, amelyekből minden digitális számítógép felépül,
meglehetősen egyszerűek. Digitális áramköröket készíthetünk néhány nagyon egyszerű elem
különböző kombinálásával.
A digitális áramkör egy olyan áramkör, amelyben csak két logikai érték van jelen. Tipikusa n a
0 és az 1 Volt közötti jel reprezentál egy értéket (bináris 0) és a 2 és 5 Volt között ábrázol egy másik
értéket (bináris 1). Más feszültségek nem megengedettek. A pici elektromos eszközök, amelyeket
kapuknak hívunk, kétértékű jelek különböző függvényeit tudják kiszámítani. Ezek a kapuk alkotják azt
a hardverbázist, amelyből minden digitális számítógép felépül. Minden modern digitális logika végül
is azon a tényen alapul, hogy egy tranzisztor úgy tud működni, mint egy nagyon gyors bináris(kétállapotú) kapcsoló.
Az alábbi ábrán bemutatunk
egy bipoláris tranzisztort (a kör), mely
be van ágyazva egy egyszerű
áramkörbe. A tranzisztornak három
kapcsolata van a külvilággal: a
kollektor, a bázis és az emitter. Amikor
a bemenő feszültség, V be bizonyos érték
alatt van, a tranzisztor zárt állapotban
van, és úgy viselkedik mint egy végtelen
ellenállás. Ez azt okozza, hogy az
áramkör outputja, V ki közel van a V cc
értékéhez, ami egy külsőleg vezérelt
fezültség, tipikusan 5 Volt az ilyen
típusú tranzisztoroknál. Amikor V be meghaladja a kritikus értéket, a tranzisztor kinyit, és úgy
viselkedik, mint egy vezeték, és ezzel azt okozza, hogy a V ki -t lehúzza a földhöz (lecsökkenti a
megállapodás szerinti 0 Voltra). Nagyon fontos dolog, hogy amikor a V be alacsony, akkor a V ki magas,
és fordítva. Ez az áramkör így egy fordító (inverter), amely a logikai 0 -t logikai 1-gyé konvertálja, és alogikai 1-et pedig logikai 0-vá.
Az ábrán két tranzisztor van
egymás után sorba kötve. Ha V1 és
V2 is magas, mindkét tranzisztor
vezetni fog, és V ki alacsony lesz. Ha
valamelyik bemenet alacsony, a
megfelelő tranzisztor zárva lesz, és a
kimenet pedig magas. Tehát a V ki
akkor és csak akkor lesz alacsony, hamind a V1, mind a V2 magas.
Máté: Architektúrák 2. eloadás 29
NEM ( NOT ) kapu (3.1. ábra).
Emitter
BázisKollektor
+ Vcc
Vbe
Vki+ Vcc
0 + Vcc
0
Tranzisztor
0110XAIgazság
tábla:
Szimbolikus jelölése:A X
NEM (NOT) kapu, inverter
erosíto Inverziós gömb
+ Vcc+ Vcc
Máté: Architektúrák 2. eloadás 30
NEM-ÉS ( NAND) kapu
110101
1
0B
01
10XAIgazság
tábla:+ Vcc
V1
Vki
V2
Szimbolikus jelölése
A
BX
![Page 13: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/13.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 13/133
13.
Az alábbi ábra két tranzisztor
párhuzamos kapcsolását tartalmazza a
soros helyett. Ebben a felépítésben, ha
valamelyik bemenet magas, akkor a
megfelelő tranzisztor vezet, és a
kimenetet levezeti a földbe. Ha a két
bemenet alacsony, akkor a kimenet
magas marad.
Ez a három áramkör vagy azonos megfelelőik alkotják a három legegyszerűbb kaput. Neveik
rendre: NEM (NOT), NEM-ÉS (NAND) és NEM-VAGY (NOR) kapuk.
Az ÉS (AND) és VAGY (OR) kapuk működését nem részletezem, a fentiekhez nagyon hasonló.
A kapuk kombinációjából felépíthető áramkörök leírásához egy új típusú algebra szükséges,
amelynek változói és függvényei vannak, és csak 0 és 1 értéket vesznek fel. Egy ilyen algebrát Boole-
algebrának hívnak, felfedezőjéről George Boole, angol matematikusról elnevezve. Csakúgy mint ahagyományos algebrában, itt is függvényeket értelmezünk. A Boole függvényeknek egy vagy több
bemeneti változója van és egy eredmény keletkezik, amely csak ezen változó(k) értékétől függ. Mivel
az n változós Boole függvénynek csak 2n lehetséges kombinációja van, a függvényt teljesen leírhatjuk
egy 2n sorral rendelkező táblázattal, ahol egy-egy sor megmondja a bemeneti értékek különböző
kombinációja mellett a függvény értékét. Ezt a táblázatot igazságtáblázatnak nevezzük.
Máté: Architektúrák 2. eloadás 31
NEM-VAGY ( NOR) kapu
+ Vcc
Vki
010
0011
0B
01
10XAIgazság tábla:
V1 V2
Szimbolikus jelölése
A
BX
Máté: Architektúrák 2. eloadás 32
ÉS kapu
010
001 1
0B
11
00XAIgazság tábla:
Szimbolikus jelöléseA
BX
Máté: Architektúrák 2. eloadás 33
VAGY kapu
110
101
1
0B
11
00XAIgazság tábla:
Szimbolikus jelöléseA
BX
![Page 14: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/14.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 14/133
14.
Máté: Architektúrák 2. eloadás 35
Pl. 3 változós többségi függvény (3.3. ábra):értéke 1, ha legalább két operandus 1
1111
1011
11010001
1110
0010
0100
0000
MCBA
ABC C ABC B A BC A M
Igazság tábla:
Bool algebrai alakja:
A fölülvonás a NEM (negáció),
az egymás mellé írás az ÉS,
a + a VAGY muvelet jele.
Máté: Architektúrák 2. eloadás 36
Boole függvény megvalósításának lépései:• igazságtábla,• negált értékek,• ÉS kapuk bemenetei,• ÉS kapuk,• VAGY kapu, kimenet.
11111011110100011110 0010
01000000MCBA
A
B
C
M
A B C A B C
ABC C ABC B A BC A M
Máté: Architektúrák 2. eloadás 37
NAND és NOR elonye: teljesség (3.4. ábra).
NOT
AND OR
Máté: Architektúrák 2. eloadás 38
Definíció: Akkor mondjuk, hogy két boole függvényekvivalens, ha az összes lehetséges bemenetre a kétfüggvény azonos kimenetet ad.
Két boole függvény ekvivalenciája könnyenellenorizheto az igazság táblájuk alapján.
Pl.: AB + AC és A(B + C) ekvivalens (3.5. ábra).
Az elso függvény megvalósításához két ÉS és egyVAGY kapura van szükség, a másodikhoz elegendoegy ÉS és egy VAGY kapu.
Máté: Architektúrák 2. eloadás 39
Néhány azonosság (3.6. ábra)
A+B=ABAB=A+BDe Morgan
A+AB=AA(A+B)=AAbszorpciós
A(B+C)=AB+ACA+BC=(A+B)(A+C)Disztribúciós
(A+B)+C=A+(B+C)(AB)C=A(BC)Asszociatív
A+B=B+AAB=BAKommutatív
A+A=1AA=0Inverz
A+A=AAA=AIdempotens
1+A=10A = 0Null0+A=A1A = AIdentitás
VAGY forma ÉS formaSzabály
Máté: Architektúrák 2. eloadás 40
Disztribúciós szabály:
A+BC=A+(BC)=(A+B)(A+C)
Jelölje az ÉS muveletet 8 , a VAGY muveletet 7 ,akkor
A 7 (B 8 C) = (A 7 B) 8 (A 7 C)
![Page 15: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/15.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 15/133
15.
6. Kombinációs áramkörök, multiplexer, demultiplexer, dekódoló,összehasonlító, programozható logikai tömbök.
A digitális technika nagyon sok alkalmazása megkívánja, hogy egy áramkör többszörös
bemenettel és többszörös kimenettel rendelkezzen, és benne a kimeneteket csak a pillanatnyibemenetek határozzák meg. Az ilyen áramkört kombinációs áramkörnek hívjuk. Most vizsgáljunk meg
néhány gyakran használt kombinációs áramkört.
A digitális logika szintjén a multiplexer egy olyan áramkör, amely 2nadatbemenettel, 1
adatkimenettel és n darab vezérlőbemenettel rendelkezik, az utóbbiak kiválasztanak egy
adatbementet. A kiválasztott adatbemenetre azt mondjuk, hogy útképzéssel irányított vagy
„kapuzott” (gated) a kimenetre.
Az alábbi ábra egy nyolc
bemenetes multiplexer vázlatos ábrájátmutatja. A három vezérlővonal, az A, B
és C egy hárombites számot kódol,
amely meghatározza, hogy a nyolc
bemenő vonal közül melyiket kapuzzuk
a VAGY kapukra és ennek megfelelően
a kimenetre. Bármilyen értékek vannak
a kontroll vonalakon, hét ÉS kapunak
mindig 0 lesz a kimenete, egy kapunak
pedig vagy 0 vagy 1 lesz a kimenete a
kiválasztott bemeneti vonal értékétőlfüggően.
Az n vezérlőbemenetű
multiplexerekkel könnyedén lehet
megvalósítani n változós bool
függvényeket. Egy másik alkalmazásuk:
párhuzamosból sorosba történő
adatkonverterként való használat. A 8
bites adatot elhelyezzük a bemeneti
vonalakon, és ezután avezérlővonalakkal sorban lépegetünk
000-tól 111-ig , ezzel a 8 bitet egymás
után helyeztük el az egyetlen
kimenetre.
A demultiplexer a multiplexer inverze, amely egy egyedi bemenő jelet irányít a 2n kimenet
valamelyikére az n vezérlővonal értéktől függően.
Máté: Architektúrák 2. eloadás 44
• Multiplexer: 2 n adatbemenet, n vezérlo bemenet,1 kimenet. Az egyik adatbemenet kapuzott (gated) akimenetre (3.11. ábra).D0
D1
D2
D3
D4
D5
D6
D7
A B C
F
C
D0
D1
D2
D3
D4
D5
D6
D7
A B
F
Sematikus rajza
Máté: Architektúrák 2. eloadás 45
n vezérlo bemenetu multiplexerrel tetszés szerinti nváltozós bool függvény megvalósítható az adatbemenetekmegfelelo választásával. Pl. a 3 változós többségi függvény:
11111011110100011110001001000000MCBA
Vcc
C
D0
D1
D2D3D4
D5D6D7
A B
F
3.12. ábra
Igazság tábla:
Párhuzamos-soros átalakítás:vezérlo vonalakon rendre: 000, 001,… 111.
![Page 16: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/16.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 16/133
16.
Dekódolónak nevezzük azt az áramkört, amely n bites számot használ bemenetként, és ki
tudunk vele választani (be tudjuk állítani 1-re) pontosan egyet a 2n kimenet közül.
Egy másik hasznos áramkör az összehasonlító, amely két bemeneti szót hasonlít össze. Az
alábbi ábrán ábrázolt egyszerű összehasonlító két bemenettel dolgozik, A és B, mindegyik 4 bit
hosszú, és 1-et ad eredményül, ha a bemenetek azonosak, és 0-t ha különbözők. Az áramkör KIZÁRÓ
VAGY kapun alapul (a kizáró vagy tagadása).
Egy nagyon általános lapka a programozható logikai tömb, vagy PLA szolgál a szorzat-
összeg képzésére. A fenti ábra egy egyszerű példát mutat be, ennek a lapkának 12 változó számára
van bemeneti vonala, és 6 kimeneti vonala is van. A kis négyzetek a biztosítékokat tartalmazzák,
amelyek kiégetésével meghatározható a végrehajtandó funkció. Az olvadóbiztosítékokat két
mátrixban helyezték el: a felső az ÉS kapuk, az alsó a VAGY kapuk számára.
Máté: Architektúrák 2. eloadás 46
D0
D1
D2
D3
D4
D5
D6
D7
D0
D1
D2
D3
D4
D5
D6
D7
multiplexer demultiplexer
• Demultiplexer: egy egyedi bemenetet irányít az n vezérlobemenet értékétol függoen a 2 n kimenet egyikére
Máté: Architektúrák 2. eloadás 47
D0
D1
D2
D3
D4
D5
D6
D7
dekódoló
D0
D1
D2
D3
D4
D5
D6
D7
demultiplexer
• Dekódoló: n bemenet, 2 n kimenet. Pontosan egy kimenetenlesz 1 (3.13. ábra). Demultiplexerrel: a bemenetet igazraállítjuk.
Máté: Architektúrák 2. eloadás 48
KIZÁRÓ VAGY kapu
110101
1
0
B
01
00
XA
Igazság tábla:
Szimbolikus jelölése
A
BX
• Összehasonlító (comparator): (3.14. ábra).
A0
B0
A1
B1
A2
B2
A3
B3
A = B
4 bites összehasonlító
Máté: Architektúrák 2. eloadás 49
• Programozható logikai tömbök: PLA (3.15. ábra)(Programmable Logic Array).
0
1
49
0 1 5
A B L
12 bemeno jel
Ha ezt a biztosítékot kiégetjük,akkor nem jelenik meg #B az1-es ÉS kapu bemenetén
Ha ezt a biztosítékotkiégetjük, akkor az 1-es ÉSkapu kimenete nem jelenikmeg az 5-ös VAGY kapu
bemenetén
24 bemenovonal
50 bemenovonal
6 kimenet
![Page 17: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/17.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 17/133
17.
7. Aritmetikai áramkörök. Léptető, fél és teljes összeadó, ALU,átvitel továbbterjesztő és kiválasztó összeadás.
Aritmetikai áramkörök
ezek már kombinációs MSI áramkörök, aritmetikai műveleteket lehet velük végezni
Léptetőregiszter
8 bites (8 bemenet, 8 kimenet) egyszerű léptető
D0,…,D7: bemenő bitek
S0,…,S7: kimenő bitek
C: vezérlővonal
a kimenő bitekben a bemenő bitek pontosan 1 bittel vannak eltolva
a vezérlővonal határozza meg a léptetés irányát, 0: balra, 1: jobbra
minden bithez ÉS kapupárok tartoznak, kivéve a végeken ( S0, D7)
amikor C=1, minden kapupár jobb oldala aktivizálódik, és a megfelelő bemenő bitet küldi akimenetre. (D0 > S1, D1 > S2, D2 > S3, …)
mivel a jobb oldali ÉS kapu kimenete össze van kötve a tőle jobbra eső VAGY kapu bemenetével, jobbra léptetés hajtódik végre.
C=0 esetén az ÉS kapupár baloldali tagja kapcsolódik be és bal oldali léptetés megy végbeugyanezen a módon
Fél összeadó áramkör (half adder)
Az „Összeg” kimenethez A és B KIZÁRÓ-VAGY (XOR) eredménye kerül
Az „Átvitel” kimenethez pedig A és B ÉS (AND) ereménye kerül
![Page 18: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/18.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 18/133
18.
Teljes összeadó áramkör (full adder)
Két „fél összeadó” áramkörből épül fel Azért van szükség erre, mert ha pl. két darab 1 báj tos (8 bites) bemenő értéket akarnánk
összeadni, akkor az alsó biteken való összeadást még jól elvégezné, de amikor a felső bitekbe lépaz összeadás (felső 4-be), akkor ott nem kezeli az alsó bitekből érkező átvitelt. Olyankor
újrakezdené az összeadást ezzel elveszítve egy lehetséges átviteli értéket, vagyis a 2x4 bitet (alsóés felső) külön-külön adja össze, a köztük levő átvitelt pedig nem kezelné (alsó bitekbenkeletkezőt nem vinné át a felső bitekbe).
Átvitelt kezelő / továbbterjesztő összeadó áramkör (ripple carry adder)
Ahhoz viszont, hogy pl. két szavas (= word = 2 byte = 16 bit) bemenő értéket adjunk össze a fenti(Teljes összeadó) áramkört 16-szor meg kell ismételnünk.
Ez úgy néz ki, hogy a fenti ábra 16-szor egymás mellé van pakolva, az egész balról-jobbra halad, a
bal oldali áramkör a jobb oldalihoz úgy kapcsolódik, hogy a bal oldali „Átvitel ki” a tőle jobbra levő„Átvitel be” részhez van kapcsolva, a legjobboldalibb (a legutolsó) áramkörnél pedig az „Átvitelbe” bitet 0-nak vesszük.
Átvitel-kiválasztó összeadó áramkör (carry select adder)
Az előző áramkörnél legrosszabb esetben, ha pl. 1b-t és 1111 1111b-t hozzáadjuk egymáshoz,akkor látjuk, hogy az átvitelt folyamatosan át kell adnia a következő bitnek, és a legfontosabb,hogy az alsó és felső bitek között is az áramköröknek, hogy ne vesszen el sehol az átvitel.
![Page 19: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/19.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 19/133
19.
Az átvitel-kiválasztó áramkör ennél a megoldásnál 2-szer gyorsabb, ugyanis ha pl. egy 32 bites
összeadót nem 1 felső 16 bitesre és 1 alsó 16 bitesre bontunk, hanem 1 alsó 16 bitest és 2 felső 16
bitest csinálunk (ezzel megduplázva a felső összeadó hardverét) megtehetjük azt, hogy egy időbenelindítjuk mind a 3 összeadót, mert ugye a sima átvitelt kezelő áramkörnél először végig kell futniaaz alsó 16 bitesnek, hogy meglássuk van-e átvitel, amit a felső 16 bitesbe át kell adni. E helyett a 2
felső 16 bitest elindítjuk egyszerre az alsó 16 bitessel együtt, az egyik felső 16 bites összeadót„Átvitel be” = 1 értékkel, a másikat pedig „Átvitel be” = 0 értékkel. Amikor pedig lefutott mind a 3áramkör, az alsó 16 bites összeadás végeredménye már ismert lesz, azaz ilyenkor már ki tudjuk
választani, hogy melyik felső 16 bites összeadás végeredményét használjuk fel, attól függően,hogy volt-e átvitel vagy nem. Ezzel megfelezve a végrehajtási időt az átvitelt kezelő áramkörhöz
képest.
Aritmetikai-logikai egység (ALU)
Ez a példa a következő funkciók bármelyikét végre tudja hajtani: ÉS, VAGY, NEGÁCIÓ, (összeadás), ez F0, F1 bemenő értékeitől függ (00, 01, 10, 11).
Dekódoló: 2 bites, a négy művelet számára létrehozza az engedélyező jeleket
Logikai egység: (szaggatott négyzet) a négy művelet itt végződik el, közülük csak egy haladhat át alegutolsó VAGY kapun.
Mivel pontosan egy dekódolókimenet értéke lehet 1, így ezért a 4 ÉS kapuból csak pontosan egy
fog működni, a többi 3 kimenete 0 lesz, függetlenül A és B értékétől.
Normál esetben az ENA és ENB értéke 1, hogy engedélyezze a bemeneteket, INVA pedig 0. Ebbenaz esetben A és B a logikai egységbe módosítás nélkül kerülnek be.
Teljes összeadó: A és B összegét számolja ki átvitellel együtt.
Ezek az áramkörök Bitszeletek néven ismertek (bitslices) Ezek segítségével bármilyen hosszúságú ALU-t lehet építeni, pl. egy 8 bites ALU:
![Page 20: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/20.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 20/133
20.
8. Nem kombinációs áramkörök. Órák, tárolók, flip-flop-ok.
Óra
Célja, hogy a digitális áramkörökben az események történésének sorrendjét felügyelje.
Az óra ebben az értelemben egy áramkör, amely a pulzusok egy sorozatát bocsá jtja ki egy
pontosan meghatározott pulzusszélességgel, és két egymás utáni pulzus közötti időintervallummalrendelkezik.
A ciklusidő két egymást követő pulzus élei közötti időintervallum.
A pulzus frekvenciája általában 1 és 500 MHz közöt van, ennek megfelelően az órajel 1000 ns-tól 2ns-ig terjedhet.
Az óra frekvenciáját általában egy kristályoszcillátor vezérli. Ha több eseménynek kell lefutnia egy órajel alatt egy adott sorrendben, akkor az órajelet
alciklusokra kell osztanunk. Lényege, hogy az alapáramkört megcsapoljuk, és beszúrunk egyáramkört ismert késleltetéssel, így készíthetünk másodlagos órajelet, amely fáziseltolással
keletkezik az elsődlegesből.
SR-Tároló
Ahhoz, hogy legalább 1 bites memóriát készítsünk, szükségünk van egy áramkörre ami valahogyan
visszamelékszik az előző bemeneti értékre.
Egy ilyen áramkört 2 NEM-VAGY kapuból építhetünk.
S: Set (bemenet)
R: Reset (bemenet)
Q, #Q: két kimenet, amelyek egymás fordítottjai
Stabil állapot: a két kimenet 1,0 vagy 0,1
![Page 21: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/21.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 21/133
21.
Az ilyen tárolókat SR-tárolóknak (Set Reset latch) hívjuk.
A fenti két ábrán látható, hogy milyen két értéke lehet Q -nak és #Q -nak, ha S = R = 0; ha viszont
S = 1 és R = 0, akkor az S utáni NOR kapu vagy 1,0 vagy 1,1 lesz Q -tól függően, de amint atáblázatból látjuk az eredményen ez nem változtat.
Ha S = 0, R = 1, akkor az R utáni NOR kapu vagy 0,1 vagy 1, 1 #Q-tól függően, amelyek kimenete a
NOR kapuból szintén ugyanaz. Tehát a Q, #Q értékeitől függetlenül működnek a beállító bemeneti értékek: ha S = 1, akkor Q = 1
lesz, ha R = 1, akkor Q = 0 lesz. Az áramkörnek pedig mint tudjuk két stabil állapota is van, amikor
S = R = 0, azaz a két fajta beállítási értékre emlékezni fog.
Időzített SR-Tároló
Módosított SR-tároló, az állapotváltozás csak egy bizonyos időpillanatban fog töténni. Az áramkör további bemenete: órajel, ami alaphelyzetben 0.
Amikor óra = 0, az ÉS kapuk kimenete 0 lesz, tehát a stabil állapotban marad az áramkör; amikoróra = 1, az ÉS kapuk kimenete már S és R bemeneti értékétől függnek majd. (pl: S = 1, óra = 1,
R = 0, akkor a fenti kapu 1,1, tehát 1 megy tovább, a lenti ÉS kapu 1,0, tehát 0 megy továbbkimenetnek).
Időzített D-Tároló
Módosított SR-tároló, lényege, hogy az SR-tároló bizonytalanságát kiküszöböli, ugyanis van egyeset, amikor S = R = 1, ilyenkor az SR-tárolóban a Q, és #Q értékét 0,0-ra kényszeríti ez a kétbemenet, ezután az áramkör automatán átáll valamelyik stabil pozicióra, de ezt nem tudhatjukpontosan, hogy melyikre.
Lényege, hogy csak 1 bemenete van, D így a NEM kapuval kiküszöbölhető a problém a, mindig
ellentétes értékek lesznek a két ÉS kapunál. Ez már egy igazi 1 bites memória, a tárolt érték Q -ban lesz elérhető.
Flip-flop
Célja: egy meghatározott időpontban vegyünk mintát az áramkör egy adott vonaláról.
Akkor nem fordul elő, amikor az órajel állása 1, csak akkor , amikor 0-ból 1-be (felfele él) vagy 1-
ből 0-ba (lefele él) megy.
![Page 22: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/22.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 22/133
22.
A flip-flop és a tároló közti különbség, hogy az előző élvezérelt (edge triggered), míg az utóbbiszintvezérelt (level triggered).
A fenti áramkörnek lényege, hogy létre tudunk vele hozni egy rövid impulzust az órajel felmenőrészénél.
a, b, c, d pontoknál mérjük a feszültséget, amikor a-nál a hosszú órajel impulzus megérkezik, akkorc-be is eljut, valamint b-be is, de ott már egy NEM kapun keresztül.
a NEM kapuk (más fajta NEM kapu is van) sajátossága, hogy miután megérkezik az órajel hozzájukegy kicsit késleltetve (1-10 ns) váltanak át az inverzzé. Tehát, amikor a-n van órajel, akkoregyidöben eljut c-hez és a NEM kapuhoz. Mivel a NEM kapu késleltetve vált át, abban a pici
időben még a b-n is lesz órajel, de amint letelt az a késleltetési idő, átvált az inverzre, vagyis 0-ra
és akkor már nem fog működni az ÉS kapu.
És ezt az értéket le tudjuk tárolni egy D-tárolóban, ezért hívják a fenti áramkört D-flip-flop-nak.
Tárolók és flip-flop-ok.
CK: clock / órajel
(a) CK=1 (c) CK emelkedő élénél
(b) CK=0 esetén írja be D-t (d) CK lefelé menő élénél
(a,b: tároló) (c,d: flip-flop)
![Page 23: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/23.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 23/133
23.
A következő ábrán látható két függtlen D-flip-flop:
Következő ábra: közös CK-val vezérelt 8 bites D flip-flop
S: set PR: preset
R: reset CLR: clear
![Page 24: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/24.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 24/133
24.
9. Processzor szintű párhuzamosítás
Bevezető
A számítógép-tervezők ma már ahelyett, hogy a processzorok órajelét növelnék vagy a lapkákgyorsaságát növelnék a számítógép teljesítménye növelésének érdekében, inkább apárhuzamosságban látják a teljesítmény növekedésének a kulcsát (vagyis hogy több műveletetegyszerre eltudjunk végezni, ne pedig egyet-egyet nagyon gyorsan).
Processzorszintű párhuzamosság
Lényege, hogy több processzor dolgozik egyszerre ugyanazon a feladaton.
Tömbszámítógépek:
Egy tömbprocesszor nagyszámú egyforma processzorból áll, ezek ugyanazt a műveletet végzik elkülönböző adathalmazokon.
A lenti képen egy 8x8 –as processzor/memória párból álló négyzetháló látható.
Itt a processzorok az alattuk levő memóriából olvassák ki az utasításokat, amiket egy előzőlegesinicializációs fázisban töltöttek fel.
Vektorprocesszor
Vektorregisztereket használ, ezek több hagyományos regiszterből állnak.
Ezeket egymás után sorosan tölti fel a memóriából, majd páronként úgy adja őket össze, hogy egyszállítószalagos összeadóba irányítja őket a vektorregiszterekből.
Multiprocesszorok
Egy tömbprocesszor feldolgozóegységei nem függetlenek egymástól, mert közös vezérlőegységükvan.
Ezekben viszont több teljes processzor van, közösen használják a memóriát, együttműködésüket
viszont szoftveresen kell megoldani. Többféle implementációjuk is létezik:
![Page 25: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/25.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 25/133
25.
(a) (b)
a: egy sínre vannak csatlakoztatva a processzorok (gond vele: ha több processzor egyszerrepróbálja elérni a közös memóriát, akkor ütközések keletkezhetnek).
b: saját lokális memóriával rendelkeznek a processzorok, ide azokat az adatokat tárohatják,amelyeket nem kell megosztaniuk a többi processzorral.
Multiszámítógépek
Kisebb számú processzorokból álló gépek gyártása még megoldható (<=64), de nagyobb
számúaknál már a processzorok és a memória összeköttetése nehéz.
E nehézségek miatt inkább nagyszámú összekapcsolt számítógépek rendszerét építettek,amelyeknek csak lokális memóriája van. Ezek a multiszámítógépek.
E számítógépek processzorai üzenetekkel kommunikálnak. Összeköttetésük csak ritkán „mindengépet mindennel” kötésben van, inkább 2 és 3 dimenziós hálókat, fákat, gyűrűket terveznek.
Ma már a multiprocesszor és a multiszámítógép hibrid keverékén dolgoznak.
![Page 26: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/26.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 26/133
26.
10. Gyorsító tár (cache). Találati és hiba arány. Közös és osztott gyorsító tár. Direkt leképezésű és halmaz kezelésű gyorsító tár.Memóriába írás.
Gyorsító tár / Cache
A gyorsító tárra alapvetően azért van szükség, mert a processzorok gyorsabbak, mint a memóriák,ennek oka: a fejlesztők tudnának építeni olyan gyors memóriákat , mint a processzorok, de azok
jóval nagyobb helyet foglalnának (lapkák mérete és száma), valamint sokkal drágábbak lennének.
A cél (amit a cache megvalósít): a kis méretű, gyors memória.
A cache a központi memória egy kisebb része, amit a CPU lapkájára helyeztek.
Lényege, hogy a leggyakrabban használt memóriaszavakat a gyorsító tárban tartjuk, s amikor aprocesszornak szüksége van egy szóra, akkor először a gyorsító tárban keresi, ha ott nincs, akkor
történik csak memóriaolvasás. Ha a szavak jelentős része a gyorsító tárban van, akkor az elérésiidő nagymértékben csökkenhet.
Lokalitási elv: Ha egy hivatkozás a memória A címére történik, akkor a következő valószínűlegvalahol A közelében lesz. (Ugyanis a programok a futásidejük nagy részében egymás utánimemóriacímekről dolgoznak, kivéve a vezérlésátadó utasítások és eljáráshívások.) Ha A nincs a
gyorsító tárban, akkor az A-t tartalmazó (adott méretű) blokk (gyorsító sor – cache line) kerülbeolvasásra a memóriából a gyorsító tárba.
Találati és hibaarány
Jelöljük c-vel a gyorsító tár elérési idejét, m-mel a központi memória elérési idejét! Találati arány (h): az összes hivatkozás mekkora hányadát lehetett a gyorsító tárból kielégíteni. Hibaarány (1-h): az összes hivatkozás mekkora hányadát nem lehetett a gyorsító tárból kielégíteni. Átlagos elérési idő: c + (1 – h) m
Gyorsító tár és gyorsító sor mérete
Gyorsító sor: gyorsító táron belüli blokkok. A gyorsító sorokat azért alkalmazzák, mert ha keresünk egy szót a memóriában , sokkal
hatékonyabb egy n hosszú sort beolvasni, mint n-szer beolvasni egy szót. A gyorsító tár mérete minél nagyobb, annál jobb, de egyben sokkal drágább is.
A gyorsító sor mérete is szintén annál jobb, minél nagyobb, de itt viszont a beolvasási időt növelimeg nagyban.
A kettő összhangja a legfontosabb.
Osztott és közös gyorsító tár
Az adatok és az utasítások közös (egyesített) vagy külön (osztott) tárban vannak.
Az közös gyorsító tár (az utasítások és az adatok ugyanazt a gyorsító tárt használják) egyszerűbbszerkezetű és automatikusan egyensúlyban tartja az utasítások és az adatok mozgatását.
Ma mégis az osztottat használjuk, ezt Harvard-architektúrának nevezzük.
Az osztott gyorsító tár lehetővé teszi az utasítás előolvasó és az operandus-beolvasó párhuzamosműködését, a közös nem.
Mivel az utasításokat általában nem módosítják végrehajtás közben, az utasításokat tárológyorsító tár tartalmát soha nem kell visszaírni a memóriába.
![Page 27: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/27.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 27/133
27.
Direkt leképezésű gyorsító tár
Legegyszerűbb gyorsító tár
A fenti gyorsító tárnak 2048 bejegyzése (sora), gyorsító tár vonala van.
Valid : jelzi, hogy ebben érvényes adat van-e vagy nem. Amikor boot-olunk, mindenérvénytelennek van jelölve.
Tag: egyedi 16 bites érték, ami a megfelelő memóriavonalat azonosítja, ahonnan az adat jött.
Data (bejegyzés): 32 bájtos gyorsító vonal, a memóriában levő adat másolata.
A gyorsító tárban az adatok tárolásához és kinyeréséhez 4 alkotóelemre tagoljuk a címet:
Tag: a gyorsító tárban tárolt Tag megfelelője. Line: jelzi, melyik gyorsító tár bejegyzés tartalmazza a megfelelő adatokat.
Word : megmondja, hogy egy vonalon belül melyik szóra történt hivatkozás.
Byte: ha csak egyetlen bájtra érkezik kérés, megmondja hogy a szón belül melyik bájtra vanszükség.
Amikor a CPU előállít egy memóriacímet, a hardver kiveszi a címből a 11 Line bitet, és felhasználjaindexelésre a gyorsító tárban, hogy megtalálja a 2048 bejegyzés egyikét. Ha a bejegyzés érvényes,akkor a memóriacím Tag mezője és a gyorsító tár bejegyzésének Tag mezője összehasonlításrakerül. Ha megegyeznek, akkor a gyorsító tár bejegyzés tartalmazza a keresett szót. Ezt gyorsító tár
találatnak nevezzük. Ha a gyorsító tár bejegyzése érvénytelen, vagy a címkék nem egyeznek meg, akkor a keresett
bejegyzés nincs a gyorsító tárban, ez a gyorsító tár hiány .
Halmazkezelésű gyorsító tár
Ha egy program erősen használja a 0-65536 címeken levő szavakat, állandó összeütközésbe kerülamiatt, hogy minden hivatkozás feltételezhetően kilöki a másikat a gyorsító tárból.
Ennek a megoldása az, ha két vagy több vonalat is megengedünk minden gyorsító tár bejegyzésen.
Egy olyan gyorsító tárat, amelynek minden egyes címhez n lehetséges bejegyzése van, n utas
halmazkezelésű gyorsító tárnak nevezünk.
![Page 28: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/28.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 28/133
28.
A fenti kép egy 4-utas gyorsító tár. Ha a gyorsító tár vonal által mutatott sorban A, B, C, D bejegyzés egyikében V = 1 és a hozzá
tartozó Tag megegyezik a címben levő Tag-gel akkor az adat a gyorsító tárban van. Amikor új bejegyzést hozunk létre, a bent lévő tételek közül az LRU (Least Recently Used)
algoritmust használva a legrégebben használt elemet dobja el.
Memóriába írás
Stratégiák:o Írás áteresztés: az írás a memóriába történik. Ha a cím a gyorsítóban van, oda is be kell írni,
különben el kellene dobni a gyorsító sort.o Késleltetett írás: (write deferred, write back) ha a cím bent van a gyorsító tárban, akkor csak
a gyorsító tárba írunk, a memóriába csak gyorsító sor cserénél.o Írás allokálás: (write allocation) ha a cím nincs a gyorsító tárban, akkor előtte betölthetjük –
többnyire ezt alkalmazzák késleltetett írás esetén.
![Page 29: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/29.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 29/133
29.
11. Operandus megadás módjai. Közvetlen operandus, direkt,regiszter, regiszter-indirekt, indexelt, bázis-index címzés
A legtöbb utasításnak van operandusa, ezért kell valamilyen módszer az operandus helyének
megadására. Ezt nevezzük címzésnek, és ezt fogjuk a következőkben viszgálni.
Közvetlen operandus megadás
Az operandus specifikációjának a legegyszerűbb módja, ha az operandust közvetlenül az
utasításban adjuk meg, nem pedig a címét vagy más információt, amely leírja, hogy az operandus hol
található. Az ilyen operandust közvetlen operandusnak nevezzük, mert automatikusan betöltődik az
utasítással, tehát azonnal hozzáférhető felhasználásra.
A közvetlen címzésnek az a lényege, hogy nem kíván külön memóriahivatkozást az operandus
kiolvasására. A hátránya, hogy ily módon csak konstanst lehet megadni. Továbbá, az értékek száma
korlátozott a mező méretével. Mégis sok architektúra használja ezt a technikát kis egész
konstansokkal.
Pl. MOV AL, 14h
Direkt memória címzés
A memóriabeli operandus megadása egyszerűen teljes címének megadásával megtehető. Ezt
a módot direkt címzésnek nevezzük. Mint a közvetlen címzés, a direkt címzés használata is
korlátozott: az utasítás minden végrehajtása ugyanazt a memóriamezőt érinti. Tehát amíg az érték
változhat, a hely nem, vagyis a direkt címzés csak olyan globális változók elérésére használható,
amelyek címe fordításkor ismert. Azonban sok program használ globális változókat, így ez a módszer
széles körben használatos.
A címrészen az operandus logikai címe (eltolás, displacement) szerepel.
Pl. MOV AX, Szam
ahol Szam egy változó, mivel nem adtuk meg a szegmens nevét, így az alapértelmezett szegmenset
fogja használni, azaz DS:Szam.
Fontos még, hogy úgy címezzünk hogy a két operandus mérete összhangban legyen.
Regiszter címzés
A regiszter címzés alapvetően azonos a direkt címzéssel, azzal a különbséggel, hogy
memóriacím helyett regisztert határoz meg. Mivel a regiszterek (a gyors elérés és a rövid cím miatt)
nagyon fontosak, a legtöbb számítógépen ez a címzési mód a leggyakoribb. Sok fordítóprogram
alaposan megnézi, hogy mely változókat használják a legtöbbet (pl. ciklusváltozók), és ezeket
regiszterekbe tölti.
A címzés során az átmásolni kívánt adat egy általános célú regiszterben van.
Pl. MOV AX, BX
![Page 30: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/30.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 30/133
30.
Regiszter indirekt címzés
Ebben a címzési módban is a memóriából olvassuk a specifikált operandust, vagy oda írjuk,
mint a direkt címzés esetén, de nem közvetlenül a címe van adva az utasításban. Helyette a címet egy
regiszter tartalmazza. Ha egy cí met ilyen módon adunk meg, mutatónak hívjuk. A regiszter-indirekt
címzés nagy előnye, hogy úgy hivatkozik a memóriára, hogy annak címét nem kell az utasításban
tárolni. Továbbá, az utasítás különböző végrehajtása más-más memóriamezőre hivatkozhat.
Az indexelt címzés azon speciális esete, amikor nem adunk meg displacement-et. Ennél a címzési
módnál az SI, DI és a BX regiszter használható.
Pl. MOV AX, [BX]
MOV AX, [SI]
Indexelt címzés
Gyakran jól használható, ha ismerjük egy memórai címét egy regiszter tartalmához képest.Láttunk már erre példát az IJVM esetén, ahol a lokális változókat az LV regiszterhez képest címzik. Azt
a címzési módot, amikor a hivatkozott memória címét egy regiszter értéke és egy konstans határozza
meg, indexelt címzésnek nevezzük.
Az operandusban lévő 8 vagy 16 bites számot (eltolás) hozzáadja SI vagy DI tartalmához, ez lesz az
operandus logikai címe.
Pl. MOV AX, 10h[SI]
Bázis-index címzés
Néhány gép rendelkezik olyan címzési móddal, amely úgy határozza meg a hivatkozott
memória címét, hogy összeadja két regiszter tartalmát, és (esetleg) ehhez hozzáad egy eltolási
értéket. Ezt a módot bázis-index címzésnek nevezik. Az egyik regiszter a bázis, a másik az index.
A bázis-index címzés a legösszetettebb adatcímzési mód.
BX, SI vagy DI regiszter valamelyikét használhatjuk.
Pl. MOV AX, 10h[BX][SI]
MOV AX, [BX+SI+10h]
![Page 31: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/31.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 31/133
31.
12. Sínek. Sín Protokoll. Master – szolga. Sín vezérlő, vevő, adóvevő.Sín szélessége. Sokszorozott sín. Sín időzítés: szinkron,aszinkron sín, teljes kézfogás. Sín ütemezés. Sín műveletek.
Sínek
A sín (bus) egy közös elektronikus pálya a különböző eszközök között, amelyek összekötik a
CPU-t a memóriával és a B/K berendezésekkel. A korai személyi számítógépeknek egyetlen sínje
(system bus) volt, míg a mai számítógépekben már egy speciális sín áll rendelkezésre a CPU és a
memória, és legalább egy másik sín a B/K berendezések számára. Ahhoz, hogy a különböző kiegészítő
kártyákat csatlakoztatni tudjuk a rendszerhez, nagyon jól definiált szabályokat kell meghatározni a sín
működéséről, amelyeket sín protokollnak nevezünk. Számos sínt széles körben használnak a
számítástechnika világában: Omnibus (PDP-8), Unibus (PDP-11), Multibus (8086), IBM PC (PC/XT), ISA
(PC/AT), EISA (80386), Microchannel (PS/2), PCI (sok PC –nél), SCSI (sok PC –nél és munkaállomásnál),
NUBUS (Macintosh), Universal Serial Bus (modern PC-knél), FireWire (szórakoztató elektronikában),VME (fizikai laboratóriumi berendezéseknél), Camac (nagy energiájú fizikában).
Néhány sínhez csatlakoztatott berendezés aktív (master) és ezáltal kezdeményezni tudja a
sínátviteleket, míg mások passzívak (slave) és várják a kéréseket. Amikor a CPU megrendel a
lemezvezérlőtől egy blokkolvasást vagy írást, a CPU úgy viselkedik, mint egy mester, a lemezvezérlő
pedig, mint egy szolga. Azonban később a lemezvezérlő mesterként viselkedhet, amikor kiad egy
parancsot a memóriának, hogy fogadja el azt a szót, amelyet a lemezmeghajtóból olvasott be. A
bináris jelek, amelyeket a számítógép berendezései kibocsátanak, gyakran nem elég erősek, hogy
elegendő áramot adjanak a sínnek, ezért a legtöbb sínmester összekapcsolódik a sínen egy lapkával,
amelyet sín vezérlőnek (bus driver) hívnak – ez lényegében egy digitális erősítő. Hasonlóan a legtöbb
szolga egy sínvevőn (bus receiver) keresztül kapcsolódik a sínre.
Azoknál a berendezéseknél, amelyeknél mind a mester, mind pedig a szolga tevékenységére
szükség van, egy kombinált lapka áll a rendelkezésünkre, amelyet sín adóvevőnek (bus transceiver)
nevezünk. Ezek a sínhez kapcsolódó lapkák gyakran háromállapotú (tri-state) berendezések, azért
hogy le tudjanak kapcsolódni a sínről, ha már nem szükségesek, vagy némiképp eltérő módon
rákapcsolódjanak – ezt nyitott gyűjtőnek (open collector) hívjuk.
Sínszélesség
A sín szélessége az egyik legnyilvánvalóbb tervezési paraméter. Minél több címvezetéke van
a sínnek, annál nagyobb memóriát tud a központi egység közvetlenül megcímezni. Ha egy sínnek van
n címvezetéke, akkor azt a CPU 2n különböző memóriarekesz megcímzésére tudja használni. Nagy
memória használatához a sínek sok címvezetéket igényelnek.
A szélesebb sínek több vezetéket igényelnek, mint a keskenyek. Ezenkívül több fizikai helyet
is folglalnak, valamint nagyobb csatlakozókra van szükségük. Mindezek a tényezők egyre
költségesebbé teszik a síneket.
![Page 32: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/32.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 32/133
32.
Két módon tudjuk egy sín sávszélességét megnövelni: vagy csökkenteni kell a sínciklus idejét
(több adatátvitel/s), vagy növelni kell a szélességet (több bitet kell átvinni egyszerre). Ugyan egy sínt
fel is lehet gyorsítani, de ez nehéz, mivel az egyes vezetékeken a jelek kissé eltérő sebességgel
haladnak – ez a probléma sínasszimetriaként (bus skew) ismert. Minél gyorsabb egy sín, annál
nagyobb az asszimetria.
Az idők folyamán mind a címvezetékek, mind az adatvezetékek száma is megnőtt, de
mindezek némi kompatibilitási problémákat okoztak. Hogy megkerüljék a túl széles sínek
problémáját, elkezdték alkalmazni a multiplexelt sínt (multiplexed bus). Ennél a konstrukciónál nincs
külön cím és adatvezeték hanem mindezt egyetlen vezetékkel oldották meg.
Sínek időzítése
A sínek két diszjunkt kategóriába csoportosíthatók, az időzítésüktől függően. A szinkron
sínnek van egy vezetéke, amelyre egy kristályoszcillátor van kapcsolva. Ezen a vezetéken általában 5
Mhz és 100 Mhz közé eső frekvenciájú négyszög hullámokból álló jel halad. Minden síntevékenységezeknek a négyszög hullámoknak a többszöröséig tart, ezeket hívják sín c iklusoknak (bus cycles). Az
aszinkron sínnek ilyen fő órajel generátora nincs. A sínciklusok igény szerint bármilyen hosszúságúak
és nem kell, hogy minden lehetséges eszközpár között azonosak legyenek. Ahhoz hogy ne csak a CPU
legyen a sínmester, hanem bármely eszköz lehessen sínmester egy sínütemezési (bus arbitration)
mechanizmusra van szükség, hogy elkerülhessük a káoszt.
Szinkron sín
Andrew S. Tannenbaum: Számítógép architektúrák - 198. o.
Aszinkron sín
Andrew S. Tannenbaum: Számítógép architektúrák - 201. o.
Sínütemezés
A sín ütemezési mechanizmus lehet centralizált vagy decentralizált. Sok CPU–ba be van
építve egy ütemező, de gyakran egy külön lapkára van ehhez szükség. Az ütemező számára nincs
semmilyen mód arra, hogy megtudja hány eszköz kéri a sínt. Az egyetlen dolog amit meg tud
különböztetni, az hogy van kérés vagy nincs. Amikor az ütemező egy sínkérést észlel, a sínhasználatra
egy használati engedélyezés jelet ad ki. Ez az utasítás keresztül fut az összes B/K eszközön sorban,
amikor az ütemezőhöz legközelebb álló eszköz észleli az engedélyezést, ellenőrzi hogy ő adta-e ki a
kérést. Ha igen akkor átveszi a kérést és nem továbbítja tovább az engedélyezést a többi eszköz
számára. Viszont ha nem ő adta ki a kérést akkor továbbítja az engedélyt a következő eszköz
számára. Ezt a módszert láncolásnak (daisy chaining) nevezzük.
Annak érdekében, hogy elkerüljük az ütemezőtől számított távolságon alapuló implicit
prioritásokat, sok sínnek több prioritási szintje van. Minden egyes szint tartalmaz egy sínhasználat
kérése és egy sínhasználat engedélyezése vezetéket. Ha több prioritási szinten is érkezik be kérés, az
ütemező a sínhasználati engedélyt a legnagyobb prioritásúnak fogja adni, az azonos prioritású
eszközök között pedig a láncolás működik. Bizonyos ütemezőknek van egy harmadik vezetéke,
amelyet egy eszköz akkor állít be, ha fogadta az engedélyt, és átvette a sínt. Amint ezt a nyugtázó
![Page 33: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/33.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 33/133
33.
vezetéket beállították, a kérés- és engedélyezés vezetékeket már lehet negálni. Ennek következtében
további eszközök kérhetik a sínt, mialatt az első eszköz már használja. Mire az aktuális adatátvitel
befejeződik, a következő sínmester már ki van választva. Amint a nyugtázás vezetéket negálták,
azonnal el is kezdhet dolgozni, ekkor egy újabb ütemezési forduló kezdődik. Annak érdekében, hogy
a CPU-nak ne kelljen versenyeznie a sínen lévő B/K eszközökkel, a memóriát egy a B/K eszközöktől
elkülönített sínre teszik.
A decentralizált sínütemezés esetében minden eszköz minden kérésvezetéket figyel, így
minden sín ciklus végén minden eszköz tudni fogja, a kérő eszköz volt-e a legnagyobb prioritású és
hogy megkapja-e a sínhasználat engedélyezését a következő ciklusban. Ez az ütemezési módszer több
vezetéket igényel, viszont megtakarítható az ütemező várható költsége, ezen kívül az eszközök
számát korlátozza a kérési vezetékek számára.
Sínműveletek
Rendszerint egyszerre egy szót visz át a sín, azonban amikor gyorsítótárat használnak, egyegész sor beolvasása lenne szükséges. Ebben az esetben a blokkátvitel hatékonyabb lehet, mint az
egyes szavak átvitele. Amikor egy blokkátvitel megkezdődik, a sínmester megadja a szolgának az
átvinni kívánt szavak számát és ezután minden egyes órajel-periódusban vissza fog adni egy szót,
amíg csak a számláló el nem fogy.
Egy többprocesszoros rendszerben, amelyben két vagy több CPU van rákapcsolva ugyanarra
a sínre, biztosítani kell, hogy egy időben csak egy CPU használhasson valamilyen kritikus
adatstruktúrát a memóriából. Egy tipikus megoldás erre a célra az, ha van a memóriában egy olyan
változó, amely 0, ha egyik CPU sem használja az adatstruktúrát és 1, ha használatban van. Ha viszont
mindkét CPU azt látja, hogy a kontrollváltozó értéke 0, akkor mindegyik átállítja 1-re, és azt gondolja,hogy ő az egyetlen CPU, amely használja. Egy ilyen eseménysorozat káoszhoz vezethet.
A többprocesszoros rendszerekben gyakran alkalmazunk ún. módosítás-visszaírás sínciklust,
amely lehetővé teszi, hogy bármely CPU beolvasson egy szót, megvizsgálja, és visszaírja a memóriába
anélkül, hogy lekapcsolódna a sínről. Ez a fajta sínciklus megelőzi azt, hogy egy konkurens CPU
használni tudja a sínt, és így befolyásolhassa az első CPU működését.
Létezik egy speciális sínművelet, amely a megszakítások kezelésére szolgál. Amikor a CPU
utasít egy B/K eszközt, hogy tegyen meg valamit, általában egy megszakítást vár visszajelzésként,
amikor a feladat elkészült. A megszakításkérés jelzéséhez szükség van a sínre. Mivel több eszköz
kérhet megszakítást egyszerre, ezért ütemezési problémák merülnek fel. Szokásos megoldás az, hogy
az egyes eszközökhöz prioritásokat rendelünk és egy központi ütemező használatával pedig a
leginkább kritikus eszközök számára magas prioritást adunk.
![Page 34: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/34.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 34/133
34.
13. Általános soros sín
A PCI sín és a PCI Express kiválóan alkalmazható nagy sebességű perifériák számítógéphez
kapcsolásához, azonban túlságosan drágák az alacsony sebességű perifériák, például az egér vagy a
billentyűzet számára. Történelmileg minden szabványos B/K eszköz egyedi módon kapcsolódott aszámítógéphez, amelyben az új eszközök számára volt néhány szabad ISA vagy PCI-csatlakozó. Ez a
megoldás már a kezdetektől problémás volt.
Például az új perifériák gyakran saját ISA vagy PCI kártyával kaphatók. Általában a felhasználó
felelős a kártyán lévő kapcsolók és vezetékáthidalások (jumper) helyes konfigurálásáért, valamint
azért, hogy e beállítások ne kerüljenek konfliktusba más kártyákkal. Azután a felhasználónak fel kell
nyitnia a számítógép házát, gondosan behelyezni az új kártyát, visszazárni a házat, majd újraindítani a
számítógépet. Sok ember számára ez az eljárás nehézkes és hibalehetőségeket rejt magában.
Ráadásul az ISA- és PCI-csatlakozások száma meglehetősen korlátozott (általában kettő vagy három).
A „csatlakoztasd és működik” kártyák ugyan kiküszöbölik a vezetékáthidalásokkal való vesződést,azonban továbbra is a felhasználónak kell felnyitnia a számítógépet, és betennie a kártyát, valamint a
síncsatlakozások száma is korlátozott.
1993-ban hét vállalat – a Compaq, DEC, IBM, Intel, Microsoft, NEC és a Northern Telecom –
képviselői összeültek, hogy megvitassák a problémát, és a számítógépek és az alacsony sebességű
perifériák összekapcsolásának jobb módját dolgozzák ki. Azóta már cégek százai csatlakoztak
hozzájuk. Az eredményül kapott szabványt, az USB-t hivatalosan 1998-ban jelentették be, és már
széles körben alkalmazzák személyi számítógépekben.
Néhány cél azok közül, amelyeket az USB-t eredetileg kidolgozó és a munkát elindító cégekfogalmaztak meg:
A felhasználóknak ne kelljen minikapcsolókat (switch), vezetékátkötéseket (jumper)beállítaniuk sem a bővítőkártyákon, sem a készülékekben.
A felhasználóknak ne kelljen felnyitniuk a számítógép házát, hogy egy új perifériátcsatlakoztathassanak.
Egyetlen fajta kábel legyen, amely az összes készülék számára alkalmas. A perifériák az elektromos energiát is ezen a kábelen keresztül kapják. Egyetlen számítógéphez legalább 127 eszközt lehessen csatlakoztatni.
A rendszer ki tudjon szolgálni valós idejű perifériákat is (hang, telefon).
A készülékeket úgy is lehessen telepíteni, hogy a számítógép közben működik. Ne kelljen újraindítani a számítógépet a készülék csatlakoztatása után. Az új sín és a rajta lévő eszközök előállítási költsége ne legyen magas.
Az USB-szabvány kielégíti mindezeket az elvárásokat. Olyan alacsony sebességű eszközök
számára tervezték, mint a billentyűzet, egerek, állóképkamera, fényképszkenner, digitális telefon stb.
Az USB 1.0-ás verziójának sávszélessége mintegy 1,5 MB/s, amely elegendő a billentyűzet és az
egerek számára, az 1.1-es verzió pedig 12 MB/s sebességgel működik, amely elegendő a nyomtatók,
digitális fényképezőgépek és sok más eszköz számára. Ezeket a viszonylag alacsony határértékeket a
költségek alacsony szinten tartása miatt választották.
![Page 35: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/35.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 35/133
35.
Egy USB-rendszer egy központi csomópontból (root hub) áll, amely a rendszersínre
csatlakozik. Ez a csomópont több csatlakozót tartalmaz a külső B/K eszközök vagy újabb
csomópontok számára, amelyek további csatlakozási lehetőségeket biztosíthatnak, így az USB-
rendszer topológiája egy olyan fa, amelynek a gyökere a számítógép belsejében lévő központi
csomópont. A kábelek végén két különböző csatlakozó van, egyik csak a B/K eszközbe, a másik csak
az elosztóba dugható be, ezzel meggátolható, hogy véletlenül két csomópont két csatlakozója legyen
összekötve a kábellel.
A kábel négy vezetékszálat tartalmaz: kettőt az adatok, egyet a tápfeszültség (5 V) és egyet
a föld számára. A jeltovábbító rendszer a 0-kat feszültségátmenetként, az 1-eket pedig a
feszültségátmenet hiányaként továbbítja, így egy hosszú 0 sorozat szabályos impulzusfolyamot
generál.
Egy új eszköz csatlakoztatásakor a központi csomópont érzékeli az eseményt és megszakítást
kezdeményez. Ezután az operációs rendszer lekérdezi, milyen eszközről van szó, valamint hogy
mekkora USB-sávszélességre van szüksége. Ha az operációs rendszer úgy dönt, hogy van elegendősávszélesség az eszköz számára, akkor az eszköznek címet, egyedi azonosító számot (1-127) ad, majd
ezt a címet és más paramétereket tölt a B/K eszközben lévő konfigurációs regiszterekbe. Ilyen módon
az új eszközök menet közben csatlakoztathatók a számítógéphez anélkül, hogy a felhasználónak
bármit is konfigurálnia kellene, vagy új ISA vagy PCI kártyákat kellene a számítógépbe helyeznie. A
még konfigurálatlan eszköz címe kezdetben 0, tehát megcímezhető. A kábelezés megkönnyítése
érdekében sok USB-eszköz beépített csomópontot tartalmaz, amelybe további USB-eszközök
dughatók. Például egy USB-monitor rendelkezhet két csatlakozóval: a bal, illetve a jobb oldali
hangszóró számára.
Logikailag az USB-rendszer úgy tekinthető, mint bitcsatornák halmaza a központicsomóponttól az eszközökig. Minden eszköz legfeljebb 16 alcsatornára oszthatja fel a csatornáját a
különböző jellegű adatok számára (például hang, video). Minden egyes csatornán vagy alcsatornán az
adatok a központi csomópontból az eszköz felé vagy fordított irányban áramolnak. Két B/K eszköz
között nincs adatforgalom.
Pontosan 1,00 +- 0,05 ms-ként a központi csomópont egy új üzenetváltási keretet (frame)
küld szét, amelynek segítségével minden B/K eszközt szinkronizál. Egy üzenetváltási keret mindig egy
bitcsatornához kapcsolódik, és csomagokból áll, amelyekből az elsőt minden esetben a központi
csomópont küldi az eszköznek. A keretben lévő többi csomag iránya lehet ugyanilyen vagy az
eszköztől a központi csomópont felé haladó.
Az USB négyféle keretet különböztet meg: vezérlési, izoszinkron, tömeges adat és
megszakítási kereteket. A vezérlési keret az eszközök konfigurálására szolgál, parancsok küldésére
vagy az eszközök állapotának lekérdezésére. Az izoszinkron kereteket a valós idejű eszkzök
használják, például a mikrofonok, hangszórók és telefonok, amelyeknek pontosan meghatározott
(időnként feltétlenül) adatokat kell küldeniük vagy fogadniuk, bár a jeleknek jól kiszámítható
késleltetése van. Hiba esetén az adatokat nem kell megismételni. A tömeges adatkeretek nagy
tömegű adat átvitelére szolgálnak a számítógéptől az eszközhöz, például a nyomtatókhoz, vagy
fordítva, de valós idejű továbbításra nincs szükség. Végül, a megszakítási keretekre azért van szükség,
mert az USB nem támogatja a megszakításokat. Például ahelyett, hogy a billentyűzet minden
![Page 36: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/36.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 36/133
36.
billentyű lenyomásakor megszakítást okozna, az operációs rendszer le tudja kérdezni 50 ms-ként és
össze tudja gyűjteni a billentyűlenyomásokat.
Egy keret egy vagy több csomagot tartalmaz, valószínűleg mindkét irányúból néhányat. Négy
különböző csomag van: token, adat, kézfogás és speciális. A token csomagok a központi csomópont
felől érkeznek az eszközökhöz, és a feladatuk a rendszer irányítása. A keret kezdete csomag (SOF) azelső minden keretben; ez jelzi a keret kezdetét. Ha nincs teendő, a SOF lehet az egyetlen csomag a
keretben. Az IN token csomag egy lekérdezés, az eszköztől kér bizonyos adatokat. Az IN csomagban
lévő mezők azonosítják a bitalcsatornát, így az eszköz tudja, milyen adatokat kell visszaküldenie (ha
több adatfolyama is van). Az OUT token csomag azt jelzi, hogy utána adatok következnek az eszköz
számára. A negyedik token csomagtípus a SETUP, és az eszközök konfigurálására használják.
A token csomagon kívül még háromfajta csomag van. Ezek a DATA, a kézfogás és a speciális
csomag. Egy 8 bites szinkronizációs mezőből, egy 8 bites csomagtípusból (PID) és a hasznos adatból,
valamint egy 16 bites CRC kódból áll, a hibás átvitel detektálására. Háromfajta kézfogás csomag van:
az ACK, a NAK és a STALL.
Miután az USB-szabványt 1998-ban véglegesítették, az USB tervezőinek további feladatuk
már nem volt, így az USB egy új, nagy sebességű, USB 2.0-nak nevezett verzióján kezdtek el dolgozni.
A szabvány hasonlít a régebbi 1.1-es verzióhoz és visszafele kompatibilis is vele, azonban egy új,
harmadik sebességet (480 Mbps) vezet be a két meglévő mellé. Vannak még további kisebb
különbségek is, mint például az interfész a központi csomópont és a vezérlő között. AZ USB 1.1-ben
kétféle interfész volt. Az elsőt, az UHCI-t, az Intel tervezte és a terhek zömét a szoftverkészítőkre
hárította. A másikat, az OHCI-t a Microsoft tervezte, és a terhek zömét a hardverfejlesztőkre
hárította. Az USB 2.0-nál megegyeztek egyetlen új interfészben, amelynek a neve EHCI.
Most, hogy az USB 480 Mbps sebességgel működik, nyilvánvalóan versenytársa az IEEE 1394
szabványú sínnek, amelyet közismerten FireWire-nek neveznek, és ami 400 Mbps sebességgel
működik. Bár majdnem minden új Pentium rendszer az USB 2.0-val kapható, mégsem valószínű, hogy
az IEEE 1394 eltűnik, mert a szórakoztató-elektronikai ipar támogatja. A kézi kamerákat, DVD-
lejátszókat és más hasonló eszközöket a belátható jövőben ezután is ellátják majd 1394 -es
interfésszel, mivel az eszközök gyártói nem akarják vállalni egy olyan szabványra történő áttérés
költségeit, amely alig valamivel jobb, mint amijük jelenleg van. A vásárlók szintén nem szeretnek
áttérni másik szabványra.
![Page 37: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/37.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 37/133
37.
14. PCI Express
Bár a PCI sín megfelelően működik a legtöbb napi alkalmazásban, a nagyobb B/K sávszélesség
iránti igény beleszemetelt az egykor szép, tiszta belső PC-architektúrába. A 3.53. ábrából világosan
látszik, hogy ma már nem a PCI sín az a központi elem, amely a PC részeit összekapcsolja. A csatolólapka vette át ezt a szerepet.
A probléma lényege, hogy egyre nagyobb számú B/K eszköz van, amely túl gyors a PCI sínhez.
A sín órajel-frekvenciájának megbütykölése nem jó megoldás, mivel akkor megjelennek a
sínaszimmetria problémái, az áthallás a vezetékek között és a kapacitáshatások, és csak még rosszabb
lesz a helyzet. Minden olyan esetben, amikor egy B/K eszköz túl gyors kezd lenni a PCI sínhez, az Intel
egy újabb speciális portot ad a csatoló lapkához, lehetővé téve, hogy ez az eszköz kikerülje a PCI sínt.
Nyilvánvaló azonban, hogy ez nem egy hosszú távra szóló megoldás.
A másik probléma a PCI sínnel az, hogy a bővítőkártyák mérete elég nagy. Nem férnek be egyhordozható asztali számítógépbe (laptopba) vagy egy tenyér számítógépbe (palmtopba), a gyártók
pedig még kisebb eszközöket szeretnének előállítani. Ezenkívül, néhány gyártó újra szeretné
strukturálni a PC-t: a CPU-t és a memóriát egy lezárt dobozba tennék, a mágneslemezegységet pedig
a monitor belsejébe. PCI kártyákkal ez lehetetlen.
Több megoldást is bejelentettek már, a legvalószínűbb nyertes azonban a PCI Express. Nem
sok köze van a PCI sínhez, valójában egyáltalán nem is sín, de a piaci szakemberek nem szeretnék a
jól ismert PCI nevet elveszíteni. Már egy ideje kaphatók olyan PC-k, amelyek ilyet tartalmaznak. Most
nézzük meg, hogyan működik.
A PCI Express architektúra
A PCI Express megoldás lényege, hogy szabaduljunk meg a párhuzamos síntől, annak sok
sínmesterétől és szolgájától, és térjünk át jól megtervezett, nagy sebességű közvetlen soros
kapcsolatokra. Ez a megoldás gyökeresen szakít az ISA/EISA/PCI síntradícióval. Sok üzletet a lokális
hálózatok világából, különösen a kapcsolt Ethernet-hálózatoktól kölcsönöztek. Az alapötlet a
következő: a PC legbelül CPU, memória- és B/K vezérlőlapkákból áll, amelyeket össze kell kapcsolni. A
PCI Express egy általános célú kapcsolót biztosít a lapkák összekötéséhez soros kapcsolat
segítségével. Egy tipikus ilyen konfigurációt mutat be a 3.57. ábra.
Ahogyan az a 3.57. ábrán is látszik a CPU, a memória és a gyorsítótár hagyományos módonkapcsolódik a csatoló lapkához. Ami új, az a kapcsoló, amely a csatoló lapkához kapcsolódik.
Mindegyik B/K lapkának saját egyedi összeköttetése van a kapcsolóhoz. Mindegyik kapcsolat két
egyirányú csatornából álló pár; az egyik csatorna a kapcsolóhoz, a másik pedig a kapcsolótól szállít
adatokat. Mindegyik csatorna két vezetéket jelent, egyik a jel, a másik a föld számára, amely így nagy
zajtűréssel rendelkezik a nagy sebességű átvitel során. Ez az architektúra a jelenlegit egy sokkal
egységesebb modellel váltaná fel, amelyben minden eszközt azonos módon kezelnek.
![Page 38: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/38.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 38/133
38.
A PCI Express a régi PCI sín architektúrától három fontos dologban tér el. Kettőt már láttunk:
a központosított kapcsoló a több leágazású sín helyett, valamint a keskeny közvetlen soros kapcsolat
a széles, párhuzamos sín helyett. A harmadik ennél kifinomultabb. A PCI sín mögött rejlő elképzelés
az, hogy a sínmester parancsot ad a szolgának, ha egy szót vagy egy adatblokkot be akar olvasni. A
PCI Express modellje ezzel szemben az, hogy egyik eszköz egy adatcsomagot küld a másik eszköznek.
A csomagfogalom, amely egy fejlécből és a hasznos adatból áll, a hálózatok világából származik. A
fejléc vezérlési információt tartalmaz, így nincs szükség arra a sok vezérlőjelre, mint a PCI sínnél. A
hasznos adat tartalmazza az átvinni kívánt adatot. Valójában egy PC a PCI Express-szel egy kicsi
csomagkapcsolt hálózat.
E három fő területtel szakítottak, ezeken kívül azonban vannak még kisebb különbségek is. A
negyedik különbség az, hogy hibajelző kódot használnak a csomagoknál, amellyel a PCI sínnél
nagyobb fokú megbízhatóságot biztosítanak. Az ötödik, hogy a kapcsolat egy lapka és a soros
kapcsoló között hosszabb lehet, elérheti az 50 cm-t; ez megengedi a rendszer áttervezését. A hatodik,
hogy a rendszer bővíthető, mivel egy eszköz lehet akár egy másik soros kapcsoló is, amellyel a
kapcsolók fastruktúráját hozhatják létre. A hetedik különbség, hogy az eszközök melegen
csatlakoztathatók, azaz csatlakoztathatók és eltávolíthatók a rendszerből, mialatt az tovább működik.
Végül, a soros csatlakozók sokkal kisebbek, mint a régi PCI -csatlakozók, így az eszközök és a
számítógépek sokkal kisebbek lehetnek. Mindent egybevéve, mindez jelentős eltávolodást jelent a
PCI síntől.
A PCI Express protokollrendszer
Maradva a csomagkapcsolt hálózati modellnél, a PCI Express réteges kapcsolati
protokollrendszerrel rendelkezik. A protokoll a két fél között párbeszédet irányító szabályok egy
halmaza. A protokollrendszer protokollok hierarchiája, amelyben az egyes problémákkal különrétegekben foglalkoznak. Példának vegyünk egy üzleti levelet. Vannak megállapodások a levél
fejrészének tartalmáról és elhelyezkedéséről, a címzett adatairól, a dátumról, az üdvözlésről, a levél
szövegéről, az aláírásról és így tovább. Vehetjük úgy, hogy ez a levél egy protokoll. Vannak további
megállapodások a borítékról, például a méretéről, hogy hová kerül a feladó címe, és mi a formája,
hová kerül a címzett és milyen formában, hová kerül a bélyeg és így tovább. Ez a két réteg és a
hozzájuk tartozó két protokoll független. Például teljesen újraformázhatjuk a levelet, de ugyanazt a
borítékot használjuk, vagy fordítva. A réteges protokollok a hatékony, moduláris tervezést szolgálják
és évtizedek óta széles körben elterjedtek a hálózati szoftverek világában. Ami újdonság, hogy most a
sínhardverbe is beépítésre kerültek.
Vizsgáljuk meg az egyes rétegeket alulról felfelé. A legalsó réteg a fizikai réteg. Azzal
foglalkozik, hogy biteket továbbít a küldőtől a fogadónak egy közvetlen kapcsolaton keresztül.
Minden egyes kapcsolat egy vagy több szimplex (azaz egyirányú) csatornapárból áll. A legegyszerűbb
esetben egy pár van, egy-egy csatorna mindkét irányban, de 2, 4, 8, 16 vagy 32 pár is megengedett.
Egy-egy csatornát sávnak neveznek. A sávok számának mindkét irányban azonosnak kell lennie. Az
első generációs termékeknek bármely irányban legalább 2,5 Gbps sebességet kell biztosí taniuk, de
azt remélik, hogy a sebesség hamarosan mindkét irányban eléri a 10 Gbps-t.
Az ISA/EISA/PCI sínekkel ellentétben a PCI Expressnek nincs fő órajel-generátora. Az eszközök
azonnal elkezdhetnek adni, amint van elküldeni való adatuk. Ez a szabadság gyorsabbá teszi a
rendszert, de egyúttal problémához is vezet. Tegyük fel, hogy az 1-es bit +3 V-tal kódolódik, a 0-s bit
![Page 39: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/39.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 39/133
39.
pedig 0 V-tal. Ha az első néhány bájt mind 0 bitekből áll, honnan tudja a fogadó, hogy adatok
érkeznek. Elvégre egy 0 bit sorozat pontosan úgy néz ki, mint egy megszakadt kapcsolat. Ezt a
problémát az úgynevezett 8b/10b kódolással oldották meg. A megoldás az, hogy 1 bitet használnak
egyetlen hasznos bájt kódolására egy 10 bites szimbólumban. Az 1024 lehetséges 10 bites értékből
kiválasztották azokat a megengedhető szimbólumokat, amelyek elegendő jelváltást tartalmaztak
ahhoz, hogy bithatárra szinkronizálják a küldőt és a fogadót fő órajel-generátor nélkül is. A 8b/10b
kódolás következményeként a kapcsolat teljes 2,5 Gbps kapacitása csupán 2 Gbps hasznos
adatmennyiség átvitelére elegendő.
Amíg a fizikai réteg a bitek átvitelével foglalkozik, addig a kapcsolati réteg a csomagok
átvitelével. Fogja a tranzakciós rétegtől kapott fejlécet és hasznos adatot, egy sorszámot és egy CRC-
nek nevezett hibajelző kódot ad hozzá. A CRC egy bizonyos algoritmusnak a fejlécre és a hasznos
adatokra történő futtatásával számítható ki. Amikor a csomag megérkezik, a fogadó is elvégzi
ugyanezt a számítást a fejlécre és a hasznos adatokra, és összehasonlítja az eredményt a csomaghoz
csatolt CRC-vel. Ha megegyeznek, egy rövid nyugtázó csomagot küld vissza, ezzel jelzi a csomag
hibátlan megérkezését. Ha a két eredmény nem egyezik, a fogadó kéri a csomag újraküldését. Ezen a
módon az adatintegritás jelentősen javult a PCI sínhez képest, amely nem biztosított lehetőséget a
sínen átküldött adatok ellenőrzésére és újraküldésére.
Annak elkerülésére, hogy egy gyors küldő eszköz olyan mennyiségű csomaggal árasszon el
egy lassú fogadó eszközt, amelyet az nem tud kezelni, egy folyamatvezérlő mechanizmust
használnak. A mechanizmus lényege, hogy a fogadó eszköz elküld a küldőnek egy bizonyos kredit
értéket, a beérkező csomagok tárolására rendelkezésre álló puffer méretét. Amikor a kredit elfogy, a
küldőnek be kell fejeznie a küldést, amíg új kreditet nem kap. Ezt a sémát elterjedten használják
mindenféle hálózatban, hogy megakadályozzák a küldő és a fogadó eltérő sebességéből eredő
adatvesztést.
A tranzakciós réteg kezeli a síntevékenységeket. Egy szó beolvasása a memóriából két
tranzakciót kíván: az egyiket a CPU vagy egy DMA csatorna kezdeményezi, és kér bizonyos adatokat,
a másikat az adatokat szolgáltató céleszköz. Azonban a tranzakciós réteg több annál, mint egyszerű
olvasások és írások kezelése. A kapcsolati réteg által biztosított nyers csomagküldést további
szolgáltatásokkal egészíti ki. Először is, minden egyes sávot feloszthat nyolc virtuális áramkörre,
amelyek mindegyike különböző jellegű forgalmat bonyolít le. A tranzakciós réteg meg tudja címkézni
a csomagokat, aszerint, hogy a nyolc forgalmi osztály melyikéhez tartoznak, a címkében lehetnek
olyan attribútumok, mint a magas prioritás, alacsony prioritás, szimatolás tiltása, soron kívüli
kézbesíthetőség és még sok egyéb. A kapcsolólapka használhatja ezeket a címkéket, amikor arról
dönt, melyik lesz a legközelebb továbbítandó csomag.
Minden tranzakció az alábbi négy címtartomány egyikét használja:
1. Memóriaterület 2. B/K terület 3. Konfigurációs terület 4. Üzenetterület
![Page 40: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/40.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 40/133
40.
A memória- és a B/K terület hasonló a jelenlegi rendszerekben lévőkhöz. A konfigurációs
terület olyan szolgáltatások megvalósítására szolgál, mint a plug-and-play. Az üzenetterület a
rengeteg létező hardvervezérlőjel szerepét veszi át. Valami ilyesmire szükség van, mivel a PCI sín
vezérlőjelei közül egy sincs meg a PCI Expressnél.
A PCI Express rendszer a szoftverrétegen keresztül csatlakozik az operációs rendszerhez.Képes a PCI sín emulálására, így a létező operációs rendszerek változtatás nélkül tudnak működni a
PCI Express rendszert alkalmazva. Természetesen ez a módszer nem hasznosítja a PCI Express minden
erejét, azonban a visszafelé kompatibilitás szükséges rossz, amit nem hagyhatunk figyelmen kívül,
amíg az operációs rendszereket nem módosítják úgy, hogy teljesen használatba vegyék a PCI
Expresst. A tapasztalatok szerint ez eltarthat egy darabig.
Az információáramlást a 3.58. (b) ábra mutatja. Amikor a szoftverréteg parancsot kap, azt
továbbadja a tranzakciós rétegnek, amely átalakítja a parancsot fejléc és hasznos adat alakúra. Ezt a
két rész azután a kapcsolati réteghez kerül, amely egy sorszámot kapcsol a csomag elejéhez, és
hibajelző kódot a végéhez. Az így bővített csomag kerül azután a fizikai réteghez, amely kerettel zárjale a csomag mindkét végét, hogy egy fizikai csomagot hozzon létre, amelyet aztán ténylegesen elküld.
Évtizedek óta nagy sikerrel használják a hálózatok világában azt az elképzelést, hogy miden
réteg a protokoll rétegeiben egyre mélyebbre haladva további kiegészítő információt ad az
adatokhoz. A hálózatok és a PCI Express között az a nagy különbség, hogy a hálózatok esetében a
különböző rétegekben lévő kód majdnem mindig szoftver, amely az operációs rendszer része. A PCI
Expressnél ez mind az eszközben lévő hardver része.
![Page 41: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/41.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 41/133
41.
15. A CPU részei, feladatai. CPU, adatút. Három, kettő, egy és nullacímes utasítások.
CPU és részei, feladatai
Egy egyszerű sínalapú számítógép felépítése látható a 2.1 ábrán. A CPU a számítógép „agya”.
Feladata az, hogy a központi memóriában tárolt programokat végrehajtsa úgy, hogy a programok
utasításait egymás után beolvassa, értelmezi és végrehajtja. Az egyes részegységeket egy sín köti
össze, amely címek, adatok és vezérlőjelek továbbítására szolgáló párhuzamos vezetékköteg. A sín
lehet a CPU-t tekintve külső, amely összekapcsolja azt a memóriával és a B/K egységekkel, illetve
lehet belső, ahogy azt hamarosan látni fogjuk.
A CPU több különálló részegységből áll. A vezérlőegység feladata az utasítások beolvasása a
központi memóriából és az utasítások típusának megállapítása. Az aritmetikai-logikai egység a
program utasításainak végrehajtásához szükséges műveleteket végez, mint például az összeadás vagya logikai ÉS.
A CPU egy kisméretű, gyors memóriát is tartalmaz, amelyben részeredményeket és bizonyos
vezérlőinformációkat tárol. Ez a memória több regiszterből áll, mindegyiknek meghatározott mérete
és funkciója van. Legtöbbször az összes regiszter azonos méretű. Minden regiszter képes tárolni egy
számot, amelynek az értéke kisebb a regiszter mérete által meghatározott maximumnál. A
regisztereket nagy sebességgel lehet olvasni és írni, mivel a CPU-n belül vannak.
A legfontosabb regiszter az utasítás- vagy programszámláló, amely a következő
végrehajtandó utasítás címét tartalmazza. Az „utasításszámláló” név kissé félrevezető, mert semmit
sem számlálunk meg vele, ennek ellenére az elnevezés általánosan elterjedt. Fontos még az
utasításregiszter , amely az éppen végrehajtás alatt levő utasítást tartalmazza. A legtöbb számítógép
még számos egyéb regisztert is tartalmaz, ezek némelyike általános célú, míg mások speciális célúak.
A CPU felépítése
Egy tipikus Neumann-elvű számítógép egy részének belső felépítése a 2.2 ábrán látható
részletesebben. Ez a rész az ún. adatút, amelynek részei a regiszterek, az aritmetikai-logikai egység
és az ezeket összekötő néhány sín. A regiszterek két ALU bemeneti regisztere csatlakoznak, ezeket az
ábrán A-val és B-vel jelöltük. Ezek a regiszterek tárolják a bemeneti adatokat, amíg az ALU más
számításokon dolgozik. Az adatút minden számítógépben nagyon fontos, ezért hosszasan fogjuktárgyalni a könyv f ejezeteiben.
Maga az ALU a bemenő adatokon összeadást, kivonást és egyéb egyszerű műveleteket végez,
és az eredményt a kimeneti regiszterbe teszi. Ennek a kimeneti regiszternek a tartalma visszaírható
egy regiszterbe. Később, ha szükséges, a regiszter tartalma beírható a memóriába. Nem minden
számítógép terve tartalmazza az A, B és a kimeneti regisztert. Az ábrán az összeadást mutattuk be.
A legtöbb utasítás a következő két kategória egyikébe sorolható: regiszter-memória vagy
regiszter-regiszter. A regiszter-memória utasítások segítségével tölthetünk át szavakat a memóriából
regiszterekbe, ahol a soron következő utasítások például az ALU bemeneteként használhatják. Másregiszter-memória utasítások segítségével a regiszterek tartalmát írhatjuk vissza a memóriába.
![Page 42: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/42.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 42/133
42.
A másik csoportba tartoznak a regiszter-regiszter utasítások. Egy tipikus regiszter-regiszter
utasítás vesz két operandust a regiszterekből, elhelyezi őket az ALU bemeneti regisztereibe, az ALU
elvégez rajtuk valamilyen műveletet – például összeadást vagy logikai ÉS-t -, majd az eredményt
tárolja az egyik regiszterbe. A két operandusnak az ALU-n történő átfuttatásából és az eredmény
regiszterbe tárolásából álló folyamatot adatútciklusnak nevezzük, ez a legtöbb CPU lelke. Jelentős
mértékben ez határozza meg, hogy a gép mire képes. Minél gyorsabb az adatútciklus, annál
gyorsabban dolgozik a gép.
Utasításformátumok
Minden utasítás tartalmaz egy műveleti kódot és általában valamilyen kiegészítő információt,
mint hogy hol vannak az operandusok, és az eredmény hova kerül. Azt az általános módszert, amely
meghatározza az operandusok helyét (tehát a címüket), címzésnek nevezzük.
Az utasítás mindig tartalmaz műveleti kódot, amely megmondja, hogy mit csinál az utasítás.
Ezenkívül tartalmazhatja 0, 1, 2 vagy 3 operandus címét.
Vannak gépek, amelyeknél minden utasítás azonos hosszúságú, mások esetén több,
különböző hosszúságú utasítás lehet. Az utasítások hossza lehet a szóhosszal azonos, rövidebb vagy
hosszabb is. Ha minden utasítás azonos hosszúságú, akkor könnyebbb a dekódolás, de pazarló a
tárolás, mert a közös hossz megegyzeik a leghosszab szó hosszával.
![Page 43: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/43.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 43/133
43.
16. Mikroarchitektúra szint. Az ALU-val végezhető műveletek.Memória műveletek. ALU és az adatút vezérlése.Mikroutasítások: Mic-1. Mic-1 működése.
Mikroarchitektúra szint
A digitális logikai szint felett helyezkedik el a mikroarchitektúra szintje. Feladata a felette
lévő utasításrendszer-architektúra szint (ISA-szint) megvalósítása. Ennek a szintnek a tervezése függ
az ISA-szint megvalósításától, valamint a számítógép ár és teljesítmény kitűzéseitől.
A mikroarchitektúrának tartalmaznia kell egy mikroprogramot a ROM-ban, melynek feladata
betölteni, dekódolni és végrehajtani az IJVM utasításokat. Ez a mikroprogram hatékonyan vezérli az
egyedi kapukat az aktuális hardverben.
Az ALU-val végezhető műveletek
Az ALU tevékenységét 6 vezérlővonal határozza meg. Közülük F0 és F1 határozza meg az ALU-
műveletet, ENA és ENB egyedileg engedélyezi a bemeneteket, INVA invertálja a bal oldali bemenetet,
és INC a legalacsonyabb helyiértékű biten az „átvitel be” bemenet. INC beállítása gyakorlatilag 1-et
hozzáad az eredményhez. Azonban az ALU vezérlővonalaknak nem mind a 64 kombinációja csinál
valami hasznosat. (A 4.2. ábrán található néhány érdekesebb kombináció és a hozzá tartozó
tevékenység.) ALU műveletek pl.: negálás, komplementer-képzés, összeadás, kivonás, inkrementálás,
dekrementálás, logikai műveletek, stb.
Az ALU-nak két adatbemenetre van szüksége: a bal oldalira (A) és a jobb oldalira (B). A bal
oldali bemenet a H (Holding) tartó regiszterhez kapcsolódik. A jobb oldali bemenet pedig a B sínhez,
amelyik képes betölteni a kilenc forrás bármelyikét.
A H úgy tölthető fel, hogy választunk egy olyan ALU-tevékenységet, amelyik a jobb oldali
bemenetet (a B sínről) csupán átengedi az ALU kimenetére. Az egyik ilyen tevékenység az ALU
bemeneteit összeadja, csak negált ENA-val, ami a bal oldali bemenetet nullává teszi. Nullát adva a B
sín értékéhez, éppen a B sín értékét kapjuk. Ezt az eredmnéyt azután módosítás nélkül küldjük
tovább a léptetőn, és H-ban tároljuk.
![Page 44: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/44.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 44/133
44.
A fenti függvényeken kívül két másik vezérlővonal használható egymástól függetlenül az ALU
kimenetének irányítására. Az SLLB (Shift Left Logical, léptetés balra logikailag) a tartalmat 1 bájttal
balra lépteti, feltöltve nullával a legalacsonyabb helyértékű 8 bitet. SRA1 (Shift Right Arithmetic,
aritmetikai léptetés jobbra) a tartalmat 1 bittel jobbra lépteti, változatlanul hagyva a legmagasabb
helyértékű bitet.
Hangsúlyozzuk, hogy lehetséges olvasni és írni ugyanazt a regisztert egy cikluson belül.
F0 F1 ENA ENB INVA INC Tevékenység
0 1 1 0 0 0 A
0 1 0 1 0 0 B
0 1 1 0 1 0 A
1 0 1 1 0 0 B
1 1 1 1 0 0 A + B
1 1 1 1 0 1 A + B + 1
1 1 1 0 0 1 A + 11 1 0 1 0 1 B + 1
1 1 1 1 1 1 B – A
1 1 0 1 1 0 B – 1
1 1 1 0 1 1 -A
0 0 1 1 0 0 A AND B
0 1 1 1 0 0 A OR B
0 1 0 0 0 0 0
1 1 0 0 0 1 1
1 1 0 0 1 0 -1
Memória műveletek
Gépünk 2 módon kommunikálhat a memóriával, egy 32 bites, szócímzésű memóriaporton, és
egy 8 bites bájtcímzésű memóriaporton. A 32 bitest 2 regiszter vezérli, a MAR (Memory Address
Register) és az MDR (Memory Data Register). A 8 bitest 1 regiszter, a PC vezérli, ez 1 bájtot olvas be
az MBR alsó 8 bitjébe. Ez utóbbi csak adatot olvasni képes a memóriából, adatot írni nem.
Ezeket a regisztereket egy vagy két vezérlőjel irányítja. Mival a MAR nem kapcsolódik a B
sínre, nincs engedélyező jele sem. A H-nak sincs egyikből sem, mert mindig engedélyezett, hiszen ez
az ALU egyetlen lehetséges bal oldali bemenete.
Mivel az MBR nem tölthető a C sínről, ezért nincs írójele se (bár van két másik engedélyező
jele). Egy memória olvasás vagy írás kezdeményezéséhez a megfelelő memóriaregisztereket fel kell
tölteni, majd egy olvasó vagy író jelet kell kibocsátani a memória felé.
A MAR szó címeket tartalmaz, úgy, hogy a 0, 1, 2… értékek egymást követő szavakra
hivatkoznak, a PC pedig bájt címeket tartalmaz, úgy, hogy a 0, 1, 2… értékek egymást követő bájtokra
hivatkoznak. Tehát pl. 2-t téve a PC-be, és elindítva egy memóriaolvasást, ki fogjuk olvasni a memória
2. bájtját, és az MBR alsó 8 bitjére tesszük. 2-t téve a MAR-ba, és elindítva egy olvasást, kiolvassa a
memória 8-11. bájtjait (vagyis a 2. szót), és az MDR-be teszi.
![Page 45: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/45.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 45/133
45.
A valódi fizikai megvalósításban csak 1 tényleges memória van, és az bájtszervezésű.
Megengedi a MAR-nak, hogy szavakban számláljon, mialatt a fizikai memória bájtokban számlál. Ez
úgy küszöbölhető ki, hogy a MAR 0. bitje a címsín 2. vonalához kötődik, az 1. bit a 3. vonalhoz és így
tovább.
Az MBR előjeltelenül vagy előjelesen másolható a B sínre. Amikor előjeltelen értékre vanszükségünk, akkor a B sínre kerülő 32 bites szó tartalmazza az MBR értékét az alsó 8 biten, és 0 -kat a
magasabb 24 biten.
A másik lehetőség, hogy a 8 bites MBR-t 32 bites szóvá konvertáljuk, úgy, hogy egy -128 és
127 közötti előjeles értéknek tekintjük, és generálunk egy 32 bites szót. Ez valójában az MBR
előjelbitjének a B sín felső 24 bitjére történő másolását jelenti, és előjel-kiterjesztésnek nevezzük.
Ilyenkor a felső 24 bit vagy mind 0, vagy mind 1 lesz, attól függően, hogy a 8 bites MBR bal szélső
bitje 0 vagy 1.
Az ALU és az adatút vezérlése
Lásd:
Máté: Architektúrák 5. előadás
Andrew S. Tanenbaum: Számítógép architektúrák 261-265. o.
Mikroutasítások: Mic-1
Lásd:
Máté: Architektúrák 5. előadás
Andrew S. Tanenbaum: Számítógép architektúrák 261-265. o.
Mic-1 működése
Lásd:
Máté: Architektúrák 5. előadás
Andrew S. Tanenbaum: Számítógép architektúrák 261-265. o.
![Page 46: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/46.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 46/133
46.
Az adatút sok 32 bites regiszterből, sínekből, ALU-ból és léptetőből áll. Az SLL8 (Shift Left
Logical) 8 bittel balra léptet, az SRA1 (Shift Right Arithmetic) pedig 1 bittel jobbra. Az ALU bemenetei
a H (Holding - tartó) és a B sín. Egy adatút cikluson belül lehetséges egy regiszterből olvasni és az
eredményt akár ugyanoda visszaírni. Az adatút vezérléséhez 29 jelre van szükség. Ezek közül 9 jel
szolgálja a B sínre írást a regiszterekből, 6 az ALU és 2 a léptető vezérlésére kell, 9 jel a C sínről a
regiszterekbe íráshoz, valamint 3 a memória eléréséhez. Utóbbiból 2 jel a szó íráshoz/olvasáshoz kell,
1 pedig bájt olvasáshoz. Összesen tehát 29 jel szükséges, azonban a B sínre csak 1 regiszter írhat
egyszerre, ezért 9 helyett elég 4 jel, vagyis összesen 24 jel is elegendő.
Minden mikroutasítás 36 bites. Ebből 24 bitet az adatút vezérléséhez, 9 bitet a következő
utasítás címének megadásához, 3 bitet pedig a következő utasítás kiválasztásának módjára
használunk. A Mic-1 többek között tartalmaz egy 512x36 bites vezérlőtárat a mikroprogramnak, egy
MPC-t (MicroProgram Counter – mikroprogram-utasításszámláló) és egy MIR-t (MicroInstruction
Register – mikroutasítás-regiszter).
Az adatút ciklus elején MIR feltöltődik a vezérlőtár MPC által mutatott szavával, kialakul a B
sín tartalma, ALU és a léptető megtudja, mit kell csinálnia. ALU és a léptető elvégzi a feladatát, a C
sín, N (Negativ) és Z (Zero) megkapja az új értékét. A regiszterek feltöltődnek a C sínről. Ha az előző
ciklus adatot kért a memóriából, akkor MBR/MDR megkapja az értékét. Kialakul MPC új értéke.
Ezután kezdődik a memóriaciklus.
A memóriaciklus MAR illetve PC feltöltése után kezdődik, ezért ha a memória címet
módosította ez a mikroutasítás, akkor a memória cím a módosított MAR illetve PC regiszter értéke
lesz. Olvasásnál az eredmény csak 2 ciklussal később használható, mert MDR illetve MBR csak a
következő adatút ciklus vége felé töltődik fel a memóriából.
MPC új tartalmának kialakítása úgy történik, hogy a 9 bites következő cím (Addr) az MPC-be
kerül. JAMN vagy JAMZ esetén MPC legmagasabb bitjének és az N vagy Z bitnek logikai vagy
kacsolata képződik MPC legmagasabb helyértékével. Ez egy feltételes ugrás (elágazás) a
mikroprogramban. JMPC esetén MPC 8 alacsonyabb helyértékű bitjének és MBR 8 bitjének
bitenkénti vagy kapcsolata képződik MPC-ben az adatút ciklus vége felé. Ilyenkor Addr 8 alacsonyabb
helyértékű bitje általában 0. Ez egy feltétlen ugrás az MBR-ben tárolt címre.
Ezután kezdődik az újabb mikroutasítás végrehajtása.
![Page 47: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/47.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 47/133
47.
17. A Mic-1 memória ciklusa.
Lásd:
Máté: Architektúrák 5. előadás Andrew S. Tanenbaum: Számítógép architektúrák 261-265. o.
![Page 48: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/48.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 48/133
48.
18. MPC új értékének kialakulása Mic-1-en.
Lásd:
Máté: Architektúrák 5. előadás Andrew S. Tanenbaum: Számítógép architektúrák 261-265. o.
![Page 49: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/49.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 49/133
49.
19. A WIDE utasítás hatása és működése Mic-1-en.
A WIDE utasítás egy prefix utasítás, a következő utasításnak 16 bites indexe van.
A WIDE a szokásos módon dekódolódik, amely a wide 1-hez vezet, ami kezeli a WIDE opcode-t. Bár a „kiszélesítendõ” opcode már közvetlenül elérhetõ az MBR-ben, wide 1 elhozza az opcode
utáni elsõ byte-ot, mert a mikroprogram logikája mindig elvárja azt, hogy ott legyen. Ezután egy
második többirányú elágazás történik, ezúttal a WIDE-ot követõ byte-ot használva elküldésre.
Mindazonáltal, mivel a WIDE ILOAD különbözõ mikrokódot követel, mint az ILOAD és a WIDE ISTORE
különböző mikrokódot követel, mint az ISTORE stb. ez a második többirányú ág nem használhatja az
opcode-t, mint célterület címet, mint ahogy azt a Main 1 teszi.
Ehelyett a wide 1 VAGY mûvelettel összekapcsolja 0x100- t az opcode-dal, mialatt az MPC-be
teszi. Eredményképpen a WIDE ILOAD megvalósítása 0x115-ön kezdõdik (0x15 helyett), a WIDE
ISTORE megvalósítása pedig a 0x136-on kezdõdik (0x36 helyett) stb. Ez alapján minden WIDEutasításkód 256-tal (azaz 0x100-zal) magasabb címen kezdõdik a vezérlõ tárban, magasabban mint a
megfelelõ reguláris opcode. A mikroutasítások kezdeti sorozata, mind az ILOAD -ra, mind a WIDE
ILOAD-ra a 4-20-as ábrán láthatók.
Amint a kód elér a WIDE ILOAD megvalósításához (0x115) a kód a normális ILOAD -tól
mindössze annyiban különbözik, hogy az indexet két egymás utáni index byte összefûzésével kell
megkonstruálni, ahelyett, hogy csak egy byte-on végeznénk „elõjel-kiterjesztést”. Az összefûzést és a
rákövetkezõ összeadás mûveleteket részletekben kell végrehajtani, elõször az INDEX BYTE 1-et H-ba
másolva és 8 bittel balra tolva. Mivel az index elõjel nélküli egészet reprezentál, az MBR-en nulla-
feltöltést hajtunk végre, MBRU-t használva. Ezután az index második byte- ját hozzáadjuk (azösszeadás itt megfelel a konkatenáció (összefûzés) mûveletének, mivel a H alsó byte - ja nulla, így
garantálva van, hogy nincs átvitel (carry) a byte-ok között) és az eredmény H-ban marad. Innentõl
kezdve a mûvelet pontosan ugyanúgy folytatódhat, mint ha egy standard ILOAD -ról lenne szó.
Ahelyett, hogy duplán végrehajtanánk az ILOAD záró utasításait (iload 3-tól iload 5-ig) egyszerûen
leágazunk wide-iload 4-tõl az iload 3-hoz. Figyeljük meg azonban, hogy PC-t kétszer kell
megnövelnünk az utasítás végrehajtása során, hogy az a következõ utasítás kódjára mutathasson. Az
ILOAD megnöveli azt egyszer; a WIDE-ILOAD is megnöveli egyszer.
Ugyanez a szituáció a WIDE-ISTORE-ral, miután az elsõ 4 mikroutasítás végrehajtódik
(wide_istore 1-tõl 4-ig) a folytatás ugyanaz a sorozat, mint az ISTORE elsõ két utasítása után, így awide-istore 4 leágazik az istore 3-hoz.
![Page 50: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/50.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 50/133
50.
20. Parallel Input/Output (PIO), valódi és memória leképezett I/Oeszközök. Teljes és részleges címdekódolás. Programozott ésmegszakítás vezérelt I/O. DMA.
Egy kis és közepes számítógéprendszer központi egysége lapkákból, memórialapkákból, ésnéhány B/K vezérlőből áll, amelyeket mind egy sí n köt össze. A számítógép ezeken a lapkákon
keresztül tartja fenn a kapcsolatot a külvilággal. Számos B/K lapka kapható és egyre újabbakat hoznak
forgalomba. A leggyakoribbak az UART, az USART, a képernyőmeghajtó, a diszkvezérlő és a PIO
lapkák.
Az UART egy olyan lapka, amely egy bájtot tud olvasni az adatsínről, és bitenként továbbítja
azt egy soros vonalon egy terminál felé, és soros adatokat tud fogadni a terminálról.
Az USART lapkák egyrészt különböző protokollok felhasználásával szinkron átvitelt, másrészt
azon felül az UART lapkák minden funkcióját meg tudják valósítani.
Egy tipikus PIO (Parallel Input and Output, párhuzamos B/K) lapka az Intel 8255A, amellyel
bármilyen TTL kompatibilis eszköz tud kapcsolódni (billentyűzethez, kapcsolókhoz, fényforrásokhoz
vagy nyomtatókhoz). A legegyszerűbb módja a 8255A felhasználásának, hogy három teljesen
független 8 bites porta osztjuk (A-ra, B-re és C-re). Mindegyik port egy 8 bites tárolóregiszterrel van
kapcsolatban. Ahhoz, hogy a port kimenő vonalait beállíthassuk, a központi egység beírja a megfelelő
8 bites számot a megfelelő regiszterbe, és a 8 bites szám megjelenik a kimenő vonalakon és ott meg
is marad mindaddig, amíg a regiszterbe ismételten nem írnak. Amikor a portot bemenetként
használjuk, akkor a központi egység csupán a megfelelő tárolót olvassa ki. Más működési módjai
közvetlen kapcsolatot is tudnak biztosítani a külső eszközökkel. Pl. Ha olyan eszköz számára küldadatokat, amely nem mindig tudja azokat fogadni, a 8255A megjeleníti az adatokat az egyik port
kimenetén, majd vár egy impulzusra az eszköztől, amely így üzen vissza, hogy fogadta az adatot és
szeretne még további adatokat fogadni. Az a logikai áramkör, ami ahhoz szükséges, hogy ilyen
impulzusokat tárolni tudjon, és a központi egység számára hozzáférhetővé is tudja tenni, be van
építve a 8255A-ba.
A PIO lapka használata a következő két módszer valamelyikével történhet:
valódi B/K eszköz
memória egy területe
Ha valódi B/K eszközként szeretnénk használni, akkor egy külön sínvezetékre van szükség,
amellyel jelezni tudjuk, hogy egy B/K eszközt szeretnénk használni, nem pedig a memóriát.
Ha a memória leképzett B/K módszert szeretnénk használni, akkor a memória 4 bájtját ki kell
jelölnünk, három bájtot a három port számára és egy bájtot a vezérlőregiszter számára. Az EPROM 2
KB címterületet igényel, a RAM szintén 2 KB területet és a PIO 4 bájtot. Az EPROM a 2 KB-ig terjedő
címterületet foglalja el, a RAM a 32 KB-tól 34 KB-ig terjedő területet, valamint a PIO a memória
legfelső 4 bájtját 65532-től 65535-ig. Ha a másik módszert választottuk volna a PIO megcímzésére, a
külön B/K címterületet, akkor az semmilyen memória címtartományt nem igényelt volna (viszont 4
bájt területet igényelt volna a B/K címtartományból).
![Page 51: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/51.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 51/133
51.
Minden olyan cím, amelynek a felső 5 bitje 0, a memória alsó 2 KB területére esik, tehát az
EPROM területére. Az EPROM lapka kiválasztó vezetékét egy 5 bites összehasonlító áramkör
bemenetére kell kötni, az egyik bementét pedig a 00000-ra.
Ugyanezt az elvet használják a RAM esetében is, azonban a RAM az olyan bináris címekre kell,
hogy válaszoljon, amelyek 1000 0xxx xxxx xxxx alakúak binárisan, ezért még egy inverterre is szükségvan.
Címdekódolás:
A PIO címdekódolás kissé bonyolultabb. A PIO-t akkor kell használni, ha a cím 1111 1111 1111
11xx alakú. Ha azonban a számítógép csak a központi egységet, két memórialapkát, és a PIO -t
használja, akkor nagy mértékben egyszerűsíthető a címdekódolás feladata, mivel csak és kizárólag az
EPROM címeinek esetében fordul elő az, hogy a legfelső címvezeték az 0.
A RAM kiválasztása történhet az alapján, hogy csak az 10xx xxxx xxxx xxxx alakú érvényes
címek lehetnek a RAM-ban, ezért a kiválasztás céljára elegendő a felső 2 bit. Minden cím, ami 11-gyel
kezdődik az a PIO címe lesz.
A részleges címdekódolás esetében nem teljes címeket használunk fel a dekódolásra.
Megvan az a tulajdonsága, hogy ha olvasunk a 0001 0000 0000 0000, 0001 1000 0000 0000 vagy a
0010 0000 0000 0000 címekről, ugyanazt az eredményt kapjuk.
Minden olyan címzés esetében, amely a memória alsó felére mutat, az EPROM lesz
kiválasztva. A részleges címdekódolást el kell kerülni, mert túlságosan nagy címterületet köt le.
Teljes címdekódolás megvalósítására 8 darab 8 KB x 8 bájtos RAM-ot használunk fel. Egyolyan számítógép számára, amelyben 8 darab 2 KB x 8 bájtos memória van, egyetlen ilyen dekóder
szintén elegendő, feltéve, hogy a lapkák mind a memóriatartomány különböző 8 KB méretű
címterületén vannak.
DMA:
Ha nagyobb adatmennyiségeket kívánunk a memória egyes részei között mozgatni, vagy egy
perifériális eszközrõl a memóriába beolvasni, akkor a DMA vezérlőt használja fel a számítógép ennek
gyors lebonyolítására. Erre a feladatra egy "cél-processzort" kell használni, amelyik az írási és olvasási
címeket automatikusan és igen gyorsan egyesével növeli, és a beolvasott adatot késlekedés nélkül
írja a cél-helyre. Természetesen ezen folyamat alatt az "igazi" processzornak hallgatnia kell, nehogy a
cím- vagy adatbuszon helyrehozhatatlan keveredés álljon elõ. Ezen túlmenõen van még egy igen
fontos feladata: a DMA vezérlõ végzi a dinamikus RAM memória felfrissítését. Az idõzítõ 1. csatornája
kb. 15 microsec.-ként jelzést küld a DMA vezérlõnek. A DMA vezérlő ezt továbbítja a DMA RQ (DMA
REQEST) vezetéken a processzornak. A processzor ekkor befejezi az elkezdett processzorciklust, majd
visszaüzen a DMA vezérlõnek, hogy az átveheti a buszok vezérlését. A DMA 5 processzorciklus idejéig
kezeli a vonalakat. A DMA egység által végrehajtott látszólagos adatblokk-mozgások a memória egy-
egy részének felfrissítésével járnak. 512 ilyen felfrissítõ ciklus az egész memóriát "felújítja", a teljes
memória tehát mintegy milisecundumonként felfrissítésre kerül. Ez bõven elegendõ a megbízható,
hibamentes mûködéshez.
![Page 52: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/52.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 52/133
52.
21. Utasítás szintű párhuzamosítás, csővezeték (pipelining).
Utasításszintű párhuzamosság
A számítógép fejlesztők mindig arra törekszenek, hogy növeljék az általuk tervezett gépekteljesítményét. Az egyik módszer a chipek gyorsítására, hogy megnövelik a belső óra sebességét. Ámminden új technikának megvan a maga határa, amit a kor pillanatnyi szintje határoz meg.Összefoglalva a legtöbb computer-fejlesztő a párhuzamosság felé törekszik (két vagy több dologegyidejű elvégzése). Ez az a módszer, amely még inkább növeli a teljesítményt egy adott óra-
sebesség mellett.
A párhuzamosságnak két fontos fajtájáról beszélhetünk: az utasítás-szintű, és a processzorokszintjén levő párhuzamosságról. Az előbbiben a gép azt hasznosítja, hogy a párhuzamosság miattmásodpercenként több utasítás adható ki. Az utóbbiban pedig összekapcsolt CPU-k dolgoznak együttugyanazon a problémán. Mindkét megközelítésnek megvan a maga érdeme. Ebben a részben az
utasítás-szintű paralellizmussal foglalkozunk.
Csővezeték
Évek óta ismert, hogy a memóriából aktuálisan előkerülő utasítások nagy torlódást idéznekelő, s ezzel lassítják a végrehajtási sebességet. Hogy kezelni tudják ezt a problémát, a computereknekvissza kell térnie legalább az IBM-Kibővitésig (1959), amikor még meg volt az a tulajdonság, hogy azutasítások előre fel voltak hozva a memóriából, így kéznél voltak amikor csak szükség volt rájuk. Ezeka parancsok egy regiszterblokkba - az előtárba - voltak behelyezve. Így, amikor szükség volt egyutasításra, rendszerint elő lehetett venni az előtárból - inkább, mint arra várni, hogy feljöjjön amemóriából.
Ennek eredményeképp az utasítások "származása" alapján történő csoportosítás avégrehajtást két részre bontja: előhozási és aktuális végrehajtás. A csővezeték koncepciója mégtovább viszi ezt a stratégiát. A parancsok végrehajtásának két részre osztása helyett gyakran sokrészre osztották, s mindegyiket a hardver meghatározott része irányította. Mindet ami képespárhuzamosan futni.
Ötszakaszos pipeline:
utasítást lekérdező egység -> utasítást dekódoló egység -> operandus lekérdező egység ->
utasítást végrehajtó egység -> visszaíró egység
Gondoljunk ki egy analógiát, hogy a pipelineok fogalmát tisztábbá tegyük. Képzeljünk el egy
tortagyárat, ahol a sütés és a szállítás el van különítve. Tegyük fel, hogy a szállító részlegnek van egy
hosszú futószalagja, mellette sorban 5 munkással (feldolgozó egységek). Minden 10 másodpercben (a
ciklus) az 1. munkás egy üres dobozt rak a szalagra. Ezután a doboz a 2. munkáshoz kerül, aki belerak
egy tortát. Egy kicsivel később a doboz megérkezik a 3. munkáshoz, aki lezárja. Utána folytatja útját a
4. munkáshoz, aki rak egy címkét a dobozra. Végül az 5. munkás leveszi a dobozt a szalagról és egy
nagyobb tárolóegységbe rakja az áruházba történő későbbi szállításához. Alapvetően így működik a
számítógépnél a pipeline: mindegyik utasítás (torta) végigmegy néhány feldolgozó lépésen, mielőtt
végrehajtva kijut a végén.
![Page 53: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/53.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 53/133
53.
Visszatérve a pipelinera a 2-4. ábrához feltételezzük, hogy a ciklusidő 2 nsec volt. Így 10 nsec-
be kerül egy utasításnak, hogy végighaladjon az ötszakaszos pipelineon. Első pillantásra ha egy
utasításnak 10 nsec-ig tart, akkor úgy tűnik, hogy a gép 100 MIPS-el fut, de valójában ennél sokkal
jobb. Minden ciklusban (2 nsec) egy új utasítást hajt végre, így a feldolgozás mértéke 500 MIPS, nem
pedig 100 MIPS.
A pipeline megengedi, hogy a "lappangást" (mennyi ideig tart az utasítást végrehajtani) és a
processzor sávszélességét (a CPU MIPS teljesítménye) felváltva használja. Egy T nsec -es ciklusidővel
és n szakaszos pipeline-nal a lappangási idő nT nsec és a sávszélesség 1000/T MIPS. (logikus, mivel az
időt nsec-ban mérjük, így a CPU sávszélességét BIPS-ben vagy GIPS-ben kellene mérni, de mivel ezt
senki sem teszi, így mi sem fogjuk)
Szállítószalag elv
Ez az elv azt a problémát enyhíti, miszerint olyan gyorsan hajthatunk végre egy-egy utasítást,
amilyen gyorsan azt fel tudjuk dolgozni / végrehajtani (utasítás beolvasás, dekódolás, operandusbeolvasás, utasítás végrehajtás, visszaírás). Már régóta használatos az előolvasási puffer (prefetch buffer), ami képes előre beolvasni
utasításokat, hogy rendelkezésre álljanak, amikorra végre kell őket hajtani, ahelyett hogy mindigvárni kelljen egy-egy memóriából való beolvasásra.
Ez a módszer az utasítás végrehajtását két részre osztja: beolvasás és a végrehajtás.
A szállítószalag elv ezt az elvet viszi tovább, miszerint a végrehajtás fázist még több elemre osztjaszét, s minden külön részt egy-egy másik hardver elem végez egymással párhuzamosan.
(5 fázisú szállítószalag)
Működés: A számítógép számára rengeteg feladatot elküldtünk, hogy végezze el, ilyenkor az elsőlépése, hogy az S1 hardver elem az első utasítást beolvassa (órajel: 1) mikor kész, a következőórajelnél (2) egy másik hardverelem, S2 már az elöbb beolvasott adatot dekódolja, ugyanebben azidőben (órajel: 2) S1 beolvassa a következő utasítást párhuzamosan. Órajel: 3 –nál S1 már akövetkező utasítást olvassa be, S2 az előzőleg beolvasott utasítást dekódolja, S3 pedig az előzőlegdekódolt utasításhoz beolvassa az operandusokat ugyanabban az órajelben (3). És így továbbhalad, lényege, hogy egyszerre 5 fázist tud végezni…
![Page 54: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/54.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 54/133
54.
22. Utasítás betöltő egység. Mic – 2.
Utasítás betöltő egység
Ha egy utasításnak további mezői vannak (operandusok számára), minden mezőthatározottan be kell tölteni, egyszerre csak egy bájtot, és mielőtt felhasználnánk , össze kell rakni
őket. Egy mező betöltése és összerakása bájtonként legalább egy ciklusra leköti az ALU –t, hogy
megnövelje a PC-t, és azután ismét, hogy összerakja a keletkező indexet vagy eltolást. Az ALU-t szinte
minden ciklusban sokféle műveletre használjuk az utasításbetöltéssel és az utasításon belüli mezők
összerakásával kapcsolatban, az utasítás „valódi” munkáján felül.
Annak érdekében, hogy a főciklust átlapoljuk, szükséges, hogy az ALU-t felszabadítsuk a fenti
feladatok némelyikéből. A Mic-1 –ben sok betöltés eltávolítható az ALU-tól egy független egység
megalkotásával, amely betölti és feldolgozza az utasításokat. Ez az egység, amit IFU-nak (Instruction
Fetch Unit, utasításbetöltő egység) nevezünk, amely képes függetlenül növelni a PC-t és betölteni abájtokat a bájtfolyamból, még mielőtt szükség lenne rájuk.
Az IFU felelős egy bájtfolyam betöltéséért. Ezt azzal éri el, hogy a hagyományos 4 bájtos
memóriaportot használja idő előtt betöltve teljes 4 bájtos szavakat, és az egymást követő bájtokat
egy léptetőregiszterbe tölti, ami egyesével vagy kettesével szolgáltatja azokat a betöltés
sorrendjében. A léptetőregiszternek az a szerepe, hogy fenntart egy bájtsort a memóriából, és tölti
MBR1-be és MBR2-be. Valahányszor az MBR1 kiolvasódik, a léptetőregiszter jobbra léptet egy bájtot.
Valahányszor az MBR2 kiolvasódik, jobbra léptet 2 bájtot. Ezután az MBR1 és MBR2 újratöltődik a
legrégebbi bájtból, illetve bájtpárból. Ha most elegendő hely marad a léptetőregiszterben egy másik
teljes szó számára, akkor az IFU elkezd egy memória ciklust a beolvasásra.
Hogy helyesen dolgozzunk, az IFU-nak le kell blokkolnia, amikor arra kérik, hogy tegyen meg
valamit, amit nem tud, úgy mint szolgáltassa MBR2 értékét, amikor csak 1 bájt van a
léptetőregiszterben és a memória még el van foglalva egy új szó betöltésével. Ezenkívül egyszerre
csak egy dolgot tud csinálni, így a beérkező eseményeket sorba kell állítania. Végül valahányszor a PC
megváltozik, az IFU-t frissíteni kell.
Az IFU-nak saját memóriacím-regisztere van, az IMAR, melyet a memória címzésére
használunk, amikor egy új szót kell betölteni. Ennek a regiszternek saját tulajdonú növelője van, így a
fő ALU-ra nincsen szükség, amikor a következő szó eléréséhez növeljük azt. Az IFU-val a fő
végrehajtási egység csak akkor ír a PC-be, amikor meg kell változtatni az utasításbájt folyamának
soros jellegét.
Mivel a mikroprogram már nem közvetlenül növeli a PC-t a műveleti kódok betöltésénél, az
IFU-nak kell a PC-t időszerűen tartani. Ezt azzal éri el, hogy érzékeli, amikor az utasításfolyamból 1
bájt felhasználásra kerül, vagyis, amikor MBR1-et vagy MBR2-t (vagy az előjeltelen verziókat)
kiolvassák. A PC-hez kapcsolódik egy önálló növelő, amelyik attól függően képes 1 vagy 2 bájttal
növelni, hogy hány bájtot használtunk fel. Így a PC mindig a még fel nem használt első bájt címét
tartalmazza. Minden egyes utasítás kezdetén az MBR tartalmazza az ehhez az utasításhoz tartózó
műveleti kód címét.
![Page 55: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/55.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 55/133
55.
Mic-2
Az IFU nagyon lecsökkentheti az átlagos utasítás úthosszát:
Először is, teljesen eltávolítja a főciklust, mivel minden egyes utasítás vége egyszerűen
közvetlenül ágazik el a következő utasításra. Másodszor, elkerüli, hogy az ALU-t a PC növelésére kössük le.
Harmadszor, csökkenti az úthosszt valahányszor egy 16 bites indexet vagy eltolást számítunk
ki, mert összerakja a 16 bites értéket és ezt, mint egy 32 bites értéket, közvetlenül
szolgáltatja az ALU-nak, elkerülve, hogy H-ban kelljen összerakni.
Az IADD művelet betölti a veremben lévő második szót és elvégzi az összeadást. Amikor az
IFU észleli, hogy az IADD-ban hivatkozunk MBR1-re, a belső léptetőregisztere mindent jobbra tol és
újratölti MBR1-et és MBR2-t. Végrehajt egy átmenetet is a jelenlegi állapotából az eggyel
alacsonyabba. Ha az új állapot 2, az IFU elkezd betölteni egy szót a memóriából. Mindez a hardverben
történik, a mikroprogramnak semmit sem kell tennie, ezért csökkenthető az IADD öt mikroutasításrólhárom mikroutasításra.
A Mic-2 néhány utasítást jobban feljavít, mint másokat, és ebből következik, hogy nagyobb
nyeresége van. Az LDC_W kilenc mikroutasításról csupán háromra változik, harmadolva a
végrehajtási időt. Másrészről, a SWAP csak nyolcról hat mikroutasításra változik. Átlagos
teljesítménynél valójában a gyakoribb utasításoknál kapott nyereség számít. Ezek közé tartozik az
ILOAD (6 volt, most 3), az IADD (4 volt, most 3) és az IF_ICMPEQ (sikeres esetben 13 volt, most 10;
sikertelen esetben 10 volt, most 8). Ahhoz, hogy megmérjük a gyorsítást, választanunk és futtatnunk
kellene egy tesztágyat, de világos, hogy itt nagy a nyereség.
![Page 56: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/56.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 56/133
56.
23. Csővonalas terv: a Mic-3
A Mic-3 a Mic-2 továbbfejlesztése. Még gyorsabbá úgy tudnánk tenni, ha megpróbálnánk
csökkenteni a ciklusidőt. Jelentékeny méretékben a ciklusidőt a lapkatechnológia határozza meg.
Minél kisebbek a tranzisztorok és minél kisebb a köztük lévő fizikai távolság, annál gyorsabban tud azóra futni. Egy adott technológia számára az idő, amely egy teljes adatút művelet végrehajtásához
szükséges, állandó. A másik választás a gyorsabbá tételre, ha párhuzamosságot viszünk a gépbe.
Mint az előbb említettük, az óraciklust behatárolja az idő, amelyik szükséges a jel
tovaterjedéséhez az adatúton. Három fő alkotóelem van a folyamatban levő adatút ciklushoz:
Az idő a kiválasztott regiszterek rávezetéséhez az A és D sínekre. Az idő, amíg az ALU és a léptetőregiszter elvégzi a munkáját. Az idő, amíg az eredményeket visszaküldjük a regiszterekbe és eltároljuk.
A Mic-3 csővonalas modell, háromsínes architektúrából áll, hozzávéve az IFU-t, és háromtovábbi tárolót (regisztert), melyeket minden egyes sín közepére illesztünk. A tárolókat minden egyes
ciklusban írjuk. Végeredményben a regiszterek szétválasztják az adatutat különböző részekre,
amelyek most egymástól függetlenül működhetnek. Most három óraciklus kell az adatút
használatához.
A tárolók beillesztésének értelme kétszeres:
Gyorsítjuk az órát, mert a maximális késleltetés most rövidebb. Minden egyes ciklus alatt az adatút minden részét használhatjuk.
Az adatút három részre osztásával a maximális késleltetés csökken annak
eredményeképpen, hogy az órafrekvencia növekedhet. Tegyük fel, hogy az adatút három
időintervallumra osztásával mindegyik körülbelül harmad olyan hosszú, mint az eredeti, így az óra
sebességét megháromszorozhatjuk.
Az adatút most három ciklust igényel a működéséhez: egyet az A és B betöltéséhez, egyet a
művelet elvégzéséhez és a C feltöltéséhez, és egyet az eredmény visszaírására a regiszterekbe.
Minden egyes ilyen darabot mikrolépésnek hívunk.
Ahol egy mikrolépés nem tud indulni, mert egy eredményre vár, amit az előző mikrolépés
még nem hozott létre, valódi függőségnek vagy RAW függőségnek nevezzük. A függőségekre gyakran
úgy hivatkozunk, hogy akadályok. A RAW egy rövidítés a Read After Write számára, és azt jelenti,hogy egy mikrolépés olvasni akar egy regisztert, melybe még nem írtunk. Elakadásnak nevezzük,
amikor megállunk, hogy egy szükséges értéket megvárjunk.
Habár a Mic-3 több ciklust igényel, mint a Mic-2 program, mégis gyorsabban fut. Ha a Mic-3
ciklusidejét t ns-nak vesszük, akkor a Mic-3 11t ns-ot igényel a SWAP végrehajtásához. Ellenben, a
Mic-2 6 ciklust igényel, melyek mindegyike 3t, összesen 18t. A csővezeték gyorsabbá teszi a gépet,
még akkor is, ha egyszer le kellett állni, hogy elkerüljünk egy függőséget.
A csővezeték egy kulcsmódszer minden korszerű CPU-ban. Még egy fontos részlet, hogy bár
egy egydülálló utasítás négy óraciklust igényel a végrehajtáshoz, minden egyes óraciklusban egy újutasítás kezdődik és egy régi utasítás fejeződik be.
![Page 57: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/57.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 57/133
57.
24. Egy hétszakaszú szállítószalag: a Mic-4 csővezetéke.
Miden egyes mikroutasítás kiválasztja a rákövetkezőjét. A legtöbbjük éppen a következőt
választja ki a folyamatban lévő sorozatban, de az utolsó, mint amilyen swap6, gyakran egy többutas
elágazást csinál, ami eldugaszolja a csővezetéket, mert utána lehetetlen folytatni az előre betöltést.A kérdés kezelésének egy jobb módszerére van szükségünk.
A következő (és egyben utolsó) mikroarchitektúránk a Mic-4. A fő alkotóelemeit a 4.35. ábrán
mutatjuk be, de egy tekintélyes mennyiségű részlet el van nyomva az érthetőség kedvéért. Mic-3-hoz
hasonlóan van egy IFU, amelyik előre betölt szavakat a memóriából, és kezeli a különböző MBR-eket.
Az IFU a bejövő bájtfolyamot egy új alkatrésznek, a dekódoló egységnek adagolja. Ennek az
egységnek van egy belső ROM- ja, amit az IJVM műveleti kódjával indexelünk. Minden egyes
bejegyzés (sor) két részből áll: ennek az IJVM-utasításának a hossza és egy index egy másik ROM-ba, a
mikroműveletek ROM- jába. Az IJVM-utasítás hosszát arra használjuk, hogy hozzájáruljunk: adekódoló egység felismerje a bejövő bájtfolyamatban az utasításokat, í gy az mindig tudni fogja, hogy
melyek a műveleti kód bájtok és melyek az operandusok. Ha éppen egy utasítás hossza 1 bájt (pl.
POP), akkor a dekódoló egység tudja, hogy a következő bájt egy műveleti kód. Ha azonban a jelenlegi
utasításhossz 2 bájt, akkor a dekódoló egység tudja, hogy a következő bájt egy operandus, melyet
közvetlenül egy másik műveleti kód követ.
Amikor a WIDE előtag feltűnik, a következő bájtot egy különleges széles műveleti kódra
alakítjuk át, pl. WIDE ILOAD átalakul WIDE_ILOAD-dá.
A dekódoló egység elküldi a mikromüveletek ROM- jához azt az indexet, amit a saját
táblázatában talált, a következö alkatrész, a sorba állító egység számára. Ez az egység néhány logikát
és két belső táblázatot tartalmaz, egyet ROM-ban és egyet RAM-ban. A ROM azt a mikroprogramot
tartalmazza, ahol minden egyes IJVM-utasításnak néhány egymást követő bejegyzése van, amit
mikroműveletnek nevezünk. A bejegyzéseknek sorrendben kell elhelyezkedniük, így olyan trükk,
mint WIDE_ILOAD2 ugrása ILOAD2-re a Mic-2-ben, nem megengedett. Minden egyes IJVM-sorozatot
pontosan és teljes terjedelmében meg kell határozni, megismételve a sorozatokat bizonyos
esetekben.
A mikroműveletek hasonlítanak a 4.5. ábra mikroutasításaihoz, kivéve, hogy a NEXT_ADRESS
és JAM mezők hiányoznak, és egy új kódoló mező szükséges az A sín bemenet elöírásához. Két új bit
is kell: a Final és a Goto. A Final bit be van állítva minden egyes IJVM-mikroművelet sorozat utolsó
mikroműveleténél, megjelölve azt. A Goto bit ezért van beállítva, hogy megjelölje azokat a
mikroműveleteket, amelyek feltételes mikorelágazások. Ezeknek a közönséges mikroművelettől
különbözö formája van, amely tartalmazza a JAM biteket és egy indexet a mikromű velet ROM- jába.
Azokat a mikroutasításokat, amelyek előzőleg valamit csináltak az adatúttal és végrehajtottak egy
feltételest mikroelágazást is (pl. iflt4), most két mikroműveletre kell szétdarabolnunk.
![Page 58: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/58.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 58/133
58.
A sorba állító egység a következöképpen müködik. Átvesz egy indexet a mikromüvelet ROM-
jához a dekódoló egységtöl. Ezután kikeresi a mikromüveletet és bemásolja azt egy belsö sorba. Majd
a következö mikromüveletet is bemásolja a sorba, és ezután a következöt is. Ezt addig folytatja, amig
talál egy olyat, ahol a Final bit egy. Ezt is átmásolja, és megáll. Feltéve, hogy nem talált olyan
mikromüveletet, amelyben a Goto bit egy, és maradt még elegendö hely a sorban, a sorba állító
egység ezután egy nyugtázó jelet küld vissza a dekódoló egységnek. Amikor a dekódoló egység
felfogja a nyugtázást, a következö IJVM-utasítás indexét elküldi a sorba állító egységnek.
Ilyen módon a memóriában lévö IJVM-utasítások sorozata alapvetöen átalakul
mikromüveletek egy sorozatára egy sorban. Ezek a mikromüveletek táplálják a MIR-eket, amelyek
jeleket küldenek az adatút vezérléséhez. Azonban, van egy másik tényező amit most figyelembe kell
vennünk: a mezök az egyes mikromüveletben nem ugynabban az idöben hatnak. Az A és B mezök az
elsö ciklus alatt hatékonyak, az ALU mezö a második ciklus alatt hatékony, a C mezö a harmadik ciklus
alatt hat, és bármelyik memoria müvelet a negyedik ciklusban kerül sorra.
Hogy teljessé tegyük ezt a munkát, négy független MIR-t vezetünk be a 4.35. ábrára. Mindenegyes ora ciklus kezdetekor (a 4.3. ábrán a Δw idö), MIR3 átmásolodik a MIR4-be, MIR2 átmásolodik
MIR3-ba, MIR1 átmásolodik MIR2-be, és MIR1-böl az A és B mezöket arra használjuk, hogy
kihasználjuk azokat a regisztereket, amelyeket az A és B tárolokhoz vezetünk, de az ALU mezöt a
MIR1-ben nem használjuk és nincs semmi máshoz hozzákapcsolva az adatútban.
Egy oraciklussal késöbb, ez a mikromövelet átmegy MIR2-be, és azok a regiszterek,
amelyeket kiválasztott, most biztonságosan az A és B tárolokban helyezkednek el; várva a kalandok
eljövetelét. Az ALU mezöjét most arra használjuk, hogy az ALU-elvezessük. A következö ciklusban a C
mezöje fogja az eredményeket visszaírni a regiszterbe. Azután átmegy MIR4 -be, és elinditja
valamelyik szükséges memoria müveletet, felhasználva a most betöltött MAR-t (és MDR-t egy
iráshoz).
A Mic-4 egy utolso szempontja most némi megbeszélést igényel: mikroelágazások. Néhány
IJMV-utasítás, mint amilyen az IFLT, megkívánja, hogy a feltételes elágazás, mondjuk az N biten
alapuljon. Amikor egy mikroelágazás megtörténik, a csövezeték nem folytatódhat. Hogy ezt kezelni
tudjuk, hozzávettük a Goto bitet a mikromüvelethez. Amikor a sorba állító egység talál egy olyan
mikromüveletet, amelyiknek ez a bitje be van állítva, miközben átmásolja azt a sorba, ráébred, hogy
nehézségek következnek, és tartozkodik a nyugtázás elküldésétöl a dekódoló egységnek.
Eredményként a gép elakad ezen a ponton, amíg a mikroelágazás meg nem oldódik.
Elképzelhetően, néhány IJVM-utasítás az elágazáson túl már a dekódoló egységbe be lett
táplálva (de a sorba állító egységbe nem), mivel nem küldött vissza nyugtázo (vagyis folytató) jelet,
amikor megtalált egy Goto bittel beállított mikromüveletet. Különleges hardver és mechanizmusok
szükségesek, hogy az össze-visszaságot tisztázzák és visszatáncoljanak, de ezek már túlmutatnak
ennek a könyvnek a témakörén. Amikor Edsger Dijkstra megírta híres levelét „ GOTO Statement
Considered Harmful” („ A GOTO utasítást károsnak tartják”) (Dijkstra, 1968 ), sejtelme se volt, hogy
mennyire igaza volt.
Hosszú utat jártunk be a Mic-1 óta. A Mic-1 egy nagyon egyszerü hardverdarab volt, szinte
teljes szoftvervezérléssel. A Mic-4 egy erösen csövezetékezett terv hét szakasszal és sokkal bonyolúltabb hardverrel. A csövezetéket vázlatosan a 4.36. ábrán mutatjuk be, azzal, hogy a
![Page 59: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/59.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 59/133
59.
bekarikázott a 4.35. ábra alkotóelemeire hivatkoznak. A Mic-4 önmüködöen elöre betölt egy
bájtfolyamota memoriábol, dekódolja azokat IJVM-utasításokká, átalakitja azokat mikromüveletek
egy sorozatává egy ROM-ot használva, és sorba állítja azokat felhsználásra, amint szükséges. A
csövezeték elsö három szakasza az adatút orájához köthetö, ha szükséges, de nem mindig van
elvégezendö munka. Például, az IFU biztosan nem képes táplálni egy új IJVM müveleti kódot a
dekódoló egységben minden oraciklusnál, mert az IJVM-utasítások különbözö ciklusokat igényelnek a
végrehajtáshoz, és a sor gyorsan túlcsordúlna.
Minden egyes ora ciklusban, a MIR-ek elöre lépnek, és a sor alján levö mikromüvelet
bemásolodik MIR1-be, hogy elkezdje a végrehajtást. A négy MIR-böl jövö vezérlö jelek ekkor
kiterjednek az adatút felé, tevékenységek bekövetkezését okozva. Minden egyes MIR az adatút
különbözö részeit vezérli és ennek következtében különbözö mikrolépéseket.
Ebben a tervben egy mélyen csövezetékezett CPU-nk van, amelyik megengedi, hogy az egyes
lépések nagyon rövidek és ennélfogva az ora frekvencia magas legyen. Számos CPU alapvetöen ilyen
módon van tervezve, különösen azok, melyeknek egy régebbi (CISC) uatsításhalmazt kelletmegvalósítaniuk. Például, a Pentium II megvalósítás elviekben hasonló a Mic-4-hez bizonyos
szempontból, ahogy azt késöbb látni fogjuk ebben a helyzetben.
![Page 60: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/60.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 60/133
60.
25. Elágazás, eltolási rés, statikus és dinamikus elágazás jövendölés
Elágazás, eltolás rés
A modern számítógépek magas szinten vannak csővezetékkel ellátva. A csúcsteljesítményűgépeknek néha 10 vagy még több szakaszos csővezetéke van. A csővezetékek legjobban lineáris
kóddal dolgoznak, de a programok nem lineáris kódsorozatok. Teli vannak elágazási utasításokkal. Az
utasítás-dekódoloás a második szakaszban történik /4.35. ábra/. Így a betöltő egységnek kell
eldöntenie, hogy honnan töltse be a következőt, még mielőtt tudná, milyen utasítást kapott éppen.
Csak egy ciklussal később tudhatja meg, hogy pont egy feltétel nélküli elágazási utasítást kapott, és
akkorra már elkezdte a feltétel nélküli elágazást követő utasítást betölteni. Ennek következtében a
csővezetéket alkalmazó gépek (pl. UltraSPARC III) tekintélyes részének megvan az a tulajdonsága,
hogy egy feltétel nélküli elágazást követő utasítás végrehajtódik, annak ellenére, hogy logikusan nem
kellene. Az elágazás utáni állapotot eltolás résnek nevezzük.
A feltételes elágazások nem csak eltolás réseket hoznak létre, hanem a betöltő egység még
azt sem tudja, hogy sokkal később honnan olvasson a csővezetékbe. A korai csővezetékes gépek
csaknem bedugultak, amíg nem derült ki, hogy lesz elágazás vagy nem. Következésképpen a legtöbb
gép, amikor talál egy feltételes elágazást, megjövendöli, hogy végre fogjuk hajtani vagy nem.
Különféle módszereket gondoltak ki a jövendölésre. Egy nagyon egyszerű mód a következő.
Tételezzük fel, hogy minden visszafelé történő feltételes elágazást végre fogunk hajtani, és az összes
előreirányulót nem. Az első rész mellett az az érv, hogy a visszafelé elágazások gyakran egy ciklus
végén helyezkednek el. A legtöbb ciklust többször hajtjuk végre, így az a feltevés, hogy egy visszafelé
elágazás a ciklus tetejére végre lesz hajtva, általában jó fogadás.
A második rész rázósabb. Néhány előreelágazás akkor fordul elő, amikor hibafeltételeket
észlelünk a szoftverben. A hibák ritkák, így a legtöbb velük összefüggő elágazást nem hajtjuk végre.
Természetesen sok olyan előreelágazás van, ami nem kapcsolódik hibakezeléshez, így a siker aránya
közel sem olyan jó, mint a visszafelé elágazásnál.
Ha egy elágazást pontosan megjósoltunk, akkor semmi különös tennivaló nincs. A végrehajtás
éppen a célcímnél folytatódik. A nehézség akkor jön, amikor rosszul jósoltunk meg egy elágazást.
Kigondolni, hogy hova kell menni nem nehéz. A nehéz rész, visszacsinálni azokat az utasításokat,
amelyeket már végrehajtottunk, de nem kellett volna.
Dinamikus elágazás jövendölés
Világos, hogy nagyszámú pontos jövendölés teszi lehetővé a CPU-nak, hogy teljes sebességgel
haladjon. Ennek következtében a jelenlegi kutatások nagy része az elágazást jövendölő algoritmusok
javítását célozza. Egy közelítés az, hogy a CPU fenntart egy előzmények táblát, amelyben feljegyzi a
feltételes elágazásokat, amint előfordulnak, így azok kikereshetők, ha ismét előfordulnak. Számos
módszer van az előzmények tábla szervezésére. Valójában ezek pontosan ugyanazok a módszerek,
mint amelyeket a gyorsítótár szervezésénél használunk. Tekintsünk egy gépet 32 bites utasításokkal,
amelyek szóhatáron kezdődnek, vagyis minden memóriacím alsó 2 bitje 00. Egy direkt leképezésű 2
az n-ediken bejegyzést tartalmazó előzmények tábla esetén egy elágazási utasítás alsó n2 bitjétkivehetjük, és 2 bittel jobbra léptethetjük. Az n bites számot indexként használhatjuk az előzmények
![Page 61: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/61.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 61/133
61.
táblához, ahol egy ellenörzést végzünk annak megállapítására, hogy az ott tárolt cím megegyezik-e az
elágazás címével. Úgy mint a gyorsítótárnál nincs szükség az alsó n2 bit tárolására, így mellözhetjük
azokat. Ha találat van, a jövendölö bitet használjuk az elágazás jóslására. Ha rossz cimke van ott vagy
a bejegyzés érvénytelen, akkor hiány lép fel, épp úgy, mint a gyorsítótárnál. Ebben az esetben az
elöre/visszafelé elágazási szabályt alkalmazhatjuk.
Ha elég nagy a táblaméret és elegendö az asszociativitás, akkor ez az elrendezés a legtöb
esetben jól müködik. Viszont egy rendszeres probléma mindig elöfordul. Amikor a ciklus végül kilép, a
végén az elágazás tévesen lesz megjövendölve, és a rossz jövendölés megváltoztaja az elözmények
táblát úgy, hogy "nincs elágazás"-nak jelöli a következö jövendölést. Amikor legközelebb a ciklusba
lépünk, az elsö ismétlés végén az elágazás rosszul lesz megjövendölve. Ha a ciklus egy külsö ciklus
belsejében van, vagy egy gyakran meghívott eljárásban, akkor ez a hiba gyakran elöfordulhat. Hogy
kiküszöböljük ezt a téves jövendölést, adhatunk a táblázat bejegyzésének egy második lehetöséget.
Ezzel a modszerrel a jövendölés csak két egymás utáni helytelen jövendölés után változik meg. Ez a
megközelítés két jövendölö bit meglétét követeli meg az előzmények táblában, egyet arra, hogy az
elágazás "feltehetöleg" mit fog csinálni, és egyet arra, hogy mit csinált legutóbb.
Mindeddig feltételeztük, hogy minden feltételes elágazás célpontja ismert, jellemzöen vagy
egy határozott cím, ahova el kell ágazni, vagy mint egy relatív eltolás a jelenlegi utasításhoz képest.
Gyakran ez a feltételezés indokolt, de néhány feltételes utasítás a célcímet regisztereken végzett
aritmetikai müveletekkel számolja ki, és azután megy oda. Az olyan jövendölésnek nincs haszna,
amelynél a célcím ismeretlen. Egy modszer ennek a helyzetnek a kezelésére, hogy tároljuk az
elözmények táblában azt a tényleges címet, ahová legutóbb elágaztunk. Egy másik megközelítése az
elágazás jövendölésnek, hogy nyomon követjük. hogy az utolsó k feltételes elágazás, ami elöfordul,
vége lett-e hajtva, függetlenül attól, hogy az melyik utasítás volt. Ezt a k bites számot, amelyet az
elágazási előzmények blokkos regiszterében tárolunk, összehasonlítjuk párhuzamosan az
elözmények tábla minden bejegyzés egy k bites kulcsával, és ha egy találat előfordul, akkor az ott
talált jövendölést használjuk.
Statikus elágazás jövendölés
Minden eddig tárgyalt elágazásjövendölési modszer dinamikus, azaz futásidöben hajtjuk
végre, mialatt a program fut. Alkalmazkodik a program érvényes viselkedéséhez, ami jo dolog. A rossz
oldal az, hogy szakosított és drága hardvert igényel, és nagyszámú lapka bonyolult összességét.
Néhány gép, mint az UltraSPARC III, rendelkezik egy második feltételes elágazási utasításhalmazzal, a szokásoson felül. Az új tartalmaz egy bitet, amelyben e fordítoprogram
meghatározhatja, hogy úgy gondolja, hogy az elágazás végre lesz hajtva, vagy nem. Ha ezek egyike
elöfordul, a betöltö egység pontosan azt teszi, amit mondanak neki. Továbbá, nem szükséges értékes
helyet pazarolni az elágazási elözmények táblában ezekre az utasításokra, így csökkennek itt az
öszzeütközések.
Végül az utolsó elágazásjövendölési modszerünk a metszetben ábrázoláson alapszik Ez szintén
egy statikus módszer, de ahelyett, hogy a fordítoprogramnak kelljen megprobálni kiszámolni, hogy
melyik elágazást hajtjuk végre, és melyiket nem, a program valójában fut, és az elágazás viselkedését
megfigyeljük. Ezt az információt betápláljuk a fordítoprogramba, amely azután felhasználja az egyedielágazás utasításokat arra, hogy a hardvernek megmondja, mit csináljon.
![Page 62: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/62.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 62/133
62.
26. Sorrendtől eltérő végrehajtás, szuperskaláris architektúra,függőségek, regiszter átnevezés, feltételezett végrehajtás
Sorrendtől eltérő végrehajtás, függőségek, regiszter átnevezés
Világos, hogy a számítógép-tervezés legegyszerűbb akkor, ha minden utasítást abban a
sorrendben hajtunk végre, ahogyan betöltöttük azokat (pillanatnyilag feltételezve, hogy az elágazás-
jövendölő algoritmus soha nem ad rossz tippet). Mégis, a sorrend szerinti végrehajtás nem mindig
eredményez optimális teljesítményt az utasítások közötti függőség miatt. Ha egy utasításnak egy
olyan értékre van szüksége, amit az előző utasítás számit ki, akkor a második nem tudja elkezdeni a
végrehajtást, amíg az első nem állítja elő a szükséges értéket. Ebben az esetben (RAW függőség) a
második utasításnak várnia kell. A függőségnek más fajtái is léteznek:
A RAW függőség az, ami akkor fordul elő, amikor egy utasításnak szüksége lenne egy olyan
eredményt használni forrásként, amit az előző utasítás még nem állított elő. A két másik függőségkevésbé súlyos. Alapvetően forrás-összeütközések. A WAR függőségben (Write After Read; olvasás
után írás) egy utasítás megpróbál felülírni egy regisztert, amelynek olvasását az előző utasítás még
lehet, hogy nem fejezte be. A WAW függőség (Write After Write; írás utáni írás) hasonló. Ezek
gyakran elkerülhetők, ha a második utasítás az eredményt valahova máshova teszi (esetleg
ideiglenesen). Ha a fenti három függőség egyike sem áll fenn, és a szükséges működési egység
elérhető, az utasítás kiosztható.
Tekintsünk egy alternatív elgondolást: a sorrendtől eltérő végrehajtást. Ebben az
elgondolásban az utasításokat sorrendtől eltérően lehet kiosztani, és ugyanígy sorrendtől eltérően
lehet befejezni. Pl. bár I4 elakadt, dekódolhatjuk és kioszthatjuk I5-öt, mivel ez nem ellenkezik egyikfüggőben lévő utasítással sem. Mindamellett, utasítások átugrása egy új problémát okoz. Tegyük fel,
hogy I5 használt egy olyan operandust, amelyet az átugrott utasítás, I4 számol ki. Ilyenkor ki kell
bővítenünk az eredményjelzőt úgy, hogy nyomonkövesse azokat a tárolásokat, amelyeket az átugrott
utasítások végeznek. Ezt egy második, regiszterként egy bites bittérkép hozzáadásával tudjuk
megtenni, hogy nyomon tudjuk követni az elakadt utasítások által végrehajtott tárolásokat. Az
utasítás kiosztás szabályát most ki kell terjeszteni, hogy megakadályozzuk minden olyan utasítás
kiosztását, amelynek operandusa ütemjelzés szerint egy olyan utasítással tárolódik ami előtte jött, de
átugrottuk.
A 4.44 ábrán egy új módszert vezettünk be, a regiszterátnevezést. Az előrelátó dekódolóegység az R1 használta az I6-ban és I7-ban egy titkos regiszterre, S1-re váltja, ami nem látható a
programozó számára. Most az I6-ot kioszthatjuk I5-tel párhuzamosan. A modern CPU-k gyakran titkos
regiszterek tucatjait használják regiszter átnevezéssel. Ez a módszer gyakran kiküszöböli a WAR és a
WAW függőségeket.
![Page 63: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/63.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 63/133
63.
Feltételezett végrehajtás
A számítógépes programok alapblokkolókra bonthatók szét, ahol minden alapblokk egy
lineáris kódsorozatból áll, a tetején egy belépési ponttal az alján egy kilépéssel. A gond az, hogy a
legtöbb alapblokk rövid és nincs elegendő párhuzamosság bennük, hogy azt hatékonyan
kihasználhassuk. Tehát a következő lépés az hogy megengedjük: az átrendezés az alapblokkokhatárain átnyúljon, megkísérelve ezzel minden kiosztási hely feltöltését. Egy kód végrehajtását ,
mielőtt még tudnánk, hogy egyáltalán szükség lesz-e rá feltételezett végrehajtásnak nevezzük.
Ennek a módszernek az alkalmazása támogatást vár a fordítóprogramtól és a hardvertől is, néhány
kibővítéssel az architektúrában. A legtöbb esetben az utasítások átrendezése az alapblokk határokon
keresztül meghaladja a hardver képességeit, így egyértelműen a fordítóprogramnak kell az utasítást
mozgatni. A feltételezett végrehajtás néhány érdekes problémát vet fel: Pl.: alapvető, hogy egyik
feltételezett végrehajtásnak sincsenek visszavonhatatlan eredményei, hiszen később kiderülhet, hogy
nem kellet volna azokat végrehajtani. Bonyolultabb kódsorozatoknál gyakori módszer annak
megelőzése, hogy a feltételezett végrehajtás felülírja a regisztereket, mielőtt még kiderül, kívánatos-
e, hogy átnézzük az összes célregisztert, amit a feltételezett végrehajtás használ.
Szuperskaláris architektúra
Egy két szállítószalagos CPU-nál az egyetlen utasítás-elolvasó egység két darab utasítást olvasbe egyszerre, majd ezeket az egyik, ill. a másik szállítószalagra teszi. A szállítószalagoknak saját ALU-ja
van, így párhuzamosan tudnak működni, feltéve, hogy a két utasítás nem használja ugyanazt azerőforrást, és egyik sem használja fel a másik eredményét.
A szállítószalagok számának emelése négyre még elképzelhető, de ekkor már túl sok
hardverelemet kell megduplázni. Ehelyett a nagy teljesítményű más megoldást alkalmaznak. Az
alapötlet az, hogy csak egy szállítószalagot használnak de több funkcionális egységgel. A
szuperskaláris architektúra kifejezés ennek az elrendezésnek a jelölésére 1987-ben született.
A szuperskaláris processzor elvében implicit módon benne van az a feltételezés, hogy az S3
lényegesen gyorsabban tudja előkészíteni az utasításokat, mint ahogy az S4 fázis végrehajtja őket. Ha
az S3 fázis 10 ns-ként produkál egy utasítást, és az összes funkcionális egység végezni tud 10 ns alatt,
akkor mindig csak legfeljebb egy fog dolgozni, így az egésznek nincs semmi haszna. Valójában a
negyedik fázis funkcionális egységeinek egy órajelnél jóval több időt igényel feladata elvégzéséhez, a
memóriához fordulók vagy a lebegőpontos műveleteket végzők legalábbis biztosan. Lehet több ALU
az S4 fázisban.
![Page 64: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/64.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 64/133
64.
27. Feltételes végrehajtás, predikáció
Az IA-64 másik fontos jellemzője az a módszer, amellyel a feltételes elágazásokat kezeli. Ha
mód lenne arra, hogy a legtöbbjüktől megszabaduljunk, a CPU sokkal egyszerűbb és gyorsabb lenne.
Első ránézésre lehetetlen megszabadulni tőlük, mert a programok tele vannak if utasításokkal.Azonban, az IA-64 olyan technikát használ, az ún. predikációt, amely használatával nagymértékben
csökkenthető a számuk.
A jelenlegi számítógépek minden utasítása feltétel nélküli abban az értelemben, hogy amikor
a CPU eléri, akkor feltétel nélkül végrehajtja. Nincs helye belső kérdésnek: "Tenni vagy nem tenni?"
Ezzel ellentétben a predikációs architektúrákban az utasítások feltételt tartalmaznak (predikátum),
amely megmondja, hogy végre kell-e hajtani az utasítást, vagy sem. Ez a paradigma, amely
elmozdulást jelent a feltétel nélküli utasításoktól a predikációs utasítások felé, lehetővé teszi, hogy
(sok) feltételes elágazástói megszabaduljunk. Ahelyett hogy két, feltétel nélküli utasítássorozat között
kellene választani, valamennyi utasítást egyetlen predikációs utasítássorozatba fésülnek össze,különböző predikátumot alkalmazva különböző utasításokban.
A predikáció működésének bemutatását kezdjük egy egyszerű példával Ez a feltételes
végrehajtás (feltételes utasítás), a predikáció előd je. Az (a) ábra az if utasítást mutatja, a (b) ábrán
pedig ennek három utasítássá való lefordítása látható: összehasonlítás, feltételes elágazás és
mozgató utasítás. A (c) ábrán megszabadultunk a feltételes elágazástói, bevezetve egy új utasítást, a
feltételes mozgatást. Ez megvizsgálja az Rl regiszter tartaimát, ha 0, akkor R3-at átmásolja R2-be, ha
nem 0, akkor nem tesz semmit.
(a) if(R1==0)
R2=R3;
(b) CMP R1, 0
BNE L1
MOV R2, R3
L1:
(c) CMOVZ R2, R3, R1
![Page 65: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/65.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 65/133
65.
28. A Pentium 4, az UltraSPARC III és az I-8051 mikroarchitektúrája.
A Pentium 4 CPU mikroarchitektúrája
Kívülrő1 a Pentium 4 hagyományos CISC gépnek tűnik, nagy és nehezen kezelhetőutasításrendszerrel, amely támogatja a 8, 16 és 32 bites egész műveleteket, valamint a 32 és 64 bites
lebegőpontos műveleteket is. Csupán 8 látható regisztere van, és nincs két o lyan, amely teljesen
megegyezne. Az utasítások hossza 1 és 17 bájt között változik. Röviden, olyan örökölt architektúra,
ami látszólag mindent rosszul csinál.
Belülről azonban a Pentium 4 egy modern, egyszerű, mélyen csővezetékezett RISC-magot
tartalmaz, mely különlegesen gyors órafrekvencián fut, és ez valószínűleg a következő években
tovább növelhető. Egészen bámulatos, hogy az Intel mérnökei képesek voltak egy régi architektúrára
korszerű processzort építeni.
A NetBurst mikroarchitektúra áttekintése
A Pentium 4 mikroarchitektúrája, melyet NetBurst mikroarchitektúrának neveznek, teljesen
elszakad a Pentium Pro, Pentium II és Pentium IlI-nál használt korábbi P6 mikroarchitektúrától, és
alapját képezi annak, amire az Intel a következő néhány évben építeni fog. A Pentium 4 négy fő
részből áll: a memória-alrendszer, a bemeneti rész, a sorrenden kívüliséget vezérlő és a végrehajtó
egység.
A memória-alrendszer tartalmazza az egyesített L2 (2. szintű) gyorsítótárat és a küls6 RAM-
nak a memóriasínen való eléréséhez szükséges logikát. Az L2 az első generációs Pentium 4 -ben 256
KB volt, a másodikban 512 KB, a harmadikban pedig 1 MB. Az L2 gyorsítótár 8 utas halmazkezelésűgyorsítótár, mely 128 bájtos gyorsítósoron alapszik. Ha egy keresett bejegyzés nem található meg az
L2 gyorsítótárban, két 64 bájtos átvitelt kezdeményez a főmemóriából, hogy betöltse a szükséges
blokkokat. Az L2 gyorsítótár egy visszaíró szervezésű gyorsítótár. Ez azt jelenti, hogy sor
módosulásakor az új tartalom nem kerül vissza a memóriába, amíg a sor a memóriába nem töltődik.
A gyorsítótárhoz kapcsolódik egy előre betöltő egység, amely megpróbálja előre betölteni az
adatokat a főmemóriából az L2 gyorsítótárba, még mielőtt arra szükség lenne. Az L2 gyorsítótárból az
adatok nagy sebességgel áramolhatnak más gyorsítótárakba. Egy új L2 gyorsítótár betöltése minden
második óraciklusban kezdődhet, így például 3 GHz-es órajel mellett, elméletileg az L2 gyorsítótár
akár 1,5 milliárd 64 bájtos blokkot is szolgáltathat másodpercenként a többi gyorsítótárnak, ami 96GB/s sávszélességet jelent.
A memória-alrendszer alatt a bemeneti rész található, amelyik betölti az utasításokat az L2
gyorsítótárból, és dekódolja a programnak megfelelő sorrendben. Minden Pentium 4 ISA -utasítást
lebont RISC-szerű mikroműveletek sorozatára. Az egyszerűbb utasításokhoz a betöltő/dekódoló
egység határozza meg, mely mikroműveletek szükségesek. A bonyolultabbaknál a mikroművelet
sorozatot a mikro-ROM-ból keresi ki. Akár így, akár úgy, minden Pentium 4 ISA-utasítás
mikroműveletek sorozatává konvertálódik a lapka RISC magja számára. Ezzel a mechanizmussal
hidalták át az ősi CISC-utasításhalmaz és a modern RISC-adatút közötti szakadékot.
![Page 66: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/66.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 66/133
66.
A dekódolt mikroműveletek bekerülnek a nyomkövető gyorsítótárba, amely az 1. szintű
utasítás-gyorsítótár. Azáltal, hogy a dekódolt mikroműveleteket gyorsítótárazza, és nem a
feldolgozatlan utasításokat, egy nyomkövető gyorsítótárbeli utasítás végrehajtásakor nincs szükség
másodszori dekódolásra. Ez a megközelítés az egyik kulcsfontosságú különbség a NetBurst
mikroarchitektúra és a P6 között (az utóbbi csak a Pentium 4 utasításokat tároIta az 1. szintű utasítás-
gyorsítótárban). Az elágazásjövendölésre is itt kerül sor.
Az utasítások a nyomkövető gyorsítótárból a program által előírt sorrendben kerülnek az
ütemezőbe, de onnan nem feltétlenül a program szerinti sorrendben kerülnek tovább. Ha egy nem
végrehajtható mikroművelet következik, az ütemező tárolja, de folytatja az utasításfolyam
feldolgozását, és a rákövetkező utasítások közül is kioszt olyanokat, melyek mindegyikének
erőforrásai (regiszterek, működési egységek stb.) elérhetők. A regiszterátnevezés is itt történik, hogy
késedelem nélkül továbbengedjük a WAR és WAW függőséggel rendelkező utasításokat.
Habár az utasításokat sorrenden kívül is ki lehet osztani, a Pentium 4 architektúrának pontos
megszakításokra vonatkozó követelménye azt jelenti, hogy az ISA utasításoknak sorrendben kellbefejeződni (azaz elérhetővé tenni az eredményüket). Ezt a feladatot a befejező egység kezeli. Az
ábra jobb felső negyedében találhatók a végrehajtó egységek, amelyek az egész, a lebegő pontos, és
a speciális műveleteket hajtják végre. Több végrehajtó egység is létezik, és ezek párhuzamosan
futnak. Adataikat a regiszterekből és az Ll adat gyorsítótárból kapják.
Az UltraSPARC III Cu CPU- jának mikroarchitektúrája:
Az UltraSPARC-sorozat a SPARC architektúra 9. változatának Sun megvalósítása. A felhasználó
vagy a programozó szemszögéből (azaz ISA-szinten) a különböző modellek eléggé hasonlók, főleg
teljesítményben és árban különböznek. A mikroarchitektúra szintjén azonban jelentősek akülönbségek. A megnevezésben lévő Cu, a lapka vezetékeinél használt rézre utal, ellentétben az
alumíniumvezetékezéssel, amit elődjénél használtak. A réznek kisebb az ellenállása, mint az
alumíniumnak, ami vékonyabb vezetékeket és gyorsabb működést tesz lehetővé.
Az UltraSPARC III Cu egy teljesen 64 bites gép, 64 bites regiszterekkel és 64 bites adatúttal,
bár a 8. változatú (vagyis 32 bites) SPARC-okkal való visszafelé kompatibilitás miatt 32 bites
operandusokat is tud kezelni, és valóban változtatás nélkül futtat 32 bites SPARC -szoftvert. Bár a
belső architektúra 64 bites, a memóriasín 128 bit széles, a Pentium 4 -hez hasonlóan, amelynek 32
bites architektúrája és 64 bites memóriasínje van, de mindkét esetben a sín egy generációval
későbbi, mint maga a CPU.
A Pentium 4-gyel ellentétben az UltraSPARC egy valódi RISC-architektúra, ami azt jelenti,
hogy nincs szüksége arra a bonyolult mechanizmusra, ami a végrehajtáshoz átalakítja a régi CISC-
utasításokat mikroműveletekre. A gépi utasítások maguk a mikroműveletek. Azonban az utóbbi
években grafikai és multimédia-utasításokkal egészítették ki a processzort, melyek végrehajtása
speciális hardverberendezéseket igényel.
![Page 67: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/67.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 67/133
67.
Az UltraSPARC III Cu mikroarchitektúrájának áttekintése:
Egészében véve, sokkal egyszerűbb, mint a Pentium 4 NetBurst mikroarchitektúrája, mert az
UltraSPARC-nak egyszerűbb ISA-architektúrát kell megvalósítania. Mindemellett néhány lényeges
komponens hasonlít a Pentium 4-nél használtakhoz. Ezeket a hasonlóságokat többnyire a
technológia, illetve a gazdaságosság vezérelte. Például, amikor ezeket a lapkákat tervezték,ésszerűnek számított a 8-16 KB méretű L1 adatgyorsítótár, ezért lettek ekkorák. Ha valamikor a
jövőben technológiai és gazdasági szempontból egy 64 MB-os L1 gyorsítótár számít majd ésszerűnek,
akkor minden CPU-ban az lesz. Ezzel ellentétben a különbségek többnyire a régi CISC utasításhalmaz
és a modern RISC-mag közötti különbségek áthidalásából, illetve ennek hiányából adódnak.
A 32 KB-os 4 utas halmazkezelésű utasítás-gyorsítótár 32 bájtos gyorsítósort hasznáL Mivel a
legtöbb UltraSPARC-utasítás 4 bájtos, így körülbelül 8K utasításnak van itt hely, ami valamivel kisebb,
mint a NetBurst nyomkövető gyorsítótára.
Az utasításkiosztó egység négy utasítást is elő tud készíteni óraciklusonként.
Ha gyorsítótárhiány lép fel az L1 gyorsítótárban, kevesebb utasítást fog kiosztani. Ha egy
feltételes elágazó utasításba ütközik, utánanéz a 16K bejegyzést tartalmazó ugrótáblában, hogy az a
következő utasítást jövendöli, vagy a célcímen szereplőt. Ezen felül, az utasítás -gyorsítótárban lévő
szavakhoz kapcsolt extrabit is segíti az elágazás jövendölést. Az előkészített utasítások átkerülnek egy
16 elemű utasítás pufferbe, amely kisimítja az utasítások csővezetékekbe áramlását.
Az utasítás puffer kimenete bekerül az egész, a lebegőpontos és a betöltő/tároló egységekbe.
Az egész aritmetikájú végrehajtó egység tartalmaz két ALU-t és egy rövid csővezetéket is az elágazó
utasításokhoz. Az ISA-regiszterek és néhány firkáló regiszter is itt található. A lebegőpontos egység 32
regisztert és három külön ALU-t tartalmaz rendre az összeadás/kivonás, a szorzás és az osztás
számára. A grafikai utasítások is itt kerülnek végrehajtásra. A betöltő/tároló egység kezeli a
különböző betöltő és tároló utasításokat.
Adatúttal rendelkezik három különböző gyorsítótárhoz is. Az adatgyorsítótár egy
hagyományos 64 KB-os 4 utas halmazkezelésű L1 adatgyorsítótár, mely 32 bájtos gyorsítósort
használ. A 2 KB-os előre betöltő gyorsítótár azért van jelen, mert az UltraSPARC ISA tartalmaz előre
betöltő utasításokat, melyek lehetővé teszik a fordító számára, hogy adatszavakat töltsenek be,
mielőtt még szükség lenne rájuk. Ha a fordító úgy gondolja, szüksége lehet egy bizonyos szóra, előre
betöltő utasítást adhat ki, aminek eredményeképpen a megcímzett gyorsítósor idő előtt bekerül az
előre betöltő gyorsítótárba, felgyorsítva ezzel a szó elérését, amikor néhány utasítás múlva szükség
lesz rá. Bizonyos körülmények között hardveres előre betöltés is történik, hogy fokozódjon az olyan
örökölt programok teljesítménye, amelyek nem végeznek előre betöltést. A tárolási gyorsítótár egy
kisméretű (2 KB) gyorsítótár, melyet arra használunk, hogy összekapcsoljuk az eredmények írását, és
jobban kihasználjuk az L2 gyorsítótárba menő 256 bit széles sínt. Egyedüli feladata a teljesítmény
növelése.
![Page 68: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/68.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 68/133
68.
A lapka tartalmaz memóriavezérlő logikát is. Ez a logika három részre oszlik: a
rendszerinterfészre, az L2 gyorsítótár-vezérlőre és a memóriavezérlőre.
A rendszerinterfész 128 bit széles sínen keresztül kapcsolódik a memóriához. A külvilághoz
érkező összes kérés, az L2 gyorsítótárat kivéve, ezen a felületen halad keresztül. A 43 bites fizikai
memóriacímmel elméletben a főmemória egészen 8 TB-ig terjedhet, de az a nyomtatott áramkör,amire a processzort szerelték, 16 GB-ra korlátozza a memóriát. Az interfészt úgy tervezték, hogy több
UltraSPARC-ot is lehessen ugyanahhoz a memóriához kapcsolni, hogy ezek multiprocesszort alkos-
sanak.
Az L2 gyorsítótár-vezérlő tartja a kapcsolatot az egyesített L2 gyorsítótárral, mely a CPU
lapkáján kívül helyezkedik el. Azáltal, hogy az L2 gyorsítótár kívül van, 1, 4 és 8 MB is lehet a mérete.
A gyorsítósor mérete függ a gyorsítótár méretétől, ami az 1 MB-os gyorsítótárra vonatkozó 64 bájttól
a 8 MB-os gyorsítótárra vonatkozó 512 bájtig terjedhet. Összehasonlításul, a Pentium 4 L2
gyorsítótára a lapkán található, viszont helyhiány miatt 1 MB-ra korlátozódik. Két ellentétes nézet: az
UltraSPARC jóval magasabb találati arányt érhet el az L2 gyorsítótárban, mint a Pentium 4 (mertnagyobb lehet a mérete), viszont az L2 gyorsítótár hozzáférése lassabb (mert nincs rajta a lapkán).
A memóriavezérlő képezi le a 64 bites virtuális címeket 43 bites fizikai címek re. Az
UltraSPARC támogatja a virtuális memóriát, ahol a lapok mérete 8 KB, 64 KB, 512 KB vagy 4 MB lehet.
A leképezés gyorsítására speciális táblázatok, ún. TLB-k (Translation Lookaside Buffer, lapkezelő
segédpuffer) állnak rendelkezésre, hogy össze lehessen hasonlítani az éppen hivatkozott virtuális
címet a nemrégiben hivatkozottakkal. Három ilyen táblázat áll rendelkezésre az adatokhoz, hogy
kényelmesen lehessen kezelni a különböző lapméreteket, és kettő az utasítások leképezéséhez.
A 8051 CPU mikroarchitektúrája:
Ez jóval egyszerűbb a Pentiumnál és az UltraSPARC-nál. Az egyszerűség oka, hogy a lapka
nagyon kicsi (60000 tranzisztor), és még a csővezetékek elterjedése előtt tervezték. Továbbá az, hogy
az elsődleges tervezési szempont az volt, hogy a lapka olcsó legyen, és nem az, hogy gyors. Az
olcsóság és egyszerűség egymás jó barátai, míg az olcsóság és gyorsaság nem azok.
A 8051-es lelke a fősín. Számos regiszter kapcsolódik hozzá, melyek többségét a programok
képesek írni és olvasni. Az ACC regiszter az akkumulátor (ACCumulator), a fő aritmetikai regiszter,
melyben a legtöbb számítás eredménye keletkezik. A legtöbb aritmetikai utasítás ezt használja. A B
szorzás és osztás esetén kap szerepet, valamint ideiglenes eredmények tárolására is használható. Az
SP regiszter a veremmutató, és mint a legtöbb gépben a verem tetejére mutat. Az IR regiszter az
utasításregiszter. Az éppen végrehajtás alatt álló utasítást tartalmazza.
A TMPl és TMP2 regiszterek az ALU tárolói. Egy ALU-művelet végrehajtásakor az operandusok
először ezekbe a tárolókba kerülnek, az ALU csak ezután kezd működni. Az ALU kimenete bármelyik
írható regiszterbe bekerülhet a fősínen keresztül. A PSW (Program Status Word, programállapotszó)
-regiszterbe kerülnek a feltételkódok, melyek jelzik, ha az eredmény nulla, negatív stb.
![Page 69: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/69.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 69/133
69.
A 8051-es külön memóriával rendelkezik az adatok és a kód számára. Az adat RAM 128
(8051) vagy 256 bájtos (8052), így a 8 bites RAM ADDR regiszter elegendően széles a címzésre. A
RAM címzéséhez a kívánt bájt címét a RAM ADDR regiszterbe kell tenni, és elindítani a
memóriaműveletet. A kódmemória 64 KB lehet (ha lapkán kívüli memóriát használunk), így a
címzéséhez használt ROM ADDR 16 bit széles. Ugyanúgy a ROM ADDR regiszter a programkódot címzi
a ROM-ban.
A DPTR (Double PoinTeR, dupla szélességű mutató) 16 bites regiszter a 16 bites címek
kezelésére és összeállítására. A PC regiszter a 16 bites utasításszámláló, ami a következőnek
betöltendő és végrehajtandó utasítás címét tartalmazza. A PC NÖVELŐ regiszter egy speciális
hardver, amely pszeudoregiszterként működik. Ha belemásolják a PC-t, majd kiolvassák, az érték
automatikusan növekszik. Sem a PC, sem a PC NÖVELŐ nem érhető el a fősínről. Végül, a PUFFER egy
újabb 16 bites regiszter. Mindegyik 16 bites regiszter tulajdonképpen két 8 bites regiszterből áll,
melyeket függetlenül is lehet kezelni, de a hatásuk 16 bites regiszterként érvényesül.
A 8051 rendelkezik még a lapkán elhelyezett három 16 bites időzítővel, melyeknélkülözhetetlenek valós idejű alkalmazások esetén. Van még négy 8 bites B/K portja, melyek
lehetővé teszik a 8051 számára, hogy akár 32 külső gombot, lámpát, érzékelőt, indítókart stb.
vezérelhessen. Éppen az időzítők és a B/K portok teszik lehetővé, hogy a 8051 kiegészítő lapkák
nélkül is használható legyen beágyazott alkalmazások esetén.
A 8051 szinkronprocesszor, melynek legtöbb utasítása egy óraciklust igényel, bár némelyik
többet. Minden óraciklust fel lehet osztani hat részre, melyeket állapotoknak nevezünk:
1. Betöltődik a következő utasítás a ROM-ból, rákerül a fősínre és az IR regiszterbe.
2. Dekódolódik az utasítás és növekszik a PC. 3. Az operandusok előkészítése történik.
4. Az egyik operandus rákerül a fősínre, általában azért, hogy TMP1-en keresztül az ALU
felhasználhassa. Az ACC regisztert is ebben az állapotban lehet átmásolni TMP2-be, így
az ALU mind a két bemenete készen áll.
5. Az ALU végrehajtja a műveletet.
6. Végül az ALU kimenete visszakerül a fősínen keresztül a rendeltetési helyére. Eközben a
ROM ADDR regiszter előkészül a következő utasítás betöltésére.
A 8051 egyetlen fősínnel rendelkezik (a lapka területének csökkentése miatt), regisztereinek
halmaza heterogén, valamint három időzítő és négy port kapcsolódik a fősínre, továbbá van mégnéhány extra regisztere a lokális sínen. Minden adatút-ciklusban két operandus fut keresztül az
ALU-n, és az eredmény visszakerül egy regiszterbe, ahogy az a korszerűbb számítógépeken is
történik.
![Page 70: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/70.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 70/133
70.
29. A Pentium 4, az UltraSPARC III és az I-8051
mikroarchitektúrájának összehasonlítása
A három példánk nagyon különböző, de mégis van bennük némi közös. A Pentium 4-nek van
egy régi CISC-utasításhalmaza, amelyet az Intel mérnökei legszívesebben bedobnának a SanFranciscó-i öbölbe, ha ezzel nem szegnék meg Kalifornia vízszennyezési törvényeit. Az UltraSPARC III
tiszta RISC-elképzelés, szegényes és egyszerű utasításhalmazzal. A 8051 egyszerű 8 bites processzor a
beágyazott alkalmazások számára. Mégis mindegyik lelke a regiszterkészlet, és az egy vagy több ALU,
amely elvégzi az egyszerű aritmetikai és logikai műveleteket a regisztereken.
Ezen nyilvánvaló külső különbségek ellenére a Pentium 4-nek és az UltraSPARC III-nak nagyon
hasonlók a végrehajtó egységei. Mindkét végrehajtó egység olyan mikroműveleteket fogad el,
amelyek egy műveleti kódot, két forrásregisztert és egy célregisztert tartalmaznak. Mindkettő végre
tud hajtani egy mikroműveletet egy ciklus alatt. Mindkettőnek nagy tudású csővezetékei, elágazásjö-
vendölése, valamint osztott I- és D-gyorsítótára van.
Ez a belső hasonlóság nem véletlen, és nem a Szilikon-völgy mérnökeinek végtelen
munkaszeretetének köszönhető. Mint azt a Mic-3 és Mic-4 példákban láttuk, könnyű és természetes
olyan csővezetékes adatutat építeni, amelyik vesz két forrásregisztert, átfuttatja az ALU-n, és az
eredményt egy regiszterbe tárolja. A jelenlegi technológiával ez a leghatékonyabb kivitelezés.
A fő különbség a Pentium 4 és az UltraSPARC III között az, ahogy ISA -utasításaikat a
végrehajtó egységhez juttatják. A Pentium 4-nek szét kell bontania a CISC-utasításait, hogy - a
végrehajtó egység elvárásainak megfelelően - háromregiszteres formátumúvá alakítsa őket. Nagy
utasítások szétszedése csinos, formás mikroműveletekre. Az UltraSPARC III-nak nem kell semmittennie, mert eredeti utasításai már csinos, formás mikroműveletek. Ezért van az, hogy a legtöbb új
ISA RISC típusú - így könnyebb a megfeleltetés az ISA utasításhalmaz és a belső végrehajtó motor
között.
Tanulságos, ha végső tervezésünket, a Mic-4-et összehasonlítjuk ezzel a két valóságos
példával. A Mic-4-hez leginkább a Pentium 4 hasonlít. Mindkettőnek az a feladata, hogy egy nem
RISC ISA-utasításhalmazt értelmezzen. Ezt mindkettő úgy csinálja, hogy az ISA-utasításokat egy
műveleti kóddal szétbontja mikroműveletekre, két forrásregiszterrel és egy célregiszterrel. Mindkét
esetben a mikroműveleteket lerakjuk egy sorba, későbbi végrehajtásra. A Mic-4 elgondolás szigorú
sorrend szerinti kiosztást, sorrend szerinti végrehajtást és sorrend szerinti befejezést követel, míg aPentium 4-nek sorrend szerinti kiosztás, sorrendtől eltérő végrehajtás és sorrend szerinti befejezés a
vezérelve.
A Mic-4 és az UltraSPARC III valójában egyáltalán nem hasonlíthatók össze, mert az
UltraSPARC III-nak RISC-utasításai vannak (vagyis háromregiszteres mikroműveletek), mint a saját
ISA-utasításhalmaza. Ezeket nem kell szétbontani. Végrehajthatók úgy, ahogy vannak, mindegyik
egyetlen adatút ciklussal. A Pentium 4-gyel és az UltraSPARC III-mal szemben a 8051 igazán egyszerű
gép. Inkább RISC, mint CISC típusú, hiszen legtöbb utasítása egyszerű és szétbontás nélkül
végrehajtható egy óraciklusban. Nincs csővezetéke és gyorsítótára, van viszont sorrend szerinti
kiosztása, sorrend szerinti végrehajtása és sorrend szerinti befejezése. Egyszerűségében főleg a Mic-l-gyel rokon.
![Page 71: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/71.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 71/133
71.
30. Gépi utasítási szint. Memória modellek, memória szemantika. APentium 4, az UltraSPARC III és az I-8051 regiszterei
Gépi utasítási szint (ISA szint)
Alapvetöen az ISA szint azt jelenti, ami a gépi szintű programozó számára látszik a gépből
(mondjuk azt, hogy ami a fordítóprogramok kimete). ISA szintű kód készítése céljából a
fordítóprogram írójának ismernie kell a memóriamodellt, hogy milyen regiszterek vannak, hogy
milyen adatokat és utasításokat használhat, és í gy tovább. Mindezen információk összegződése
alkotja az ISA szintet.
E definíció szerint minden olyan kérdés, ami arra vonatkozik, hogy a mikroarchitektúra
mikroprogramozott-e, csővezetékes-e, szuperskaláris-e, és így tovább, nem része az ISA szintnek,
mert a fordítóprogram készítője számára nem látható. A szuperskaláris végrehajtás részletei láthatók
az ISA szinten, í gy a szintek elválasztása nem is olyan egyszerű, mint elsőre látszik.
Néhány architektúra ISA szintjét formális dokumentum definiálja, amelyet gyakran ipari
konzorciumok készitenek. Mások esetén ilyen dokumentum nem létezik. Pl. mind a V9 SPARC (SPARC
9-es verzió), mind a JVM rendelkezik hivatalos dokumentációval (Weaver és Germond, 1994;
valamint Lindholm és Yellin, 1997). Az a célja az ilyen definiáló dokumentumnak, hogy lehetővé
tegye, hogy különböző megvalósítók olyan gépeket építsenek, amelyek ugyanazon szoftvert futtatják
ugyanolyan eredményt produkálva.
Az ISA szint egy másik fontos tulajdonsága, hogy a legtöbb gép legalább két módban
működhet. A kernel mód az operációs rendszer futtatására szánt mód, amikor is minden utatsítás
végrehajtható. A felhasználói mód a felhasználói programok futtatását célozza és nem teszi lehetővé
bizonyos érzékeny utasítások végrehajtását (mint amelyek közvetlenül manipulálják a gyorsítótárat).
Memória modellek
Minden számítógép memóriája cellákra van osztva, és a cellák címei összefüggő tartományt
képeznek. A leggyakoribb cellaméret napjainkban 8 bit, de régebben alkalmaztak 1-60 bites
cellaméretet is (lásd 2.10 ábrát). Egy 8 bites cella neve bájt. A 8 bites cellaméret oka az, hogy az ASCII
kód karakter 7 bit, így a paritásbittel együtt éppen belefér egy bájtba.
A bájtok általában 4 bájtos vagy 8 bájtos (64 bit) csoportokba, szavakba vannak rendezve,lehetövé téve, hogy az utasítások teljes szavakon végezzenek műveletek. Sok architektúra
megköveteli, hogy a szavak természetes határokhoz legyenek igazítva, pl. a 4 bájtos szavak címe
0,4,8,…stb kell legyen.
Az igazítást gyakran azért követelik meg, mert a memória így hatékonyabban működhet. A
Pentium 4 például, amely 8 bájtot olvas ki a memóriából, 36 bites fizikai címet használ, de csak 33 bit
címe van.
A legtöbb gép egyetlen lineáris címtartományt alkalmaz, ami 0-tól valami maximumig terjed,
ami gyakran 232 vagy 264 bájt. Azonban néhény gép külön címtartománnyal rendelkezik az adatok, és
külön az utasítások számára. Így a 8 címről történő utasítás kiolvasása más címtartományra
![Page 72: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/72.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 72/133
72.
vonatkozik, mint a 8 címről történő adat kiolvasása. Ez a séma bonyolultabb, mint amikor csak
egyetlen címtartomány van, azonban két előnye is van. Először, lehetséges 232 méretü program és
232 adatok csak 32 bites címzést használva. Másodszor, mivel minden írás automatikusan az adat -
címtartományra vonatkozik, nem lehet a programot ily módon felülírni, ami egy programozási
hibaforrás kiküszöbölését jelenti.
Memória szemantika
Még egy aspektusa van az ISA szintű memória-modellnek – ez a memória szemantika.
Természetes elvárás, hogy egy LOAD utasítás, amely ugyanazon címre vonatkozó STORE utasítás lett
végrehajtva, éppen eltárolt adatot eredményez. Azonban, a mikroutasítások sorrend je
átrendeződhet. Tehát valós a veszély, hogy a memória nem az elvárt módon viselkedik. A probléma
még rosszabbá válhat multiprocesszor esetén, amikor a különböző CPU-k (esetleg átrendezett)
olvasási szorzatot bocsátanak ki osztott memőriára vonatkozóan.
Egy szélsőséges megoldás, ha minden memóriahivatkozást szekvencializálnak, így mindegyikelőbb befejeződik, mint egy másik elkezdődne.
Másik szélsőséges megoldás esetében semmi garancia nincs általánosan biztosítva. A
memórihivatkozások sorrendjének kikényszerítésére SYNC utasítást kell a programnak végrehajtania,
amely blokkolja minden memóriaművelet kibocsátását mindaddig, amíg az összes eddig kiadott
memóriaművelet be nem fejeződött.
Közbülső megoldás is lehetne a memóriamodellre, amikor is a hardver automatikusan blokkol
bizonyos memóriahivatkozásokat (többek között a RAW és WAR szükséget tartalmazókat), de nem
mindet.
A Pentium 4 regiszterei
A Pentium 4 regisztereit az 5.3. ábra mutatja. Az első négy, EAX, EBX, ECX és EDX többé-
kevésbé általános célú regiszterek, bár mindegyiknek van sajátossága. Az EAX a fő aritmatikai
regiszter, az EBX jól használható mutató (memóriacím) tárolására, az ECX-nek a ciklusszervezésben
van szerepe. Az EDX a szorzás és osztás utasításoknál kell, amikor is az EXC-vel együtt tartalmazzák a
64 szorzatot, illetve osztandót. A felsorolt regiszterek mindegyikének első 16 bitje egy 16 bites, első 8
bitje pedig egy 8 bites regisztert alkot. Ezek lehetővé teszik 8 és 16 bites adatok, műveletek egyszerű
elvégzését. A 8088 és 80286 csak 8, illetve 16 bites regisztert tartalmazott. A 32 bites regisztereket a
80386-tal vezették be, az E betüvel jelölve azokat, ami Extendedet jelent.
A következő három szintén valamelyest általános célú regiszter, de több különlegességgel. Az
ESI-t és EDI-t memóriába mutató mutatók tárolására szánták, különösen a hardveres karakterlánc
műveletek esetén, amikor is az ESI a forrás (Source) karakterláncra, az EDI pedig a cél (Destination)
karakterláncra mutat. Az EBP helyett is mutató-regiszter, tipikusan az aktuális veremkeret címét
tartalmazza, mint az IJVM esetén az LV regiszter. Ha egy regiszter (mint az EBP) tartalma a lokális
veremkeretet tartalmazza, akkor azt mondjuk, hogy keretmutató. Végül az ESP a veremmutató.
![Page 73: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/73.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 73/133
73.
A regiszterek köv. csoportja a CS és a GS nagymértékben elektronikus őskövületek, amelyeket
a 8088 esetén a 220 méretű memória 16 bittel történő címzésére használtak. A következő az EIP, ami
a programszámláló (Extended Istruction Pointer / kiterjesztett utasításmutató). Végül az EFLAGS
regiszter látható, ami a PSW.
Az UltraSPARC III regiszterei
A UltraSPARC III regiszterek két csoportját tartalmazza: 32 darab 64 bites álatános célú
regiszter és 31 darab lebegőpontos regiszter. Az általános célú regiszterek jelei: R0,….,R31, bár
bizonyos környezetben más elnevezések is elöfordulnak.
A globális változók olyan konstansok, változók és mutatók, amelyeket minden eljárás használ,
bár szükség esetén elmenthetők és visszatöltheőök eljárásba való belépéskor, illetve kilépéskor. Az Ix
és az Ox regisztereket paraméterek átadására használják, hogy elkerüljék a memóriahivatkozást.
Három dedikált regisztert speciális célra használnak. Az FP és az SP regiszterek az aktuális
keret határait tartalmazzák. Az FP regiszter az aktuális keret kezdőcímét tartalmazza és a lokális
vátozók címzésére szolgál. Az SP az aktuális verem tetejére mutat és a verembe (push), illetve
veremből (pop) műveletek hatására változik. Ezzel ellentétben az FP csak eljáráshíváskor és
visszatéréskor változik A harmadik speciális célra használt regiszter az R31, ami az aktuális eljárás
visszatérési címét tartalmazza.
Az UltraSPARC ténylegesen 32-nél több általános regisztert tartalmaz, de csak 32 látszik a
programozó számára egy adott pillanatban. Ezt a tulajdonságot regiszterablaknak nevezik.
Regiszterablak technika: Andrew S. Tanenbaum: Számítógép architektúrák 363-365. o.
Az UltraSPARC III 32 lebegőpontos regiszterrel rendelkezik, amelyek mindegyike vagy 32
bites, vagy 64 bites számot tartalmazhat. Lehetséges két regiszterben tárolni egy 128 bites számot is.
Az UltraSPARC architektúrája töltés/tárolás architektúra. Ez azt jelenti, hogy csak a
regiszterek és a memória közötti adatátvitelt megvalósító betöltő LOAD és tároló STORE utasítá sok
hivatkoznak közvetlenül memóriára. Az összes többi utasítás operandusa mindig valamelyik
regiszterben van (nem memóriában), vagy az utasításban van és az eredmény is mindig regiszterbe
kerül.
Az I-8051 regiszterei
A 8051-es regiszterkezelése szokatlan. A legtöbb 8051-es program úgy készül, hogy nyolc
darab 8 bites regisztert használ. Ez a természetes használata a CPU-nak, mert a legtöbb utasítás egy 3
bites mezőn határozza meg a használt regisztert. A regiszterekre R0,…,R7 nevekkel hivatkozunk.
Mindamellett négy regiszterkészlete van, de egyszerre csak az egyik használható. A PSW 2 bites
mezője mondja meg, éppen melyik készlet az aktuális. A több regiszterkészlet célja az, hogy lehetővé
tegye a nagyon gyors megszakításfeldolgozást. Ha megszakítás keletkezik, a feldolgozó programnak
nem kell elmentenie az összes reigisztert, hanem csak átvált egy másik készletre. A 8051 -esnek ez a
tulajdonsága lehetővé teszi, hogy másodpercenként nagyon nagy számú megszakítást tudjon
feldolgozni, ami nagyon fontos tulajdonsága minden olyan processzornak, amelyet beágyazott valós
idejű rendszerben akarnak használni.
![Page 74: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/74.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 74/133
74.
Egy másik sajátossága a 8051 regisztereinek, hogy a memóriában vannak. A memória 0. bájtja
a 0. regiszterkészlet R0 regisztere, hasonlóan az 1. bájt az R1 regiszter és így tovább.
A 8051 a négy általános regiszterkészleten kívül tartalmaz néhány speciális célú regisztert is.
A PSW-ben balról jobbra haladva van az átvitelbit, kiegészítő átvitelbit, a használt regiszterkészletre
utaló bitek, a túlcsordulásbit és a paritásbit. A használt regiszterkészletre utaló bitek kivételévelminden bitet az arimetikai utasítások állítanak be.
Az IE regiszter a megszakítások egyedi és kollektív engedélyezését és tiltását kezeli. Ha az EA
bit 0, akkor minden megszakítás tiltott. Ezen bit törlése lehetővé teszi minden további megszakítás
tiltását egyetlen utasítással. Az EA bit 1-re állítása engedélyez minden olyan megszakítást, amelynek
egyedi bitje 1. Az E2, E3 és E0 bitek engedélyezik vagy tiltják a három időzítő csatornát. Legfeljebb
három csatornához tartozó számláló futhat egyszerre, és ezek mindegyike megszakítást válthat ki, ha
letelt az ideje. Az ES bit engedi vagy tiltja a soros vonali megszakítást. A további két bit a külső
eszközök megszakítását engedi vagy tiltja.
Az IP regiszter határozza meg a megszakítások prioritási szintjét. Két szint van: alacsony és
magas. Ha alacsony prioritási szintű megszakítás kiszolgálása közben magas prioritású keletkezik,
akkor az alacsony feldolgozása felfüggeszthető, de fordítva nem.
A TCON regiszter vezérli a 0. és az 1. időzítőt, ezek a fő időzítők. Az O1 és O0 biteket hardver
állítja be, ha a hozzá tartozó időzítő túlcsordul. Az R1 és R0 bitek a futásvezérlő bitek, amelyek
lehetővé teszik, hogy a program szoftveresen ki- vagy bekapcsolja az időzítőt. A többi bit a két időzítő
él- vagy szintvezérlésével kapcsolatos.
Az utolsó regiszter, a TMOD az időzítők üzemmódját határozza meg (8, 13 vagy 16 bites),
hogy valódi időzítő avagy számláló, továbbá a fokozatot, hogy mely hardverjelek vezérlhetik az
időzítőt.
Az összes eddig említett speciális regiszter és még néhány, mint az akkumulátor, a B/K
portok, mind a 128-255 memóriatartományban vannak. Ezek ugyanúgy címezhetők, mint bármely
memóriacella, ahogy az R0-R7 regiszterek is. Például az akkumulátor, amely szerepel szinte minden
aritmetikai utasításban, a 240-es címen található. A 8052 esetén, amely valódi memóriát tartalmaz a
128-255 tartományban, a speciális regiszterek átlapolják a memóriateret. Direkt címzés esetén a
8052-es a speciális regisztereket címzi, míg indirekt hivatkozáskor (regiszterben lévő mutatóval) a
RAM-on.
![Page 75: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/75.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 75/133
75.
31. A Pentium 4, az UltraSPARC III, az I-8051 utasítás formátumai,címzési módjai.
A Pentium 4 utasításformátumai
A Pentium 4 utasításformátumai nagyon bonyolultak és szabálytalanok, hatféle változó
hosszúságú mezővel, amelyek közül öt opcionális. Ez a helyzet azért alakult ki, mert az architektúra
több generáción keresztül fejlődött, és a korai fázisban nem éppen jó döntéseket hoztak. Továbbá, a
visszafelé kompatibilitás kényszere miatt később nem lehetett változtatni. Általánosan érvényes,
hogy ha egy kétoperandusú utasítás egyik operandusa a memóriában van, akkor a másik nem lehet a
memóriában (csak regiszterben). Tehát léteznek utasítások, amelyek regiszter-regiszter, regiszter-
memória, memória-regiszter operandusokon dolgoznak, de nincs olyan utasítás, amelynek mindkét
operandusa a memóriában lenne.
A korai Intel-architektúrákban minden utasítás műveleti kódja 1 bájtos volt, bár utasításokmódosítására intenzíven használták az úgynevezett prefix bájt módszert. Ez azt jelenti, hogy van egy
extra bájt az utasítás elején, ami módosítja a jelentését. A prefix bájtra példa a WIDE utasítás az IJVM
esetén. Szerencsétlen módon a fejlődés során egyszer csak az Intel kifogyott a műveleti kódokból, és
bevezette a 0xFF kiter jesztő kódot (escape code), hogy lehetővé tegyen egy második műveletikód-
bájtot.
A Pentium 4 egyedi bitjei nem sok információt adnak magáról az utasításról. Az egyetlen
szerkezet a műveleti kód mezőjében bizonyos utasításoknál, hogy a szélső bit jelzi, hogy bájt vagy szó
az operandus, egy másik bit pedig azt, hogy a memóriába vagy regiszterbe kerül a művelet
eredménye. Tehát a műveleti kódot teljesen dekódolni kell annak meghatározásához, hogy milyenosztályba tartozik a végrehajtandó utasítás, vagy hogy mekkora a hossza. Ez megnehezíti a nagy
hatékonyságú megvalósítást, mivel még ahhoz is intenzív dekódolást kell végrehajtani, hogy
meghatározzák a következő utasítás címét.
Sok memóriára hivatkozó utasításban a műveleti kód bájtot a következő bájt adja meg
ténylegesen az utasítást. Ez a 8 bit egy 2 bites MOD és két 3 bites REG és R/M mezőkre oszlik. Néha
az első 3 bit a műveleti kódhoz tartozik, így összesen 11 bites a kód. Azonban a 2 bites mód mező
csak négyféle operanduscímzési módot határozhat meg, és az egyik operandusnak regiszternek kell
lennie. Logikusan az EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP regiszterek mindegyike megadható lenne,
de a módszer miatt néhány kombináció tiltott, és speciális esetekre használják. Néhány mód továbbibájtokat igényel, ezek az SIB (Scale, Index, Base - skála, index, bázis). Ez a séma nem ideális, de
kompromisszumot képez a visszafelé kompatibilitás kényszere és az új lehetőségek bevezethetősége
között. Mindezekhez vegyük még hozzá, hogy néhány utasítás 1, 2 vagy 4 további bájtot tartalmaz
memóriacím (eltolás) megadására, és további 1, 2 vagy 4 bájtot a konstans számára.
Az UltraSPARC III utasításformátumai
Az UltraSPARC III ISA minden utasítása pontosan 32 bit és szó határra igazított. Az utasítások
általában egyszerűek, és csak egy akciót határoznak meg. A tipikus aritmetikai utasítás két regisztert
specifikál a bemenő operandusok és egyet az eredmény számára. Van olyan változat, amikor az egyik
![Page 76: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/76.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 76/133
76.
regiszter helyett egy 13 bites előjeles konstanst lehet megadni. A LOAD utasítás összeadja két
regiszter (vagy egy regiszter és egy 13 bites konstans) tartalmát, így képezve a betöltendő cella címét.
Az eredeti SPARC nagyon korlátozott utasításformákat tartalmazott. Később új formák
keletkeztek. E könyv írásának idején 31 a számuk, és ez növekszik. (Mikor áll elő vajon egy cég, hogy a
világ legösszetettebb RISC gépét reklámozza?) A legtöbb új változat úgy keletkezett, hogy bizonyosmezőkből néhány bitet elhagytak. Például az eredeti elágazó utasítás a 3. formát használta 22 bites
eltolással. Amikor a jövendölő elágazást bevezették, a 22 bitből 3-at levágtak, egyet a jövendölésre
használtak (lesz/nem lesz elágazás), kettőt pedig a feltételkód megadására alkalmaztak. Így maradt
19 bit az eltolásra. Egy másik példa erre a sok adattípus-konvertáló utasítás (például egészből
lebegőpontosba). Sok ezek közül az 1b formájú variánsa: az IMMEDIATE mezőt felbontották egy 5
bites részre (a forrásregiszter specifikálására) és egy 8 bites részre (további műveleti kódokra).
Minden utasítás első két bit je segít meghatározni az utasítás formáját, és megadja a
hardvernek, hol találja a műveleti kód maradék részét, ha van egyáltalán. Az 1a formában regiszter
mind a két forrás; az 1b-ben az egyik forrásregiszter, a másik egy -4096 és 4095 közötti konstans. A13. bit a két forma közül választ (a jobb szélső bit a 0.). Mindkét esetben regiszter acél. 64 utasítás
kódolásához elegendő hely van az 1a formában; ezek pillanatnyilag későbbi felhasználásra foglaltak.
32 bites utasítás esetén nem lehet 32 bites konstanst megadni az utasításban. A SETHI
utasítás 22 bitet ad meg, a maradék 10 bitet másik utasítás adja meg. Ez az egyetlen utasítás,
amelynek ez a formája.
A nem jövendölő ugró utasítások 3-as formájúak, ahol a FELT mező mondja meg, hogy melyik
feltételt kell ellenőrizni. Az A bit hivatott megakadályozni a késleltetési rés létrejöttét bizonyos
feltételek esetén. A jövendölő ugrások formája ugyanilyen, kivéve a 19 bites eltolást, amelyet máremlítettünk.
Az utolsó forma a CALL utasításé, amely eljáráshívást végez. Ez az utasítás speciális, mert ez
az egyetlen, amelyben 30 bit kell a cím megadására. Erre az ISA-ban csak 2 bites a műveleti kód. A
célcím a megadott cím négyszerese, ami azt eredményezi, hogy az adott utasítás helyétől
(közelítőleg) ± 231 bájt tartományt lehet címezni.
A 8051 utasításformátumai:
A 8051-es processzornak hatféle egyszerű utasításformája van. Az utasítások hossza 1, 2 vagy
3 bájt. Az első forma csak egyetlen műveleti kódot tartalmaz. Például az akkumulátor tartalmátnövelő utasítás használja ezt a formátumot. A 2. formátum hossza szintén egy bájt, amely 5 bites
műveleti kódot és 3 bites regisztercímet tartalmaz. Ilyen formátumú sok utasítás, amely az
akkumulátor és egy regiszter tartalmán végez valamilyen műveletet (például regiszter és akkumulátor
tartalmának összeadása, adatmozgatás regiszter és akkumulátor között). A 3. formátumnak egy 1
bájtos operandusa van. Az operandus lehet közvetlen konstans, például amit akkumulátorba tölt,
lehet eltolás, például az ugrás távolsága, vagy lehet bitsorszám, például az n. bitet beállító, törlő vagy
ellenőrző utasításban. A 4. és 5. formátum ugró és szubrutinhívó utasítások formája. A 11 bites válto-
zat akkor használható, ha nincs külső memória, tehát minden programcím 4096 alatti (8051) vagy
8192 alatti (8052). 8 KB-nál nagyobb külső memória esetén a 16 bites forma szükséges. A 6.
![Page 77: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/77.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 77/133
77.
formátumú utasításoknak két 8 bites operandusa van. Sokféle utasítás ilyen formátumú, például egy
8 bites közvetlen operandusnak a lapkán lévő memóriacellába töltése.
A Pentium 4 címzési módjai:
A Pentium 4 címzési módjai nagyon szabálytalanok, és attól is függnek, hogy 16 vagy 32 bitesaz utasítás. A továbbiakban eltekintünk a 16 bites módtól, a 32 bites is eléggé rossz. A támogatott
módok: közvetlen, direkt, regiszter-, regiszter-indirekt, indexelt címzés és még egy speciális mód
tömb elemek címzésére. Az a gond, hogy nem minden mód alkalmazható minden utasításban, és
nem minden regiszter használható minden módban. Ez nagyon megnehezíti a fordítóprogram -készí -
tők dolgát, és gyenge kódot eredményez.
Az 5.14. ábrán a MODE bájt vezérli a címzési módot. Az egyik operandust a MOD és az R/M
mezők határozzák meg. A másik operandus mindig regiszter, hogy melyik, azt a REG mező
tartalmazza. Az 5.27. ábra felsorolja azt a 32 kombinációt, amelyet a 2 bites MOD és 3 bites R/M
mező szolgáltat. Például, ha mindkét mező 0, akkor az operandust a memóriából olvassa, amelynekcíme az EAX regiszterben van.
A 01 és 10 oszlopok tartalmazzák azokat a módokat, amelyekben 8, illetve 32 bites eltolást
lehet megadni a (gépi) utasítás végén. Ha 8 bitest választunk, akkor a hozzáadás előtt előjelesen
kiterjeszti 32 bitesre. Például az ADD utasítás az R/M=011, MOD=01 és 6 eltolás esetén kiszámít ja az
EBX és 6 összegét, és az így kapott címről veszi az egyik operandust. Az EBX nem módosul.
A MOD=11 oszlopnál két regiszter közül választhatunk. Szavas utasítások az első változatot, a
bájtos utasítások pedig a második változatot használják. Megjegyzendő, hogy a táblázat nem teljesen
szabályos. Például nem lehet az EBP indirekt és az ESP relatív címzés.
Megéri ez a mód a fáradságot? Nehéz válaszolni a kérdésre. Kétségtelen, hogy ha jól
használják, akkor ezzel a móddal több ciklus megtakarítható. Használatának gyakorisága függ a
fordítóprogramtól és az alkalmazástól. Az a gond, hogy ennek a módnak a megvalósítása a lapka egy
részét elviszi, amelyet másra is lehetne használni, ha nincs ez az utasítás. Például az 1. szintű
gyorsítótár nagyobb lehetne, vagy a lapka mérete kisebb, ami nagyobb órajelsebességet engedne.
Ezek azok a kompromisszumok, amelyekkel a tervezők állandóan szembesülnek. Általában
intenzív tesztelést végeznek mielőtt szilikonba öntenék a tervet. Azonban nagyon jól megalapozott
elképzeléssel kell rendelkezni a szimulációhoz, figyelembe véve a várható terhelést. A 8088 tervező i
biztosan nem teszteltek webböngészővel. Mindazonáltal, nem sok számítógép elődjét használtákwebböngészésre, így a 20 évvel ezelőtti döntések teljesen hamisak lehetnek a mai alkalmazások
szempontjából. Azonban a visszafelé kompatibilitás kényszere miatt nehéz kidobni azt, ami egyszer
már bekerült.
Az UltraSPARC III címzési módjai:
Az UltraSPARC ISA minden utasítása közvetlen vagy regisztercímzést használ, kivéve azokat,
amelyek memóriára hivatkoznak. Regisztermódban 5 biten van adva a regiszter. A közvetlen módban
13 bites (előjeles) adat lehet a konstans. Nincs más módú aritmetikai, logikai vagy hasonló utasítás.
Háromféle utasítás hivatkozik memóriára: a betöltő (LOAD), a tároló (STORE) és egy multiprocesszor-szinkronizáló utasítás. A LOAD és STORE utasítások kétféle módban dolgozhatnak. Az egyik módban
![Page 78: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/78.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 78/133
78.
két regiszter tartalmának összege adja a címet. A másik a hagyományos indexelés 13 bites eltolási
értékkel.
A 8051 címzési módjai:
A 8051 címzési mód ja nagyon szabályos. Öt alapvető címzési módja van. A legegyszerűbb azimplicit mód, amely az akkumulátort használja. Sok utasítás végez műveletet egy operandus és az
akkumulátor tartamán, ilyen az összeadás, kivonás, ÉS, VAGY. Az akkumulátort használó
utasításokban nincs speciális bit, amely azt jelezné, hogy az akkumulátort kell használni. Ezt a
műveleti kód magába foglalja. A másik a regisztermód, amikor az egyik operandus regiszter. Regiszter
lehet akár forrás, akár cél. A harmadik mód a direkt címzés, amikor az operandus a memóriában van,
amelynek címe az utasítás része. A negyedik mód a regiszter-indirekt címzés, amikor az operandus
címe regiszterben van. Mivel minden normál regiszter 8 bites, ezért az operandusnak a memória alsó
256 címén kell lennie. Az ötödik mód a közvetlen mód, amikor az operandus magában az utasításban
van megadva.
A 8051 speciális címzési módot tartalmaz néhány olyan utasításban, amely memóriaelérést
végez. Emlékeztetünk, hogy a 8051-nek lehet 64 KB külső program és 64 KB külső adatmemóriája is.
Ezért szükség van valamilyen címzési módra, amely lehetővé teszi ezek elérését. A külső memória
elérését két utasítás biztosítja, a LJMP, amely 16 bites eltolási értéket tartalmaz, így lehetővé tesz
bármely memóriacímre ugrást, és az LCALL, amely szintén 16 bites eltolást tartalmaz, így bármely
memóriacímen lévő eljárást tud hívni.
A külső adatmemória elérése más módszerrel történik. A 8051 rendelkezik egy 16 bites
mutató regiszterrel, ez a DPTR, amely 16 bites memóriacímet tartalmazhat. Ezt a programok
betölthetik, aztán a betöltött érték indirekt címzésre használható, így elérhető a teljes 64 KB-ostartományt.
![Page 79: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/79.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 79/133
79.
32. Veremcímzés. Fordított lengyel (postfix) jelölés. Dijkstra
algoritmusa. Postfix alakú formulák kiértékelése
Veremcímzés
Már korábban megjegyeztük, mennyire kívánatos, hogy a gépi utasítás annyira rövid legyen,
amennyire csak lehet. A végsőkig redukálva a cím hosszát, eljutunk a 0 címes utasításhoz. Mint már
láttuk, 0 címes utasítás lehetséges a veremmel kapcsolatban, például ilyen az IADD. Ebben a
szakaszban alaposabban megvizsgáljuk a veremcímzést.
Fordított lengyel jelölés
A matematikában régi hagyomány, hogy a művelet jelét az operandusok közé írják, mint
x + y, nem pedig azok után, mint x y . Ha a műveleti jel az operandusok között van infix jelölésről
beszélünk. Ha a műveleti jel az operandusok után áll, akkor postfix vagy fordított lengyel jelölés az
elnevezés, a lengyel logikatudós J. Lukasiewicz után, aki kimutatta ennek a jelölésnek a jó
tulajdonságait.
A fordított lengyel jelölésnek számos előnye van az infix jelöléssel szemben algebrai
kifejezések esetén. Először is, minden formula kifejezhető zárójel nélkül. Másodszor, kényelmesen
kiértékelhetők a formulák számítógéppel verem használatával. Harmadszor, az infix operátorokra
elsőbbségi szabály vonatkozik, amely tetszőleges és nem kívánatos. Például tudjuk, hogy az a * b + c
jelentése (a b) + c és nem a (b c), mivel a szorzás nagyobb prioritású, mint az összeadás. Vajon
nagyobb prioritású-e a balra léptetés, mint a logikai AND? Ki tudja. A fordított lengyel jelölés
kiküszöböli ezt a kellemetlenséget.
Számos algoritmus ismert infix formulák fordított lengyel jelölésre konvertálására. Az itt
következő algoritmus E.W Dijkstra ötletén alapszik. Tegyük fel, hogy a formula a következő jeleket
tartalmazhatja: változók, bináris (kétoperandusú) operátorok: - /, továbbá bal és jobb zárójelek. A
formula végeinek jelzésére a formula elé és után a jelet tesszük. Példa rajzzal együtt a könyv 386.
oldalán.
A változók sorrendje az infix és prefix jelölésben megegyezik. A műveleti jelek sorrendje
azonban nem mindig azonos. A fordított lengyel jelölésben a műveleti jelek olyan sorrendben
szerepelnek, amilyen sorrendben azok végrehajtódnak a kifejezés kiértékelésekor.
Infix Fordított lengyel jelölés
A + B * C ABC * +
A * B + C AB * C +
A * B + C * D AB * CD * +
(A +B)/(C - D) AB + CD - /
((A + B ) * C + D) / (E + F + G) AB + C * D + EF + G + /
![Page 80: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/80.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 80/133
80.
Fordított lengyel jelölésű formulák kiértékelése
A fordított lengyel jelölés ideális formulák számítógépes kiértékelésére verem használatával.
A formula n jelből áll, mindegyik vagy operandus, vagy műveleti jel. A fordított lengyel jelölésű
formulának veremmel való kiértékelése egyszerű algoritmus. Olvassuk a formulát balról jobbra. Ha az
operandushoz érünk, akkor rakjuk a verembe. Ha az aktuális jel műveleti jel, akkor hajtsuk végre amegfelelő műveletet.
Az ábra a
(8 + 2 * 5) / (1 + 3 * 2 - 4)
formula kiértékelését mutatja JVM-ben. Az ennek megfelelő fordított lengyel jelölés a
következő:
8 2 5 * + 1 3 2 * + 4 - /
Az ábrán bevezettük az IMUL és IDIV utasításokat, amelyek a szorzás illetve az osztás
műveletet végzik. A verem tetején lévő operandus a jobb és nem a bal operandus. Ez fontos
az osztás (és kivonás) esetén, mivel az operandusok sorrendje lényeges (nem úgy, mint az
összeadásnál és szorzásnál). Más szóval az IDIV utasítást körültekintően definiálták, először
az osztandót kell a verembe tenni, majd az osztót, és ez után kell elvégezni a műveletet,
hogy helyes eredményt kapjunk. Vegyük észre, hogy milyen egyszerű kódot generálni az
(I)JVM-re fordított lengyel jelölésből: csak olvassuk balról jobbra a formulát, és jelenként
kiadunk egy utasítást. Ha a jel konstans vagy változó, akkor olyan utasítást kell kiadni, amely
azt a verembe teszi. Ha a jel műveleti jel, akkor a műveletet megvalósító utasítást kell kiadni.
Lépés A maradék formula Utasítás Verem
1 8 2 5 * + 1 3 2 * + 4 - / BIPUSH 8 8
2 2 5 * + 1 3 2 * + 4 - / BIPUSH 2 8, 2
3 5 * + 1 3 2 * + 4 - / BIPUSH 5 8, 2, 5
4 * + 1 3 2 * + 4 - / IMUL 8, 10
5 + 1 3 2 * + 4 - / IADD 18
6 1 3 2 * + 4 - / BIPUSH 1 18, 1
7 3 2 * + 4 - / BIPUSH 3 18, 1, 3
8 2 * + 4 - / BIPUSH 2 18, 1, 3, 29 * + 4 - / IMUL 18, 1, 6
10 + 4 - / IADD 18, 7
11 4 - / BIPUSH 4 18, 7, 4
12 - / ISUB 18, 3
13 / IDIV 6
![Page 81: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/81.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 81/133
81.
33. Vezérlési folyamat. Szekvenciális vezérlés, elágazás, ciklusszervezés, eljárás, rekurzív eljárás, korutinok, megszakítás,csapda
A vezérlési folyamat
A vezérlési folyamat azt a sorrendet jelenti, amelyben az utasítások végrehajtódnak
dinamikusan, tehát a program végrehajtása során. Általában elágazás és eljáráshívás nélkül, egymást
követő memóriahelyekről kiolvasott utasítások a kiolvasás sorrendjében hajtódnak végre.
Eljáráshívás hatására a végrehajtási sorrend megváltozik, az éppen végrehajtás alatt lévő eljárás
felfüggesztődik, és a hívott eljárás végrehajtása elkezdődik. A korutinok hasonlóak az eljárásokhoz,
ezek is hasonlóan térítik el a végrehajtási sorrendet. A korutinok hasznosak a párhuzamos eljárások
szimulálásánál. A csapdák és a megszakítások speciális feltételek bekövetkezésekor térítik el a
végrehajtási sorrendet.
Szekvenciális vezérlés és elágazás
Miután egy utasítás végrehajtódott, a memóriában őt követő utasítás olvasódik és hajtódik
végre. Minden utasítás után a programszámláló értéke megnövelődik a végrehajtott utasítás
hosszával. A programszámláló értéke hozzávetőleg az idő függvényében lineárisan növekszik, az
átlagos utasításhossz / átlagos utasítási idő mértékével.
Ha a program tartalmaz elágazást, akkor ez az egyszerű kapcsolat az utasítások memóriabeli
sorrendje és a végrehajtásuk sorrendje között nem áll fenn. Ha van elágazás, akkor a
programszámláló értéke nem lineáris függvénye többé az időnek.
Eljárások
A programok strukturálásának legfontosabb technikáját az eljárások adják. Bizonyos
szempontból az eljáráshívás ugyanúgy eltéríti a végrehajtási sorrendet, mint az ugrás, csak amikor
befejezte a feladatát az eljárás, a vezérlés visszatér a hívást követő utasításra.
Más szempontból azonban az eljárás törzse úgy tekinthető, mint egy magasabb szinten
definiált utasítás. Ebből a szempontból az eljáráshívás egyetlen utasításnak tekinthető, még akkor is,
ha az eljárás meglehetősen bonyolult.
Különösen érdekes az eljárások egy speciális fajtája, a rekurzív eljárás, amely önmagát hívja
vagy közvetlenül, vagy más eljárásokon keresztül.
Eljárás-prológusnak nevezzük azt a tevékenységet, amely a régi veremkeret-mutató
elmentését, az új veremkeret-mutató megadását és a veremmutatónak a lokális változók befogadása
miatti növelését tartalmazza. Az eljárásból való visszatéréskor a vermet ki kell takarítani, ezt
nevezzük eljárás-epilógusnak. Minden számítógépnek egyik legfontosabb jellemzője, hogy a
prológust és az epilógust milyen gyorsan és röviden tudja elvégezni. Ha ez hosszú és lassú, akkor az
eljáráshívások költségesek. A Pentium 4 ENTER és LEAVE utasításait azért tervezték, hogy a prológus
illetve az epilógus nagy részét hatékonyan elvégezzék.
![Page 82: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/82.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 82/133
82.
Korutinok
Néha hasznos, ha két eljárás, A és B egymást eljárásként hívja, oly módon, hogy ha B visszatér
A-hoz, akkor a végrehajtás a B-t hívó utasítás után folytatódik. Ha a vezérlés A-tól B-hez kerül, akkor a
végrehajtás (kivéve az első alkalmat) a legutolsó B-ből való visszatérést követő, vagyis az utolsó A-t
hívó utasítással folytatódik. Az olyan két eljárást, amelyek ilyen módon működnek, korutinnaknevezzük.
Korutinokat általánosan alkalmaznak párhuzamos feldolgozás szimulálására olyan gépeken,
amelyekben csak egy CPU van. Mindegyik korutin peszeudo-párhuzamosan fut a másikkal, mintha
saját processzora lenne. Ez a programozási stílus megkönnyíti bizonoys alkalmazások megvalósítását,
továbbá hasznos olyan szoftver tesztelésénél, amelyet később többprocesszoros gépen futtatnak.
Sem a hagyományos eljáráshívó CALL, sem a visszatérő RETURN nem alkalmazható
korutinoknál. Mivel az ugrás helyének a címe veremből jön, mint a visszatérés esetén, de a korutin
maga is eltárolja a címet a későbbi visszatérés végett.
Csapdák
A csapda olyan automatikusan hívott eljárás, amelyet valamely, a program által előidézett
feltétel vált ki, amely fontos, de ritkán fordul elő. Jó példa erre a túlcsordulás. Sok számítógépen, ha
az aritmetikai művelet eredménye olyan nagy lenne, amit nem lehet a gépen ábrázolni, akkor csapda
keletkezik, ami azt jelenti, hogy a vezérlés egy meghatározott memóriacímre adódik, nem folytatódik
normálisan. Azt az eljárást, amelyre ilyenkor a vezérlés adódik, csapdakezelőnek hívják, amely
valamely megfelelő tevékenységet végez, például hibaüzenetet ír ki. Ha az aritmetikai művelet
eredménye az ábrázolási tartományban marad, akkor csapda nem keletkezik.
Alapvető jellemzője a csapdának, hogy a program maga okoz valamilyen kivételes helyzetet,
amit a hardver, vagy a mikroprogram fedez fel. A túlcsordulás lekezelésének egy alternatív módja az,
amikor a túlcsordulás egy 1 bites regisztert állít 1-re. A programozó, ha kezelni akarja a túlcsordulást,
minden aritmetikai utasítás után le kell kérdeznie ezt a bitet. Ez azonban lassú és tárpazarló
megoldás. A csapda időt és memóriát takarít meg a programvezérelt megoldáshoz képest.
A csapda megvalósítható a mikroprogram (hardver) által végzett tényleges ellenőrzéssel. Ha a
csapda bekövetkezett, akkor a csapdakezelő rutin címe töltődik a programszámlálóba. Ami csapda
egy adott szinten, az programvezérelt lehet alacsonyabb szinten. Ha mikorprogrammal végeztetjük az
ellenőrzést, még mindig időt takarítunk meg a program által végzett teszthez képest, mert könnyenátlapolható más tevékenységgel. Memóriát is megtakarítunk, mert csak egy helyen, a mikroprogram
fő ciklusában kell elhelyezni.
Néhány kivételes helyzet, amely csapdával lekezelhető: lebegőpontos túlcsordulás,
lebegőpontos alulcsordulás, egész túlcsordulás, védelem megsértése, definiálatlan műveleti kód,
veremtúlcsordulás, nem létező B/K eszköz indítása, szóolvasási kísérlet páratlan memóriacímről, 0-val
való osztási kísérlet.
![Page 83: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/83.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 83/133
83.
Megszakítások
A megszakítás olyan eltérítése a vezérlési folyamatnak, amelyet nem a program okoz, hanem
valami más, általában B/K: például, a program utasíthatja a lemezegységet, hogy kezdje el az
adatátvitelt és annak befejeztekor megszakítást küldjön. Ugyanúgy, mint a csapda, a megszakítás
bekövetkeztekor is megáll a program végrehajtása és a vezérlés a megszakításkezelőre adódik, amelyelvégzi a kívánt tevékenységet. Ha ez befejeződött, a megszakításkezelő visszaadja a vezérlést a
megszakított programnak. A megszakított processzusnak pontosan azt az állapotát kell helyreállítani,
mint ami akkor volt, amikor a megszakítás történt.
Alapvető különbség a csapdák és a megszakítások között a következő: a csapdák a
programmal szinkronban vannak, a megszakítások pedig aszinkronban. Ha egy programot milliószor
megismétlünk ugyanazzal a bemenettel, a csapda mindig pontosan ugyanott keletkezik, de a
megszakítás nem, függhet például attól, hogy a gépkezelő mikor nyomja le a return gombot. A
csapdák reprodukálhatóságának az az oka, hogy közvetlenül a program okozza, míg a
megszakításokat nem, azokat csak közvetetten okozza a program.
A megszakításokkal kapcsolatos kulcsfogalom az átlátszóság. Amikor megszakítás következik
be, bizonyos műveletek végrehajtódnak, bizonyos kód végrehajtódik, de amikor ennek vége a
számítógép ugyanabba az állapotba kerül, mint amelybe a megszakítás előtt volt. Az ilyen módon
működő megszakítási rutint átlátszónak nevezzük. Az átlátszóság miatt sokkal egyszerűbb megérteni
a megszakításokat.
A 8088 óta az Intel CPU-nak két megszakítási szintje van (elsőbbségi értéke): maszkolható és
nem maszkolható. A nem maszkolható megszakítások általában csak a katasztrófa közeli állapotokra
használatosak, mint memóriaparitás-hiba. Minden B/K eszköz maszkolható szinten dolgozik.
![Page 84: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/84.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 84/133
84.
34. Operációs rendszer szintje. Virtuális memória. Lapméret,elaprózódás. Szegmentálás. A Pentium 4 és az UltraSPARC III
virtuális memóriája.
Virtuális memória
Az első számítógépek idejében a memória kevés és drága volt. A probléma hagyományos
megoldása másodlagos memória, például lemez igénybevétele. A programozó olyan átfedéseknek
(overlays) nevezett kisebb részekre osztotta fel programját, amelyek külön-külön már elfértek a
memóriában. A program futásakor először az első rész töltődött be és futott egy darabig. Amikor
befejezte működését, beolvasta és elindította a következő részt és így tovább. A programozónak
kellett gondoskodni a program átfedésekre darabolásáról, az egyes részek elhelyezéséről a
másodlagos memóriában, a memória és a lemez közti mozgatásukról, és általában az átfedéses
rendszer kezeléséről. A gép ehhez semmi segítséget nem adott.
Az átfedések automatikus kezelésére, melynél a programozónak nem is kell tudnia az egész
rendszerről (Fotheringham, 1961): ez a módszer, amely ma virtuális memória (virtual memory) néven
ismeretes.
Lapozás
A címtartomány és a memóriarekeszek fogalmának szétválasztása. A címtartomány és a
memóriacímek elkülönítésének az elve a következő. Bármely időpillanatban közvetlenül 4096 szó
érhető el a memóriából, de ezek nem feltétlenül a 0 és 4095 közti memóriacímeknek felelnek meg.
„Megmondjuk” a gépnek, hogy mostantól kezdve például a 4096 címre való hivatkozás esetén a
memória 0 című szavát kell használni. Ha a 4097 címre hivatkozunk, ez jelentse az 1 memóriacímet, a
8191 a memória 4095 címén található szót, stb. Ha a címtartományt a tényleges memóriarekeszekbe
az ábrán megadott séma szerint képezzük le mondhatjuk, hogy egy 4KB-os, virtuális memória nélküli
gép esetén fix leképezésünk van a 0-s 4095 közti címek, valamint a memória 4096 szava között. Ezek
után feltehetjük azt az érdekes kérdést, hogy mi történik akkor, ha a program végrehajtása során
8192 és 12287 közti címekre ágazik el. Virtuális memória nélküli gépen az futási hibát okozna,
melynek hatására „Nem létező memóriacímre hivatkozás” vagy hasonló durva hibaüzenet után
befejeződne a program végrehajtása. Virtuális memóriával rendelkező gépen a következő lépések
hajtódnak végre:
1. a memória tartalmának lemezre mentése
2. a 8192 és 12287 közti szavak megkeresése a lemezen
3. a 8192 és 12287 közti szavak betöltése a memóriába
4. a végrehajtás folytatása, mintha mi sem történt volna.
Az átfedések automatikus kezelésének ezen technikáját lapozásnak (paping), a lemezről
beolvasott programrészeket lapoknak (pages) nevezzük. A címtartományhoz tatozó címeknek a
valódi memóriacímekre való leképezését kifinomultabban is kezelhetjük. A nyomaték kedvéért azon
címeket, amelyekre a program tud hivatkozni, virtuális címtartománynak (virtual addres space), míg a
tényleges „hardveres” címeket fizikai címtartománynak (physical addres space) fogjuk nevezni. Amemóriatérkép (memory map) vagy laptábla (page map) a virtuális címeket kapcsolja össze a fizikai
![Page 85: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/85.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 85/133
85.
címekkel. Feltesszük, hogy a lemezen van elég hely a teljes címtartomány (vagy legalábbis a
használatban lévő része) számára. A programok úgy írhatók meg, mintha a teljes címtartomány
számára elegendő memória lenne a gépben, még ha a valóságban nem is ez a helyzet. A program
betölthet tetszőleges virtuális címről, írhat oda, a végrehajtás elágazhat a virtuális címtartomány
tetszőleges helyén található utasításra, tekintet nélkül arra, hogy nincs is elegendő fizikai memória.
Valójában a programozónak nem is kell tudnia a virtuális memória létezéséről. Egyszerűen úgy látja,
mintha a gépen rengeteg memória lenne.
A lapozási mechanizmust transzparensnek hívjuk, hiszem a programozó úgy írhat kódot,
mintha nem is lenne lapozás.
A lapozás megvalósítása
A virtuális memória egyik alapkövetelménye az egész program és az összes adat tárolására
szolgáló lemezegység.
A virtuális címtartományt azonos méretű lapokra szokás felosztani. A ma szokásos
lapméretek 512 bájt és 64 KB közé esnek, bár alkalmanként használnak akár 4 MB-os lapokat is. A
lapméret mindig 2 valamelyik hatványa. A fizikai címtartományt hasonlóan osztják fel. A darabok
mérete a lapmérettel megegyező, így mindegyikük pontosan egy lap tárolására alkalmas. Ezeket a
memóriadarabokat, melyekbe lapokat töltünk be, lapkeretnek (page frames) fogjuk nevezni.
Minden virtuális memóriával ellátott számítógép tartalmaz a virtuálisról fizikai címre való
leképezést megvalósító eszközt. Ennek neve MMU (Memory Management Unit, memóriakezelő
egység). Elhelyezkedhet magán a CPU lapkán vagy külön lapkán, amely szorosan együttműködik a
CPU-val. Az általunk példaként felhozott MMU a 32 bites virtuális címeket 15 bites fizikai címekre
képezi le; ehhez 32 bites bemeneti és 15 bites kimeneti regiszterre van szüksége.
A kérésre lapozás és a munkahalmaz modell
Az olyan hivatkozás, amely nem a memóriában lévő lapon található címre vonatkozik,
laphibát (page fault) okoz. Laphiba felléptekor az operációs rendszernek be kell olvasnia lemezről a
kért lapot, be kell írnia új fizikai helyét a laptáblába, és meg kell ismételnie a hibát okozó utasítást.
A virtuális memória használatának ezt a módszerét kérésre lapozásnak (demand paging)
nevezzük, annak a jól ismert gyereketetési algoritmusnak analógiájára, melynél ha sír a baba
megetetjük, szemben a precíz napirend szerinti etetéssel. A kérésre lapozásnál a lapok nemtöltődnek be előre, hanem csak akkor ha ténylegesen kérik őket.
Ha a gépben időosztást használunk, tehát processzusok mondjuk 100 ms futás után
cserélődnek, futása során minden program rengetegszer lesz újraindítva. Mivel minden programhoz
egyedi memóriatérkép tartozik, s programváltáskor ez is változik, időosztásos rendszerekben
kritikussá válhat a helyzet. Az alternatív megközelítés azon a megfigyelésen alapul, hogy a legtöbb
program nem egyenletesen hivatkozik a címtartományra, hanem néhány lap körül „sűrűsödnek
össze” a hivatkozások. Egy memóriahivatkozás utasítást tölthet be, adatokat olvashat, vagy tárolhat.
Bármely t időpillanatban tekinthetjük a legutóbbi k memóriahivatkozásban szereplő lapok halmazát.
Denning (1968) nyomán ezt munkahalmaz (woking set) néven fogjuk emlegetni. Mivel munkahalmazidőben lassan változik, a legutóbbi megállításkori halmaz alapján elfogadható becslések adhatók arra,
![Page 86: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/86.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 86/133
86.
hogy a program újraindításkor mely lapokra lesz szükség. Ezek a lapok már a program indítása előtt
betölthetők (feltéve, hogy beférnek a memóriába).
Lapkezelési eljárások
Ha a program olyan lapra hivatkozik, amely nincs a memóriában, a szükséges lapot be kelltölteni lemezről. Legtöbbször azonban először „helyet kell csinálni”, bizonyos lapokat vissza kell írni a
lemezre. Szükségünk van tehát ez eltávolítandó lapokat megadó algoritmusra. A legtöbb operációs
rendszer megpróbálja megjósolni, hogy melyek a memóriában levő „leghaszontalanabb” lapok abban
az értelemben, hogy eltávolításuk a legkisebb mértékben zavarná a futó programot. Ennek egyik
módja az lehet, hogy minden lapra megjósolja a várható legközelebbi hivatkozás időpontját, s azt a
lapot távolítja el, aminél ez a legtávolabbi jövőbeni időpont. Más szóval ahelyett, hogy egy
nemsokára szükséges lapot mentenénk ki, próbáljunk olyat választani, ami még sokáig nem fog
kelleni. Az egyik népszerű algoritmus a legrégebben nem használt lapot veszik mivel nagy a
valószínűsége, hogy ez nincs benne a munkahalmazban. A módszer neve LRU (Least Recently Used,
legrégebben használt) algoritmus. Általában jól használható, bár vannak olyan patologikus esetek,
amikor csúnya kudarcot vall.
Ha azonban a rendelkezésre álló memória nagyobb a munkahalmazénál, az LRU várhatóan
minimalizálni fogja a laphibák számát. A másik lapkezelő elv a FIFO (First-In First-Out, először be -
először ki). A FIFO módszer a legrégebben betöltött lapot távolítja el, függetlenül attól, mikor
hivatkoztak rá utoljára. Minden lapkerethez egy számláló tartozik, melyeket kezdetben 0-ra állítunk.
Az éppen a memóriában tartózkodó lapokhoz tartozó számlálók értékét minden laphiba után eggyel
növeljük, az újonnan betöltött lapét pedig nullával inicializáljuk. Ha lapot kell eltávolítani, azt
választjuk, amelynek számlálója a legnagyobb értéken áll. Mivel az ő számlálója a legnagyobb, ez a
lap „élte túl” a legtöbb laphibát. Ez azt jelenti, hogy korábban lett betöltve a memóriában levő összeslapnál, és így (remélhetőleg) komoly esélye van annak, hogy nem is lesz rá szükség a továbbiakban.
Azt a jelenséget, amikor egy program gyakran, szinte folyamatosan laphibákat generál,
vergődésnek (trashing) fogjuk nevezni. Talán fölösleges megemlítenünk, hogy nemkívánatos
jelenségről van szó.
Ha egy eltávolítandó lapon nem módosítottunk semmit a beolvasás óta (ami nagyon
valószínű, ha nem adatot hanem programkódot tartalmaz), szükségtelen visszaírni a lemezre, hiszen
ott már létezik egy pontos másolata. Ha a beolvasás óta módosítottuk, a lemezen lévő példány már
nem pontos, ezért ki kell írni a mostanit. Amennyiben meg tudjuk mondani valahogyan, hogy abeolvasás óta a lap változatlan maradt (tiszta, clean) vagy pedig írtunk rá (szennyezett, dirty),
elkerülhető a tiszta lapok újraírása. Ezzel egy csomó időt spórolunk meg. Sok gépen az MMU-ban
minden laphoz tartozik egy bit, amelyet betöltéskor 0-ra állít, és a hardver vagy a mikroprogram 1-re
módosít, ha a lap szennyezetté válik (ráírtunk valamit). Az operációs rendszer ennek a bitnek
vizsgálatával el tudja dönteni, hogy a lap tiszta vagy szennyezett, tehát vissza kell-e másolni a lemezre
lapcsere esetén.
![Page 87: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/87.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 87/133
87.
Lapméret és elaprózódás
Ha véletlenül úgy adódik, hogy a felhasználó programja és adatai valahány lapon pontosan
elférnek, a memóriába való betöltésükkor nem pocsékolunk el helyet. Ellenkező esetben az utolsó
lapon valamennyi hely kihasználatlan marad. Ha egy 4096 bájtos lapméretű gépen például a program
és az adatok összesen 26000 bájtot igényelnek, akkor megtellik az első 6 lap (6x4096= 24576 bájt), ésaz utolsó lapra marad még 26000-24576=1424 bájt. Mivel laponként 4096 bájt számára van hely,
elpocsékolunk 2672 bájtot. Ahányszor csak betöltjük a hetedik lapot a memóriába, ezek a bájtok
teljesen haszontalanul foglalnak le helyet. Az elvesztegetett bájtokkal kapcsolatos fönti problémára
belső elaprózódás (interal fragmentation) néven fogunk hivatkozni (a kihasználatlan hely valamelyik
lap belsejében található).
Szegmentálás
Sok esetben előnyösebb, ha egyetlen virtuális címtér helyett kettő vagy több
címtartományunk van. Az egyik nyilvánvaló megoldás: sok, teljesen független címtartomány, ún.szegmensek (segments) bevezetése. A szegmenscímek 0-tól valamely maximális értékig terjedő
lineáris sorozata. Az egyes szegmensek hossza 0-tól a megengedett maximumig bármekkora lehet. A
különböző szegmensek lehetnek eltérő hosszúságúak, rendszerint ez is a helyzet. A szegmensek
hossza még változhat is a végrehajtás során. Például valahányszor a verembe beleteszünk valamit, a
veremszegmens mérete nőhet, ha kiveszünk belőle, csökkenhet. Mivel minden szegmens külön
címtartományt alkot, a különböző szegmensek egymástól függetlenül nőhetnek vagy
zsugorodhatnak. Amikor az egyik szegmensben elhelyezkedő veremnek a növekedéséhez nagyobb
címtartományra van szüksége, nyugodtan megkaphatja, mert semmi más nincs a címtartományban,
amivel összeütközésbe kerülhetne. A szegmensek természetesen betelhetnek, de általában olyan
nagyok szoktak lenni, hogy ez csak ritkán fordulhat elő. Ilyen szegmentált vagy kétdimenziósmemória esetén a programok két részből álló címmel adják meg a tényleges címet. Az első rész a
szegmens száma, a második a szegmensen belüli cím. Hangsúlyozzuk, hogy a szegmens olyan logikai
egység, ami a programozó számára is látható, s amelyet ő is egyetlen logikai egységként kezel. A
változó méretű adatstruktúrák egyszerűbb kezelése mellett a szegmentált memóriának más előnyei
is vannak. Ha az egyes eljárások 0 kezdőcímtől más-más szegmensekben helyezkednek el, a külön
lefordított eljárások összelinkelése után az n. szegmensben lévő eljárás hívása a 0. szó (belépési pont)
megcímzésére az (n, 0) kétrészes címet fogja használni.
A szegmentálás megvalósítása
A szegmentálás kétféle módon valósítható meg: cseréléssel (swapping) vagy lapozással. Az
első módszernél minden időpillanatban szegmensek bizonyos halmaza van a memóriában. Ha olyan
szegmensre történik hivatkozás, amely pillanatnyilag nincs bent, akkor betöltődik. Ha nincs elég hely
számára, először egy vagy több szegmenst lemezre kell kiírni (kivéve, ha ezekből már van a lemezen
tiszta példány; ekkor a memóriában található másolat eldobható). A szegmensek cserélése bizonyos
értelemben hasonló a kérésre lapozáshoz: a szegmensek szükség szerint mozognak a lemez és a
memória között. A szegmentálás megvalósítása azonban lényegesen eltér a lapozásétól: míg a
lapméret rögzített, a szegmensek mértéke változó. Külső elaprózódás (external fragmentation), mivel
az elpocsékolt hely a szegmenseken kívül, a köztük lévő lyukakban van. A külső elaprózódást néha
lyukacsosodás (checker-boarding) néven is emlegetik.
![Page 88: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/88.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 88/133
88.
A külső elaprózódás elkerülésének egyik lehetséges módszere a következő. Valahányszor lyuk
keletkezik, a lyuk mögötti szegmenseket toljuk el a 0 memóriacím felé, úgy, hogy ezt a lyukat
megszüntessük. Ekkor persze a memória végén keletkezik egy nagyobb lyuk. Esetleg várhatunk is
addig, míg a külső elaprózódás egy komolyabb szintet nem ér el (például a teljes memória adott
százaléka fölé nem kerül a lyukak összege) és csak ekkor kezdjük el a memória „összepréselését”. Egy
népszerű algoritmus, a legjobb illesztés (best fit), azt a legkisebb lyukat választja, amibe még belefér
a kért szegmens. Emögött az az ötlet áll, hogy a lyukat és a szegmensek összepárosításánál lehetőleg
ne „törjünk le” darabokat olyan nagy lyukakból, amelyeket fel lehetne használni a későbbi nagy
szegmensekhez. A másik kedvelt eljárás, az első illesztés (fist fit) körbemegy a listán, és azt az első
lyukat választja, amely elég nagy a szegmens tárolására. Ehhez nyilvánvalóan kevesebb idő kell, mint
az egész lista átnézéséhez a legjobb illesztés megkeresésénél. Meglepő, hogy az általános
hatékonyság szempontjából is jobb az első illesztés algoritmusa a legjobb illesztésnél. Az utóbbi
hajlamos arra, hogy rengeteg kicsiny, teljesen haszontalan lyukat hozzon létre. Amikor olyan
szegmenseket távolítunk el a memóriából, amelynek mindkét közvetlen szomszédja lyuk volt, az
egymás utáni lyukak egy nagy lyukká olvadnak össze. A szegmentálás másik megvalósításánál aszegmenseket fix méretű lapokra osztjuk, és ezeket lapozzuk a kérések szerint. Lehetséges, hogy
valamelyik szegmens lapjainak egy része a memóriában, a többi meg a lemezen van, ha ezt a
megoldást választjuk. A lapozáskor minden szegmenshez külön laptábla kell. Mivel miden szegmens
csupán egy lineáris címtartomány, az összes eddig megismert lapozási technika alkalmazható a
szegmensekre. Az egyetlen új sajátosság az, hogy minden szegmens saját laptáblát kap.
A Pentium 4 virtuális memóriája
A Pentium 4-nek olyan kifinomult virtuálismemória-rendszere van, amely egyaránt támogatja
a kérésre lapozást, a tiszta szegmentálást és a lapozással kombinált szegmentálást. A Pentium 4
virtuális memóriájának legfontosabb része két tábla, az LDT (Local Descriptor Table, lokális
leírótábla) és a GDT (Global Descriptor Table, globális leírótábla). Minden programnak saját LDT-je
van, de a gépen futó összes program egyetlen megosztott GDT -t használ. Míg a GDT
rendszerszegmenseket ír le, ideértve magát az operációs rendszert is, addig az LDT a programra
nézve lokális szegmenseket ad meg (kód, adat, verem stb). Mihelyt megtudja a hardver, hogy melyik
szegmens-regisztert kell használni, belső regisztereiben rögtön megtalálja a szektorhoz tartozó teljes
leírót. Ha nemlétező szegmensről van szó (a szelektor 0) vagy a szegmens pillanatnyilag nincs a
memóriában (P értéke 0), csapda keletkezik.
Ezután azt vizsgálja, hogy az offset a szegmens határain belül van-e; ha nem, ez ismét csapdát
okoz. Ha a szegmens a memóriában van, és az offset is a megengedett határok közé esik, akkor a
Pentium 4 a leíró 32 bites BASE mezőjét az offsethez hozzáadva a 6.14. ábrál látható lineáris címet
(lineal address) alakítja ki. Ha a lapozás tiltott (a globális vezérlőregiszter egy bitjével), akkor a lineáris
cím fizikai címként értelmeződik, és egyből továbbítódik a memória felé. Így lapozás nélküli tiszta
szegmentálással állunk szemben. Ha viszont engedélyezett a lapozás, akkor a lineáris cím virtuális
címként értelmeződik, és laptáblák használatával képeződik le a fizikai címre. Minden futó
programhoz tartozik egy lapkönyvtár (page directory), amely 1024 darab 32 bites bejegyzést
tartalmaz, erre a lapkönyvtárra egy globális regiszter mutat. A könyvtár minden bejegyzése szintén
1024 darab 32 bites bejegyzést tartalmazó laptáblákra mutat. A laptáblák bejegyzései lapkeretekre
mutatnak.
![Page 89: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/89.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 89/133
89.
Az UltraSPARC III virtuális memóriája
Az UltraSPARC III 64 bites virtuális címeken alapuló lapszervezési virtuális memóriát
támogató 64 bites gép. Tervezési és költségszempontok miatt azonban a programok nem használják
a teljes 64 bites virtuális címtartományt. Csak 44 bit érhető el, emiatt a programok nem lehetnek
1,8x1013 bájtnál hosszabbak. A megengedett virtuális memória két darab, egyenként 243 bájt fizikaihosszúságú zónára van felosztva. Az egyik a virtuális címtartomány legalján, a másik a legtetején
helyezkedik el. A köztük levő résbe elő virtuális címek nem érhetők el, használatuk hibát okoz. A
rendkívül nagy virtuális címtartomány miatt a Pentium 4-hez hasonló direkt laptábla nem volna
praktikus. Az UtraSPARC MMU- ja ehelyett egészen más megközelítést használ. Tartalmaz egy TLB
(Translation Lookaside Buffer) nevű hardvertáblát, ez képezi le a virtuális lapokat fizikai lapkeretekre.
A TLB csak a legutóbb használt virtuális lapok sorszámát tárolja. A kód- és az adatlapokat külön
kezeli, mindkét kategóriából a legutóbbi 64 lapszámot őrzi meg. Minden TLB-bejegyzés egy virtuális
lapsorszámból és a neki megfelelő fizikai lapkeret sorszámából áll. Amikor az MMU egy
processzusszámot vagy másképp környezetet (context) és egy ebbe a környezetbe tartozó virtuális
címet kap, speciális áramkörök segítségével egyből összehasonlítja az adott környezethez tartozó
összes TLB-bejegyzéssel. Ha valahol egyezést talál, a megfelelő TLB-bejegyzésben szereplő lapkeret
sorszámot a virtuális címben szereplő offsettel összekombinálva képezi a 41 bites fizikai címet és
néhány egyéb jelzőbitet (védelem stb).
Ha nem talál egyezést, TLB-hiány (TLB miss) keletkezik, amit csapdáz az operációs rendszer. A
hiány kezelése az operációs rendszeren múlik. TLB-hiány még akkor is előfordulhat, ha a hivatkozott
lap a memóriában van. A kért virtuális lapra vonatkozó új TLB-bejegyzés beírasakor az operációs
rendszer elméletileg bárhogyan eljárhatna. A hardver azonban némi segítséget is ad ennek a kritikus
tevékenységek minél gyorsabban elvégzéséhez - már ha a szoftver hajlandó vele együttműködni.
Elsősorban elvárjuk, hogy az operációs rendszer készítsen a gyakran használt TLB-bejegyzésekről egy
szoftveres gyorsítótárat a TSB (Translation Storage Buffer) nevű táblázatban. Ez a táblázat virtuális
lapok direktleképezett gyorsítótáraként épül fel. TLB-hiány esetén az operációs rendszer
megvizsgálja, hogy megfelelő TSB-bejegyzés a szükséges lapot tartalmazza-e. Az MMU kellemes
szolgáltatása a bejegyzés címének automatikus kiszámítása és az operációs rendszer által elérhető
belső MMU-regiszterbe helyezése. TSB-találat esetén valamelyik TLB-bejegyzés törlődik, és helyére
bemásolódik a kért TSB-bejegyzés. A kitörlendő TLB-bejegyzés kiválasztását a hardver 1 bites LRU-
algoritmusa támogatja.
Ha a TSB-keresés sikertelen volt, a virtuális lap nincs a gyorsítótáblán, az operációs rendszer egy
másik táblázatban keresi a lapra vonatkozó információkat. A végső megoldásként használt tábla neve
fordítótábla (translation table).
![Page 90: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/90.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 90/133
90.
35. Terminál. Modemek, jelzési, adatátviteli sebesség.
Terminálok
A számítógépes terminálok két részből állnak: billentyűzet és monitor. A nagygépes világbanez a két rész gyakran egybe van építve, és soros vonalon vagy telefonhálózaton keresztül van a
központi géphez kapcsolva. A személyi számítógépek világában a billentyűzet és a monitor különálló
egység.
Háromfajta terminált használnak széles körben: a karaktertérképes terminálokat, bittérképes
terminálokat és RS-232-C terminálokat. Ezek mindegyike használhat bármilyen billentyűzetet, de
különbség van a számítógéppel való kommunikációban és a megjelenítés módjában.
Egy személyi számítógépben a képernyőn való megjelenítés kétféle lehet: karaktertérképes
és bittérképes.
Karaktertérképes terminálok
A karakterek úgy kerülnek megjelenítésre, hogy a CPU a videomemóriába másolja őket,
minden második bájtba egyet. Minden karakterhez tartozik egy attribútumbájt, ami meghatározza,
hogy az adott karaktert hogyan kell megjeleníteni. Attribútum lehet szín, fényesség, villogás stb. Így
egy 2580 karakterből álló képernyő 4000 bájtnyi videomemóriát igényel, 2000 bájtot a
karaktereknek és 2000 bájtot az attribútumoknak. A legtöbb kártyán több képernyőre elegendő
memória van.
A videokártyának az a feladata, hogy folyamatosan olvassa a videomemóriát és a monitormeghajtásához szükséges jeleket generáljon. Az előállított jel egy nagy frekvenciájú analóg jel, amely
karaktereket kirajzoló elektronsugár mozgását vezérli.
Bittérképes terminálok
A képernyőt nem 2580-as karaktertömböknek tekintjük, hanem olyan tömbnek, amely
képpontokból, úgynevezett pixelekből áll. Minden pixel ki- vagy bekapcsolt állapotban lehet. A
karaktertérkép helyett bittérképet használó terminálokat bittérképes termináloknak nevezzük.
Minden mai videokártya tud karaktertérképes és bittérképes módban is működni, a kettő között
szoftveres úton válthatunk.
A karaktereket úgy lehet megjeleníteni hogy mondjuk egy 914-es téglalapot tartunk fenn
minden karakter számára, és ezeket a megfelelő bitmintákkal feltöltjük. Ezzel a módszerrel különböző
típusba tartozó karakterek is megjeleníthetők egymással keverve. A hardver csak annyit csinál, hogy
megjeleníti a bittömböt. A színes képernyők esetén minden pixelnek 8, 16 vagy 24 bit van fenntartva.
A bittérképes terminálok gyakran ablakokat jelenítenek meg.
A bittérképes terminálok nagyon rugalmasak, de két nagy hátrányuk is van. Először is
nagyméretű videomemóriára van szükségük, a leggyakoribb felbontások manapság a 640480 (VGA),
800*600 (SVGA), 1024*768 (XVGA) és az 1280768-as képernyő. A szélesség és magasság arányamindegyiknél 4:3. a legjobb színeket úgy kaphatjuk, ha mindhárom elsődleges színhez 8 bitet
![Page 91: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/91.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 91/133
91.
használunk, vagyis 3 bájtot pixelenként. Tehát egy 1024768-as képernyő 2,3 MB videomemóriát
igényel.
A bittérképes terminálok másik hátránya a teljesítményük. A mozgás folyamatosságához
legalább 25 képkockát kell vetíteni másodpercenként, tehát a szükséges adatátvitel 57,6 MB/s
1024*768-as felbontás esetén. Ez a terhelés sokkal nagyobb, mint amire az (E)ISA sín képes, ezért azIBM PC-k nagy teljesítményű videokártyái szükségképpen PCI kártyák.
Egy kapcsolódó probléma a képernyő gördítése. Ez rendkívül terheli a CPU-t, ezért sok
videokártya speciális hardvert tartalmaz, amelynek segítségével bázisregiszterek átállításával,
másolás nélkül lehet képernyőrészeket mozgatni.
RS-232-C terminálok
Az RS-232-C szabványos számítógép-terminál interfész. A termináloknak egy szabványos 25
tűs csatlakozójuk van. Az RS-232-C szabvány meghatározza a csatlakozó méreteit és formáját, a
feszültség szinteket és az egyes vonalak jeleinek jelentését.
Ha a számítógép és a terminál messze van egymástól, akkor gyakran az egyetlen praktikus
összeköttetési lehetőség a telefonkapcsolat. Sajnos a telefonrendszer nem képes az RS-232-C
szabványnak megfelelő jelek továbbítására, ezért egy modemnek nevezett jelátalakító eszközt kell a
számítógép és a telefon, illetve a telefon és a terminál közé beiktatni.
Hogy kommunikálni tudjanak, a számítógép és a terminál is tartalmaz egy UART (univerzális
aszinkron vevő és továbbító) lapkát, valamint a sín eléréséhez szükséges áramköröket. Egy karakter
megjelenítéséhez a számítógép beolvassa azt a központi memóriából, átadja az UART-nak, ami aztán
bitenként küldi őket az RS-232-C kábelre. Az UART tulajdonképpen egy párhuzamos-soros átalakító,mert egy egész karaktert kap, majd meghatározott ütemben egyenként adja ki a biteket. Egy start- és
egy stopbitet is ad minden karakterhez, hogy a kezdetét és a végét fel lehessen használni.
A terminálban egy másik UART fogadja a biteket és összeállítja a karaktert, amit aztán
megjelenít a képernyőn. A terminál billentyűzetén bevitt adatok átesnek egy párhuzamos-soros
átalakításon a terminálban, és a számítógép UART- jában kerülnek újra összeállításra.
Az RS-232-C szabvány majdnem 25 jelet definiál. A 2. és a 3. vonal az adatok küldésére és
fogadására szolgál. Minden vonal egy egyirányú bitfolyamot kezel, ellentétes irányokban. Amikor a
terminál vagy a számítógép adatot akar küldeni, akkor a Request to send vonalon jelzi a szándékát.Ha a modem képes az adat fogadására, akkor a Clear to send vonalon jelez vissza. A többi vonal
különféle állapotlekérdező, tesztelő és időzítési feladatokat lát el.
Modemek
A sima telefonvonal nem alkalmas a számítógép jeleinek továbbítására, mivel utóbbiak
általában a 0-kat 0 volttal, az 1eseket 3-5,5 volt közötti feszültséggel reprezentálják. A kétszintű jelek
jelentős torzulást szenvednek a hangátvitelre tervezett vonalon, ami átviteli hibákat eredményez. Egy
1000 és 2000 Hz közötti, vivőhullámnak nevezett tiszta szinuszos hullámjel azonban aránylag kis
torzulással átvihető.
![Page 92: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/92.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 92/133
92.
Mivel a szinuszjel hullámzása tökéletesen kiszámítható, egy tiszta szinuszjel nem hordoz
semmilyen információt. Az amplitúdó, a frekvencia vagy a fázis változtatásával azonban átvihetjük 1-
esek és 0-k sorozatát. Ezt a folyamatot modulációnak nevezik.
Az amlplitúdómoduláció két feszültségszintet használ.
A frekvenciamoduláció esetén a feszültségszint állandó, de a vivőhullám frekvenciája eltérő
1-esek és 0-k esetén. Gyakran frekvenciaeltolásos kódolásnak is evezik.
Az egyszerű fázismodulációnál az amplitúdó és a frekvencia nem változik, de a vivőhullám
fázisa 180 fokkal eltolódik minden 0-1 vagy 1-0 váltásnál. A vivőhullám fázisa minden oszthatatlan
időintervallum kezdetén hirtelen eltolódhat 45, 135, 225 vagy 315 fokkal, ezzel az úgynevezett
kétbites fáziskódolással 2 bitet lehet intervallumonként átvinni. Az időintervallumok száma a baud.
Mivel a telefonvonal csak egy csatornát szolgáltat, a biteket sorosan, egymás után kell elküldeni. Az
az eszköz, amelyik kétszintű jelek formájában, bitenként karaktereket fogad el a számítógéptől és a
biteket egyesével vagy kettesével amplitúdó-, frekvencia- vagy fázismodulációt használva továbbítja:a modem.
A küldö modem az egy karakterhez tartozó biteket egyenlő időközönként küldi el. Például a
9600 baud 104 milliomod másodpercenkénti jelváltást jelent. A fogadó oldalon egy másik modem
konvertálja a modulált jelet bitsorozattá. Mivel a bitek szabályos időközönként érkeznek, ha a fogadó
meghatározta a karakter elejét, akkor már csak az órajelét kell figyelnie, hogy mikor vegyen mintát a
következő bitek meghatározásához. A mai modemek 28800 bit/másodperc és 57600 bit/másodperc
sebességgel működnek, általában ennél jóval alacsonyabb baud értékek mellett. Majdnem mindegyik
full-duplex (egyszerre mindkét irányba tud kommunikálni). A fél-duplex modem egyszerre csak egy
irányba tud kommunikálni. A szimlpex csak az egy irányba működő vonalak neve.
![Page 93: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/93.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 93/133
93.
36. ADSL, kábeles internet.
Azokat a szolgáltatásokat, amelyek a normál telefonvonalnál nagyobb sávszélességet
biztosítanak, időnként szélessávúnak nevezik, bár ez a meghatározás inkább piaci, mint speciális
technikai fogalom.
ADSL
Kezdetben több egymást átfedő ajánlat jelent meg, amelyek az xDSL általános terminológia
alá tartoznak. A továbbiakban ismertetjük, hogy valószínűleg mivé válik majd ezek közül a
legnépszerűbb, az ADSL. Mivel az ADSL jelenleg is fejlődik, ezért a szabvány nem minden eleme van
teljesen a helyén, az alábbiakban ismertetett néhány részlet idővel megváltozhat, az alapelképzelés
azonban érvényes marad.
A modemek lassúságának az az oka, hogy a telefont az emberi hang továbbítására találták ki,
és a teljes rendszert erre a feladatra optimalizálták. Az adattovábbítás mindig is mostohagyermek
volt. Az előfizetőktől a telefontársaság központjába futó vezetéket, amelyet lokális huroknak
neveznek, tradicionálisan egy 3000 Hz-es szűrővel korlátozzák a telefontársaságnál. Ez az a szűrő,
amely behatárolja az adattovábbítás sebességét. Szűrő nélkül a lokális huroknak a gyakorlatban
elérhető sávszélessége függ a vezeték hosszától, de általában néhány kilométer távolságon elérheti
az 1,1 MHz-et.
Az ADSL-kínálat legelterjedtebb megközelítését a 2.38 ábra mutatja be. Lényegében, azt
teszik, hogy eltávolítják a szűrőt, és az elérhető 1,1 MHz spektrumot 256 független, egyenként 4312,5
Hz szélességű csatornára osztják fel. A 0-s csatornát az egyszerű régi telefonszolgáltatás céljaira
használják. Az 1-5. csatornát nem használják, azért hogy megelőzzék a telefonhang és az adatjelek
interferenciáját. A fennmaradó 250 csatornából egyet a felmenő, egyet a lejövő adatfolyam
vezérlésére használnak. A többi csatorna pedig a felhasználók adatait továbbítja. Az ADSL olyan,
mintha 250 modemünk lenne.
Elvileg minden fennmaradó csatorna egy-egy full-duplex adatfolyam megvalósítására
alkalmas, de a felharmónikusok, az áthallás és más effektusok a gyakorlati rendszereket jóval az
elméleti korlát alatt tartják. A szolgáltató határozza meg, hogy hány csatornát lehet feltöltésre és
hányat letöltésre használni. Az 50-50% is megvalósítható lenne a felmenő és a lejövő csatornák
számára, de a legtöbb szolgáltató a sávszélesség 80-90%-át a letöltésre allokálja, hiszen a legtöbb
felhasználó inkább letölt adatokat, mint fel. Emiatt került az „A” betű az ADSL rövidítésbe. Egy
gyakori megosztás: 32 csatorna a feltöltésre, és az összes többi pedig a letöltésre.
Az egyes csatornákon állandóan figyelik a vonalminőséget, és ha szükséges, megváltoztatják
az adatsebességet, így a különböző csatornákon különböző lehet az átviteli sebesség. Az adatokat a
valóságban az amplitúdó- és fázismoduláció kombinációjával továbbítják, így elérhetik a 15 bitet
baudonként. Mondjuk, 224 lejövő csatornánál és 15 bit/baudnál, 4000 baud esetén a lejövő teljes
sávszélesség 13,44 Mbps. A gyakorlatban a jel-zaj viszony sosem elég jó ahhoz, hogy ezt a sebességet
el lehessen érni, de 4-8 Mbps elérhető, jó minőségű hurkokkal és rövid vezetékszakaszokkal.
![Page 94: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/94.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 94/133
94.
Egy tipikus ADSL-elrendezés látható a 2.39 ábrán. A diagram azt mutatja be, hogy a
felhasználó vagy a telefontársaság szerelőjének egy hálózati interfészt kell felszerelnie az előfizető
telephelyén. Ez a kis műanyag doboz jelöli a telefontársaság birtokának a végét és az előfizető
birtokának a kezdetét. A hálózati interfészhez közel található a szétválasztó; ez egy analóg szűrő,
amely leválasztja az adathálózatról a 0-4000 Hz-es sávot a POTS számára. A POTS jelet egy meglévő
telefonra vagy telefaxra, az adatjeleket pedig egy ADSL-modemre irányítják. Az ADSL-modem
tulajdonképpen egy digitális jelfeldolgozó eszköz, amely úgy van összekapcsolva, mintha 250 modem
működne párhuzamosan különböző frekvenciákon. Mivel a legtöbb ADSL-modem külső, ezért a
számítógépeket nagy sebességgel kell hozzákapcsolni. Általában ezt úgy oldják meg, hogy egy
Ethernet-hálózati kártyát tesznek a számítógépbe, és egy két állomásból álló, nagyon kis hálózatot
hoznak létre, amely csak a számítógépből és az ADSL-modemből áll. Néha USB portot használnak
Ethernet-hálózat helyett. A jövőben belső ADSL-modemkártyák is lesznek, ehhez kétség sem férhet.
A vezeték másik végén, a telefontársaság végpontján egy megfelelő szétválasztót kell
felszerelni. A jel, hang részét itt is ki kell szűrni, és a normál telefonközpontba küldeni. A 26 KHz
feletti jeleket egy újfajta készülékbe, a DSLAM-ba irányítják, ami ugyanolyan digitális jelfeldolgozó
egység, mint az ADSL-modem. Amint a digitális jelekből a bitsorozatokat előállították, csomagokat
alakítanak ki belőlük, és az itnernetszolgáltatóhoz küldik tovább.
Kábeles internet
Sok kábeltévé-társaság kínál manapság internet-hozzáférést kábelein keresztül. A
kábelszolgáltatók minden városban fő telephellyel rendelkeznek, valamint rengeteg, elektronikával
zsúfolt dobozzal szerte a működési területükön, amelyeket fejállomásoknak neveznek. A
fejállomások nagy sávszélességű kábelekkel vagy üvegkábelekkel kapcsolódnak a fő telephelyhez.
Minden fejállomásról egy vagy több kábel indul el, otthonok és irodák százain halad
keresztül. Minden előfizető ehhez a kábelhez csatlakozik, ahol az átlépi az előfizető telephelyének
határát. Így felhasználók százai osztoznak egy a fejállomáshoz vezető kábelen. Rendszerint a kábelek
sávszélessége 750 MHz körül van. Bár a gyakorlatban egy saját 1,1 MHz sávszélességű csatorna nem
nagyon különbözik a fejállomáshoz vezető kábel 200 MHz-es részének 400 felhasználó számára
történő felosztásától, akiknek a fele nem használja a rendszert az adott pillanatban. Ez azonban azt
jelenti, hogy hajnali 4 órakor jobb a kiszolgálás, mint délután 4-kor, míg az ADSL egész nap állandó.
Azok, akik optimális kábeles internetszolgáltatásra vágynak, meggondolhatják, hogy gazdag vagy
szegény környékre költözzenek.
Amikor a kábeles internetet bevezették, a társaságoknak két problémát kellett megoldaniuk:
1. Hogyan bővítsék a rendszerüket az internetszolgáltatással úgy, hogy a tévéműsorok vételét ezne befolyásolja?
2. Hogyan valósítsanak meg kétirányú forgalmat, amikor az erősítők alapvetően egyirányúak?
A kiválasztott megoldás a következő. A modern kábelek jóval 550 MHz felett is működnek,
gyakran 750 MHz-ig vagy még tovább. A feltöltésre szolgáló csatornák az 5-42 MHz sávban vannak, a
letöltésre szolgáló csatornák forgalma a frekvenciatartomány felső részére esik, ahogyan az a 2.40
ábrán látszik.
![Page 95: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/95.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 95/133
95.
Vegyük észre, hogy a televíziójelek mind lejövő jelek, ezért lehetőség van arra, hogy a
felmenő sáv erősítői pedig csak az 54 MHz-nél magasabb frekvenciákon, ahogyan ez az ábrán is
látszik. A felmenő és a lejövő adatfolyam sávszélességében aszimmetria van, mivel a TV-sáv felett
nagyobb frekvenciatartomány áll rendelkezésre, mint alatta. Másfelől viszont a forgalom nagyobb
része valószínűleg letöltés, ezért a kábeltársaságok nem vették zokon ezt a körülményt. Ahogyan
korábban láttuk, a telefontársaságok is aszimmetrikus DSL-szolgáltatást kínálnak, pedig ennek igazán
nincs technikai indoka. Az internet-hozzáféréshez egy kábelmodemre van szükség, amelyben két
interfész van, egyik a számítógéphez, a másik a kábeltévé-hálózathoz. A számítógép és a
kábelmodem közötti interfész kézenfekvő. Ez általában egy Ethernet-kártya, mint az ADSL-nél. A
jövőben lehetséges, hogy az egész modem a számítógépbe dugott kisméretű kártya lesz, éppúgy,
mint a V9.x belső modemeknél.
A kábelszabvány nagyobb része rádióelektronikával foglalkozik, ami jóval túlmutat e könyv
keretein. Az egyetlen említésre méltó részlet, hogy a kábelmodemek ugyanúgy, mint az ADSL-
modemek állandóan be vannak kapcsolva. Akkor veszik fel a kapcsolatot, amikor bekapcsolják, és
folyamatosan kapcsolatban maradnak, amíg ki nem kapcsolják, mivel a kábeltársaságok nem a
kapcsolat fennállásának ideje alapján számítják a díjat.
A modem végigellenőrzi a lejövő csatornákat, és olyan speciális csomagokat keres,
amelyeket a fejállomás periodikusan küld, és a rendszerparamétereket tartalmazzák az újonnan
bekapcsolódó modemek számára. Amint a modem megtalálta ezt a csomagot, jelzi a jelenlétét az
egyik felmenő csatornán. A fejállomás azzal válaszol, hogy kijelöli a modem felmenő és lejövő
csatornáit. Ez a kijelölés később megváltozhat, ha a fejállomás a terhelés kiegyenlítése miatt
szükségesnek ítéli.
Ezután a modem meghatározza a fejállomástól mért távolságát egy speciális csomagküldésével, úgy, hogy leméri, mennyi ideig tart a válasz megérkdezése. Ezt a folyamatot
távolsághatárolásnak hívják. A modem számára fontos, hogy tudja távolságát, hogy ehhez tudja
igazítani a felmenő csatornák működtetését, és az időzítését helyesen állítsa be. Az adatforgalmat
rövid idejű szeletekre, ún. minislotokra osztják. Minden lefelé haladó csomagnak egy vagy több
minislotba kell beleférnie. A fejállomás ad jelet egy újabb minislot-periódusra, azonban a
startpisztolyt nem egyszerre hallja meg minden modem a kábel mentén mért terjedési idő miatt. A
modemek – ha tudják, milyen messze vannak a fejállomástól – ki tudják számítani, hogy valójában
mennyi ideje indult el az előző minislot-periódus. A minislot hossza a hálózattól függ. A hasznos
méret jellemzően 8 bájt.
Az inicializálási fázisban a fejállomás minden egyes modem számára biztosít egy
minislotot, amellyel felmenő sávszélességet kérhetnek. A szabály az, hogy több modemet is
rendelhetnek ugyanahhoz a minislothoz, ami versenyhelyzetet teremt. Amikor a számítógép
csomagot szeretne küldeni, a csomagot elküldi a modemhez, amely megkéri a szükséges számú
minislotot a továbbításához. Ha a kérést a fejállomás elfogadta, nyugtázást küld a lejövő csatornán,
és megadja, hogy mely minislotokat foglalta le a modem számára. Azután a modem elküldi a
csomagot, kezdve az első lefoglalt minislottal. További csomagokat a fejlécben lévő mező
használatával lehet kérni.
![Page 96: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/96.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 96/133
96.
A lejövő csatornákat a felmenő csatornáktól eltérően irányítják. Az első dolog, hogy csak egy
küldő van, így nincs versenyhelyzet, és nincs szükség minislotokra, ami tulajdonképpen statisztikai
alapú időosztásos multiplexelés. A másik, hogy a lejövő adatforgalom általában sokkal nagyobb, mint
a felmenő, így rögzített, 204 bájt méretű csomagokat használnak. Ennek egy része egy Reed-
Solomon-féle hibajavító kód, és más járulékos dolgok, így a felhasználó számára 184 bájt hasznos
adatmennyiség marad. Ezeket a számokat a MPEG-2 szabványú digitálistelevízió-szabvánnyal való
kompatibilitás miatt választották, így a tévé és a lejövő csatornák formátuma azonos. A logikai
kapcsolatokat a 2.41 ábra mutatja be.
Visszatérve a modem inicializáláshoz, amint a modem behatárolta a távolságát, megkapta a
felmenő és lejövő csatornáit, valamint a minislot-kiosztását, elkezdheti a csomagok küldését. Ezek a
csomagok a fejállomáshoz futnak be, amely továbbítja egy dedikált csatornán a kábeltársaság fő
telephelyére, majd az internetszolgáltatóhoz. Az internetszolgáltató felé menő első csomag a
hálózaticím-kérés, amelyet dinamikusan osztanak ki. Le szokták kérdezni, és megküldik a napi pontos
időt is.
A következő lépés a biztonsághoz kötődik. Mivel a kábel osztott kommunikációs lehetőség,
bárki bajba kerülhet azáltal, hogy valaki más elolvassa a rajta keresztülhaladó forgalmat. Annak
megakadályozására, hogy mindenki a szomszédjai után szimatoljon, a forgalom mindkét irányban
titkosított.
Végül, a modemnek be kell jelentkeznie, és meg kell adnia saját egyedi azonosítóját a titkos
csatornán. Ekkor az inicializálás véget ér. A felhasználó bejelentkezhet az ISP-hez, és elkezdhet
dolgozni.
![Page 97: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/97.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 97/133
97.
37. Az Intel 8086/88 utasításai (adatmozgató, aritmetik ai, logikai,
string-kezelő, bitléptető/forgató, vezérlésátadó, processzor-
vezérlő, input/output utasítások, program megszakítás,szemafor).
Adatmozgató utasítások
Az adatmozgató ut. értékadásra valók. Nem változtatják a flagek értékét, kivéve a POPF.
MOV op1, op2 op1 = op2 értékadás
XCHG op1, op2 op1 és op2 értéke kicserélődik
XLAT ugyanaz, mint MOV AL, [BX + AL]
LEA reg, mem ugyanaz, mint MOV reg, OFFSET mem
LES reg, mem MOV reg, *mem+ és MOV ES, *mem 2+ LDS reg, mem MOV reg, [mem+ és MOV DS, *mem 2+
PUSH reg SP = SP -2, MOV [SP], reg
PUSHF SP = SP -2, SR (FLAGS) bekerül a verembe
POP reg a verem felső szavát teszi reg-be, SP = SP + 2
POPF a verem felső szavát teszi SR-be, SP = SP + 2
Aritmetikai utasítások
Az aritmetikai utasítások egyszerű számolási műveleteket hajtanak végre. Ahol lehetséges,
célszerű az AX regiszterrel számolni, mivel az gyorsabb, mint a többi. Az ún. aritmetikai flageket(C, Z, S, A, O, P) beállítják ezek a műveletek.
ADD op1, op2 op1 = op1 + op2
ADC op1, op2 op1 = op1 + op2 + C(arry)
SUB op1, op2 op1 = op1 – op2
SBB op1, op2 op1 = op1 – op2 – C(arry)
MUL op1 AX = AL · op1 ha op1 8-bites elő jel nélküli érték
DX:AX = AX · op1, ha op1 16-bites előjel nélküli érték
IMUL op1 ua. mint MUL, csak előjeles értékekkel számol
DIV op1 AL = AX / op1, ha op1 8-bites előjel nélküli egész
AX = DX:AX / op1, ha op1 16-bites előjel nélküli egész
IDIV op1 ua. mint DIV, csak előjeles értékekkel számol
INC op1 op1 = op1 + 1 (nem változtatja a Carry flaget)
DEC op1 op1 = op1 – 1 (nem változtatja a Carry flaget)
NEG op1 op1 = – op1, kettes komplemens képzése
CMP op1, op2 flagek beállítása op1 – op2 értéke alapján
CBW AX = AL, kiterjesztés 16-bitre előjellel együtt
CWD DX:AX = AX, kiterjesztés 32-bitre előjellel együtt
![Page 98: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/98.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 98/133
98.
Vezérlésátadó utasítások
A vezérlésátadó utasításokkal feltételes vagy feltétel nélküli ugrást, eljárás- és függvényhívást
tudunk kezdeményezni. Az ugrás tulajdonképpen nem más, mint a CS:IP regiszter párnak a következő
utasítás címére beállítása. Háromféle ugrást különböztetünk meg attól függően, hogy az operandus
milyen hosszú. A SHORT ugrásnál IP új értéke az IP – 128 és IP 127 között változhat, CS változatlan
(8 bites, elő jeles operandus). NEAR ugrásnál IP értéke tetszőlegesen változhat, CS változatlan (16
bites operandus). FAR ugrásnál mind CS, mind az IP értéken tetszőlegesen változhat (2x16 bites
operandus, far pointer).
JMP op1 feltétel nélküli ugrás a megadott címre (short, near, far)
Jxx short ptr feltételes ugrás a megadott flag értéke szerint (short)
Lehetséges feltételek: Flag = 1 Flag = 0
C flag szerint: JC ≡ JB ≡ JNAE JNC ≡ JNB ≡ JAEZ flag szerint: JZ ≡ JE JNZ ≡ JNE
S flag szerint: JS JNS
O flag szerint: JO JNO
P flag szerint: JP ≡ JPE JNP ≡ JPO
CMP A, B utasítás után:
A > B esetén: JA ≡ JNBE (C = 0 és Z = 0), előjel nélküli számoknál
A ≤ B esetén: JNA ≡ JBE (C = 1 vagy Z = 1), előjel nélküli számoknál
A > B esetén: JG ≡ JNLE (Z = 0 és S = O), elő jeles
A < B esetén: JL ≡ JNGE (S ≠ O flag), elő jeles
A ≥ B esetén: JGE ≡ JNL (S = O flag), elő jeles
A ≤ B esetén: JLE ≡ JNG (Z = 1 vagy S ≠ O), elő jeles
JCXZ címke feltételes ugrás, ha CX = 0
CALL címke eljáráshívás: PUSH IP majd JMP címke (near)
ill. PUSH CS, PUSH IP, JMP címke (far)
RET visszatérés közeli eljárásból: POP IP-vel egyenértékő
RETF visszatérés távoli eljárásból: POP IP, POP CS
Ciklus-szervező utasítások
A ciklus-szervező utasítások minden esetben CX értékét veszik figyelembe. Mindegyik
utasítás csökkenti eggyel CX értékét, és ha az eredmény nulla, akkor vége a ciklusnak. Nagyjából
egyenértékű a for(CX;CX>1;CX--) utasítással. Az operandusban megadott ugrás SHORT lehet csak
(-128…127).
LOOP címke CX = CX – 1, ha CX ≠ 0 ugrás a címkére
LOOPZ cí mke CX = CX – 1, ha CX ≠ 0 és Z flag = 1 ugrás a címkére
LOOPNZ címke CX = CX – 1, ha CX ≠ 0 és Z flag = 0 ugrás a címkére
LOOPE címke ua. mint LOOPZLOOPNE címke ua. mint LOOPNE
![Page 99: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/99.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 99/133
99.
Logikai utasítások
A logikai utasítások az operandusok között bitenkénti szabványos logikai műveletek
megvalósításai. Az eredmény az első operandusba kerül a TEST utasítás kivételével, ahol értékük
változatlan. Emellett természetesen mindegyiknél a megfelelő aritmetikai flagek is beállítódnak.
AND op1, op2 op1 = op1 & op2, logikai ÉS művelet
TEST op1, op2 op1 & op2 értéke alapján beállítja a flageket
OR o1p, op2 op1 = op1 | op2, logikai VAGY művelet
XOR op1, op2 op1 = op1 op2, logikai KIZÁRÓ VAGY művelet
NOT op1 op1 = ≦op1, logikai negáció (egyes komplemens)
String-kezelő utasítások
Ezek az utasítások a memóriában bájtsorozatokkal (stringekkel) kapcsolatos műveleteketvalósítanak meg (másolás, kiolvasás, beírás, keresés). Mindig DS:SI által mutatott címről olvasnak, és
az ES:DI címre írnak. Az utasítástól függően SI ill. DI regiszterek értéke 1 (Byte) ill. 2 (Word)-vel
változik. Ha D (Direction = irány) flag 1, akkor növekszik, ha 0, csökken ennyivel. Létezik mindegyik
utasításnak típus nélküli változata is (nincs a végén B vagy W), ekkor a megadott operandus mérete
mondja meg, hogy melyik változatot kell használni. Ha ez nem dönthető el egyértelműen, akkor az
assembler fordítási hibát ad, emiatt ill. az átláthatóság érdekében ezek használata kerülendő!
Az ismétlő prefixumokat string-kezelő utasítások előtt használhatjuk, azokkal együttesen.
Segítségükkel gyorsan végigmehetünk egy teljes stringen, minden elemre végrehajtva a kívánt
műveletet. Az összes ismétlés CX-szer hajtódik legfeljebb végre, hasonlóan a LOOP utasításhoz, annyi
különbséggel, hogy itt előbb megnézi a processzor, hogy CX = 0 teljesül-e, és csak az utasítás
végrehajtása után csökkenti eggyel (azaz CX = 0 esetén egyszer sem hajtódik végre az utasítás). Ebből
az is következik, hogy ha szabályosan végigfut egy ismétlési ciklus, akkor CX = 0 lesz.
MOVS op1 nem szerencsés, ua. mint MOVSB vagy MOVSW
MOVSB MOV ES:*DI+, DS:*SI+, és SI = SI ± 1, DI = DI ± 1
MOVSW MOV ES:*DI+, DS:*SI+, és SI = SI ± 2, DI = DI ± 2
LODS op1 nem szerencsés, ua. mint LODSB vagy LODSW
LODSB MOV AL, DS:[SI], és SI = SI ± 1 (D flagtől függően)LODSW MOV AX, DS:*SI+, és SI = SI ± 2 (D flagtől függően)
STOS op1 nem szerencsés, ua. mint STOSB vagy STOSW
STOSB MOV ES:[DI], AL és DI = DI ± 1 (D flagtől függően)
STOSW MOV ES:[DI], AX és DI = DI ± 2 (D flagtől függően)
CMPS op1 nem szerencsés, ua. mint CMPSB vagy CMPSW
CMPSB CMP DS:*SI+, ES:*DI+ és SI = SI ± 1, DI = DI ± 1
CMPSW CMP DS:*SI+, ES:*DI+ és SI = SI ± 2, DI = DI ± 2
SCAS op1 nem szerencsés, ua. mint SCASB vagy SCASW
SCASB CMP AL, ES:[DI] és SI = SI ± 1 (D flagtől függően)
SCASW CMP AX, ES:*DI+ és SI = SI ± 2 (D flagtől függően)REP fenti 5 féle utasítás ismétlése legfeljebb CX-szer
![Page 100: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/100.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 100/133
100.
REPZ ismétlés legfeljebb CX-szer, ha Z flag értéke 1
REPNZ ismétlés legfeljebb CX-szer, ha Z flag értéke 0
REPE ua. mint REPZ
REPNE ua. mint REPNZ
Bitforgató utasítások
Az érték vagy konstans 1, vagy a CL regiszter (286-os géptől felfelé megadhatunk 1-nél
nagyobb konstanst is).
RCL reg, érték forgatás balra, reg minden bitje eggyel balra tolódik,
0. bitbe C íródik, C felveszi a legmagasabb bit értékét
RCR reg, érték forgatás jobbra, reg minden bitje eggyel jobbra tolódik,
legmagasabb bitbe C íródik, C felveszi a 0. bit értékét
ROL reg, érték forgatás balra, reg minden bitje eggyel balra tolódik, 0. bitbe és C flagbe a legmagasabb bit értéke kerül
ROR reg, érték forgatás jobbra, reg minden bitje eggyel jobbra tolódik,
legmagasabb bitbe és C flagbe a 0. bit értéke kerül
SHR reg, érték eltolás jobbra, reg minden bitje eggyel jobbra tolódik,
legmagasabb bitbe 0 érték kerül, 0. bit a C flagbe íródik
SHL reg, érték eltolás balra, reg minden bitje eggyel balra tolódik,
0. bitbe 0 érték kerül, legmagasabb bit a C flagbe íródik
SAR reg, érték eltolás jobbra, reg minden bitje eggyel jobbra tolódik,
legmagasabb bit nem változik, 0. bit a C flagbe íródik
SAL reg, érték ua. mint SHL
Processzor-vezérlő utasítások
A processzor-vezérlő utasítások egy része a flageket állítja direktben, másik részük egyéb
közvetlen utasítást ad a CPU részére. A flageket, a leírt hatáson kívül nem változtatják.
CLC C flaget törli (C = 0)
STC C flaget beállítja (C = 1)
CMC C flaget negálja (C = 1 – C)CLD D flaget törli (D = 0), csökkenı irányú string-műveletek
STD D flaget beállítja (D = 1), növekvő irányú string-műveletek
CLI I flaget törli (I = 0), megszakítások tiltása
STI I flaget beállítja (I = 1), megszakítások engedélyezése
NOP CPU nem csinál semmit egy ideig ( ≡ XCHG AL, AL)
WAIT CPU várakozik, amíg a koprocesszor kész nem lesz
HLT CPU leáll, amíg hardveres megszakítás jelet nem kap
![Page 101: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/101.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 101/133
101.
Input/Output utasítások
Külső eszközökkel kommunikálhat a CPU, az ún. portokon keresztül. A port értéke egy 0-255
közé eső konkrét szám lehet. Ha ennél nagyobb sorszámú portot akarunk elérni, akkor a port helyére
DX regisztert kell beírni (a port sorszáma természetesen ekkor DX-ben van). A művelethez kizárólag
AX és AL regiszterek használhatóak, attól függően, hogy 2 vagy 1 bájtot mozgatunk.
IN accum, port beolvas 1 vagy 2 bájtot AL/AX-be a megadott portról
OUT port, accum kiírja az AL/AX-ben lévő értéket a megadott portra
Program-megszakítás
A (program)-megszakítás azt jelenti, hogy az éppen futó program végrehajtása átmenetileg
megszakad – a processzor állapota megőrződik, hogy a program egy késöbbi időpontban
folytatódhassék – és a processzor egy másik program, az úgy nevezett megszakító rutin végrehajtását
kezdi meg. A megszakító rutin, miután elvégezte munkáját, gondoskodik a processzor
megszakításkori állapotának visszaállításáról, és visszaadja a vezérlést a megszakító programnak.
Általánosítás:
A központi egységnek több állapota van, és bizonyos utasítások csak a központi egységnek
bizonyos kitüntetett (privilegizált) állapotában hajthatók végre, alap állapotban nem.
Megoldás:
Szoftver megszakítás. Az utasítások bizonyos csoportja, a memória meghatározott részei, a
hardver egyes elemei csak a processzor kitüntetett állapotában érhetők el. A processzor (szoftver)
megszakítást eredményező utasítással juttatható a kívánt állapotba. Ilyenkor az operációs rendszer
egy meghatározott programja kapja meg a vezérlést. Ennek módjában áll a kívánság „jogosságának”
ellenőrzése. Jogtalan kívánság, vagy nem kitüntetett állapotban történő kísérlet esetén – ami szintén
megszakítást eredményezhet, tehát szintén az operációs rendszer kapja meg a vezérlést – az
operációs rendszernek módjában áll a program további működését beszüntetni.
Több ok okozhat megszakítást. Az Intel 8088 processzor esetén a megszakítási okokat 0 és
255 közé eső i számmal jellemezhetjük. Az i. megszakítási okhoz tartozó megszakító rutin FAR címe a
memória 4i címén található. A megszakítás esetén a hardver egység installáláskor adott száma,
szoftver megszakítás esetén az operandus rész szolgáltatja.
Interrupt utasítások:
Az interrupt (megszakítás) kezelő utasításokkal saját, vagy beépített eljárásokat hívhatunk
meg. Ezek egy része akkor fut le, ha egy hardver eszköz megszakítás- jelet küld a CPU-nak (pl.
leütöttek egy billentyűt), más részüket a rendszer és mi használjuk programon belül (pl. BIOS
rutinok). A megszakítások sorszáma 0 – 255 között lehet, és a 0000h:*4sorszám+ helyen lévő távoli
címen vannak megvalósítva.
![Page 102: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/102.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 102/133
102.
INT sorszám megszakítás hívása, interrupt táblában lévő cím szerint:
PUSHF, CALL far ptr 0000h:[4*sorszám+ egymás után
INTO INT 4 hívása, ha az O flag értéke 1
IRET visszatérés megszakításból (RETF, POPF egymás után)
Szemafor
Multiprogramozásos környezetben gyakran előfordul, hogy ugyanazt az erőforrást (pl.nyomtató) egyidejüleg több program is szeretné használni. Erre természetesen nincs lehetőség, ezértbiztosítani kell, hogy egyidejüleg legfeljebb egy program használhassa az illető erőforrást.Szemafornak nevezzük azt a jelzést, amely megmutatja, hogy az erőforrást használja-e pillanatnyilag
valamely program.
Legyen az S szemafor egy olyan word típusú változó, amely mindegyik program számára
elérhető. Jelentse S=0 azt, hogy az erőforrás szabad, és S≠0 azt, hogy az erőforrás foglalt.
Próbáljuk meg a szemafor kezelését!
A megoldás a következő:
ujra: MOV CX,0FFFH
XCHG CX,S ;már foglaltat jelez a szemafor!
JCXZ szabad ;ellenőrzés S korábbi tartalma szerint
… ;foglalt volt az erőforrás, várakozás
jmp ujra
szabad: … ;szabad volt az erőforrás, ;de a szemafor már foglalt
Több processzoros rendszer esetén elképzelhető, hogy az egyik processzor éppen
végrehajtotta az első mikroutasítást, amikor egy másik processzor is ugyanezt az utasítást kívánja
végrehajtani. Ekkor ugyanúgy, mint az előző kísérletnél a LOCK prefixum segítségével tudjuk
megadni.
ujra: MOV CX,0FFFFH
LOCK XCHG CX,S ;S már foglaltat jelez
JCXZ szabad ;ellenőrzés S korábbi tartalma szerint
… ;foglalt az erőforrás, várakozás
jmp ujra
szabad … ;használható az erőforrás, ;de a szemafor már foglalt
Ha a programnak nincs szüksége tovább a korábban lefoglalt erőforrásra, akkor ezt a
szemafor szabadra állításával jelezheti. A szemafor szabadra állítása a közönséges
MOV S, 0
utasítással történhet.
![Page 103: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/103.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 103/133
103.
38. Pszeudo operátorok. Egyszerű adatdefiníciós utasítások.Struktúra, rekord (definíció, hívás, mezőre hivatkozás)
A pszeudo utasítások nem valódi utasítások, abban az esetben, hogy ezeket a lefordított
program a futás során nem fogja végrehajtani (ilyenek pl. az adatdefiníciós utasítások), bizonyosesetekben nem is kerülnek bele a lefordított programba. A pszeudo utasításokat a fordítóprogram
hajtja végre. Ez a végrehajtás fordítás közbeni tevékenységet vagy a fordításhoz szükséges információ
gyűjtést jelenthet.
Adatdefiníciós utasítások
Az adatokat általában külön szegmensben szokás és javasolt definiálni. A kezdőértékkel
ellátott változók a program betöltésekor a megadott értékkel rendelkeznek, de a program futása
során változhatnak. Erre különösen akkor kell tekintettel lennünk, ha a programot egyszeri betöltés
után többször is el akarjuk indítani. Az adatdefiníciós utasítások elé általában azonosítót (változó név)írunk, hogy hivatkozhassunk az illető adatra. Egy-egy adatdefiníciós utasítással több azonos típusú
adatot is definiálhatunk. A kezdő érték tetszőleges konstans (szám, szöveg, cím...) kifejezés lehet. Ha
nem akarunk kezdőértéket adni, akkor ?-et kell írnunk. A szöveg és a karakter konstansokat "-k vagy
'-k között adhatjuk meg.
Egyszerű adatdefiníciós utasítások
Define Byte (db): Az operandus lehet numerikus, karakter vagy szöveg. Pl.:
Adat1 db 25 ;1 byte, kezdőértéke decimális 25
Adat2 db 1,2 ;2 byte (nem egy szó) Adat3 db 5 dub (?) ;5 inicializálatlan byte
Kar db ’a’,’b’,’c’ ;3 ASCII kódú karakter
Szoveg db ’Ez egy szöveg’,13,OAH ;ASCII kódú szöveg, és 2 szám
Szoveg1 db ’Ez is ”szöveg”’,”és ez is ’szöveg’”
Vegyesen is előfordulhatnak egy utasításban.
Define Word (dw): Az operandus lehet numerikus, cím, karakter vagy 2 karakteres szöveg. Pl.:
Szo dw 0742H, 452
Szo_cime dw szo ;szo OFFSET címe
Define Double (dd): Az oprandus lehet numerikus, távoli cím (segment és offset cím), karakter vagy
maximum 4 karakteres szöveg. Tipikus alkalmazásai: Távoli címek tárolására a stringkezelő utasítások
előkésítéséhez az LDS és az LES utasítás operandusként, vagy távoli eljárások indirekt hívásához. Pl.:
Szo_f dd szo ;szo távoli (segmentoffset) címe
Define Quadword (dq): Dupla pontosságú (4 szavas) lebegőpontos számok, változók számára történő
helyfoglalásra használatos.
Define Ten bytes (dt): 10 byte-on tárolt 10 jegyű pakolatlan vagy 20 jegyű pakolt decimális számok,
változók számára történő helyfoglalásra használatos.
![Page 104: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/104.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 104/133
104.
Összetett adatdefiníciós utasítások
Programozás során sokszor előnyös, ha több – esetleg eltérő típusú – adatot egységesen
tudunk kezelni. Assembly-ben ezt a lehetőséget a struktúra és a rekord biztosítja. A struktúra ill
rekord elemi részeit mezőknek (field) nevezzük.
Struktúra
Csak a struktúra típusát definiálja a későbbi struktúra-hívások számára, ezért a memóriában
nem jár helyfoglalással.
Str_típus STRUC ;struktúra (típus) definíció
... ;mező (field) definíciók, egyszerű adatdefiníciós utasítások
Str_típus ENDS ;struktúra definíció vége
A mező (field) definíció csak egyszerű adatdefiníciós utasítással történhet, ezért a struktúra
mező nem lehet másik struktúra vagy rekord. A mezők definiálásakor megadott értékek kezdőértékülszolgálnak a későbiekben történő struktúra hívásokhoz. A definícióban megadott kezdőértékek közül
azoknak a mezőknek a kezdőértéke híváskor felülbírálható, amelyek csak egyetlen adatot
tartalmaznak (a szöveg konstans annak minősül). Pl.:
S STRUC ;struktúra (típus) definíció
F1 db 1,2 ;nem lehet felülírni F2 db 10 dup(?) ;nem lehet felülírni F3 db 5 ;felülírható
F4 db ’a’,’b’,’c’ ;nem lehet felülírni F5 db ’abc’ ;felülírható
S ENDS
Struktúra hívás
A struktúra definíciójánál a megadott str_típus névnek a műveleti kód részen történő
szerepeltetésével hozhatunk létre struktúra változókat. A kezdőértékek fölülbírálása a kívánt érték <>
közötti felsorolásával történik. A egyes mezők kezdőértékeit vesszővel választjuk el. Ha egy mezőnek
a kezdőértékét nem kívánjuk megadni vagy nem adhatjuk meg akkor is ki kell írjuk a vesszőt, kivéve
ha egyiknek sem kívánunk eltérő kezdőértéket adni.
S1 S ;kezdőértékek a def -ből S2 S<,,7,,’FG’> ;F3 kezdőértéke 7, F5-é ’FG’ S3 S<,,’A’> ;F3 kezdőértéke ’A’, F5-é a definícióból
Struktúra mezőre hivatkozás
A struktúra változó névhez tartozó OFFSET cím a struktúra OFFSET címét, míg a mező név a
struktúrán belüli címet jelenti. A struktúra adott mezejére úgy hivatkozunk, hogy a struktúra és mező
néve közé pontot írunk. Pl.: MOV AL,S1.F3
A mezőnevek szükségképpen egyedi nevek, tehát sem másik struktúra definícióban, sem
közönséges változóként nem szerepelhet.
![Page 105: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/105.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 105/133
105.
Rekord
Rekordon olyan 1 vagy 2 byte-os összetett adatot értünk, melynek meghatározott
szomszédos bitsorozatai logikai egységet alkotnak. Ezeket a logikai egységeket mezőknek (field)
nevezzük. Olyan esetben válhat hasznunkra a rekord, amikor egy vagy két byte-os adatokat
bitcsoportonként kell kezelnünk, ami leggyakrabban driver-ek írásakor fordul elő.
Rekord definíció
Csak a rekord típusát definiálja a későbbi rekordhívások számára.
Rec_típus RECORD mező specifikáció
ahol az egyes mező specifikációkat vesszővel választjuk el. Maga a mező-specifikáció:
mező_név: szélesség=kezdőérték
a szélesség a mező bitjeinek száma. A kezdőérték el is maradhat, pl.:
R RECORD x:3,y:4=15,z:5
Az R rekord szavas (12 bit), a következőképpen helyezkedik el egy szóban:
x x x y y y y z z z z z
Rekord hívás
A rekord definíciójánál megadott Rec_típus névnek a műveleti kód részén történő
szerepeltetésével hozhatunk létre rekord változókat. A kezdőértékek fölülbírálása a kívánt értékek <>közötti felsorolással történik. Az egyes mezők kezdőértékeit vesszővel választjuk el. Ha egy mezőnek
a kezdőértékét nem kívánjuk megadni, akkor is ki kell írjuk a vesszőt, kivéve, ha egyiknek sem
kívánunk eltérő kezdőértéket adni.
R1 R < > ;01E0H, kezdőértékek a def -ből R2 R <,,7> ;01E7H,x,y kezdőértéke a def -ből, z-é 7
R3 R <1,2> ;0240H,x kezdőértéke 1, y-é 2, z-é a def -ből
Rekordból vektort is előállíthatunk. Pl.:
R_vektor R 5 dup (<1,2,3>) ;0243H, 5 elemű rekord vektor
Rekordmezőre hivatkozás
A mezőnév olyan konstansként használható, amely azt mondja meg, hány bittel kell jobbra
léptetnünk a rekordot, hogy a kérdéses mező az 1-es helyértékre kerüljön. További segítség a MASK
operátor, melyet a mező név elé írva olyan konstanst kapunk, amely az illető mezőhöz tartozó biteket
1, a többi biten 0. NOT MASK ennek a bitenkénti negáltja.
![Page 106: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/106.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 106/133
106.
39. Eljárás (deklaráció, hívás). Paraméter átadás/átvétel különbözőmódjai.
Tegyük fel hogy például egy olyan programot szeretnénk csinálni, amely két vektor skaláris
szorzatát számolja ki. Ez még nem is tűnik annyira bonyolultnak. De ha többször is el szeretnénk eztvégeztetni, akkor a többszöri utasítássorozat begépelése helyett eljárásokkal oldhatjuk meg.
Eljárás deklaráció
Az eljárásnak a program egy
Elj_név PROC típus
pszeudo utasítással kezdődő (ez az eljárás belépési pontja), és
Elj_név ENDP
utasítással végződő szakaszt értjük. Az Elj_név az eljárás neve, típus az eljárás típusa, amely lehet
NEAR vagy FAR. Eljárás hívására a CALL utasítás szolgál. Ilyenkor verembe helyezi az IP ill. ha FAR
akkor IP és CS tartalmát, és átadja a vezérlést a meghívott eljárásnak. Az eljárásból a RET utasítással
térhetünk vissza a CALL utasítás mögé. Ilyenkor a RET kiolvassa a veremből az IP ill. IP és CS tartalmát
és visszatér a hívás utáni utasításhoz.
A paraméterek regiszterekben történő átadása
A skaláris adatokat szokásos érték szerint átadni, az összetett adatokat pedig cim szerint.
mov cl,n
xor ch,ch
mov si,OFFSET a
mov di,OFFSET b
Ahol
n db 3
a db 1,2,3
b db 3,2,1
Az érték szerinti paraméter átadásnál a hívott program nem tudja módosítani a paraméter
értékét. Ez részben előny, mert nem tudja elrontani, de részben hátrány is, mert néha jó lenne, ha
módosítani tudná. Ilyenkor cím szerint kell átadni a paramétert.
A paraméterek veremben történő átadása
A regiszeterekben történő paraméter átadásnál erősen kihasználtuk azt, hogy elegendő
regiszter áll rendelkezésünkre. Ez általában nem tejesül. Ilyenkor a verembe tároljuk adatainkat. Ezt
persze olyankor is megtehetjük, amikor elegendő regiszterünk lenne a paraméterek átadására. Ekkor
ez igy nézne ki:
![Page 107: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/107.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 107/133
107.
mov al,n
xor ah,ah
push ax
mov ax,OFFSET a
push ax
mov ax,OFFSET bpush ax
call ...
Ilyenkor a verem így fog kinézni
(SS:SP) visszatérési cím
+2 b címe
+4 a címe
+6 n értéke
Az eljárás elején általában célszerű a regiszterek verembe tárolása, és a végén onnan veló
kivétele (persze fordított sorrendben). Erre azért van szükség, hogy ne veszítsük el semmi adatot
amivel dolgoztunk a programban.
A paraméterek kiürítését a veremből például a
ret 6
utasítással oldhatjuk meg, ahol az eljárásból való kilépéskor 6 -tal megnöveli az SP-t és a veremben a
visszatérési cim utánni 3 paramétert kivesz.
Ez még úgy is megoldható, hogy a hívás után
add sp,6
utasítást írunk. Ez is szimplán megnöveli az SP-t 6-tal és kivesz 3 paramétert.
![Page 108: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/108.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 108/133
108.
40. Lokális adat terület, rekurzív és reentrant eljárások.
Lokális adatterület
Ha egy eljárás működéséhez lokális adatterületre, munkaterületre van szükség, és a működésbefejezetével a munkaterület tartalma felesleges, akkor a munkaterületet célszerűen a veremben
alakíthatjuk ki. A munkaterület lefoglalásának ajánlott módja:
. . . proc . . .
PUSH BP ; BP értékének mentése
MOV BP,SP ; BP SP,
; a stack relatív címzéshez
SUB SP,n ; n a munkaterület byte- jainak száma
. . . ; további regiszter mentések
A munkaterület negatív displacement érték mellet stack relatív címzéssel érhető el.
(A verembe elhelyezett paraméterek ugyancsak stack relatív címzéssel, de pozitív displacement érték
mellet érhetőek el.) A munkaterület felszabadítása visszatéréskor a
. . . ; visszamentések
MOV SP,BP ; a munkaterület felszabadítása
POP BP ; BP értékének visszamentése
ret . . . ; visszatérés
utasításokkal történhet.
Rekurzív és reentrant eljárások
Egy eljárás rekurzív, ha önmagát hívja közvetlenül, vagy más eljárásokon keresztül.
Egy eljárás reentrant, ha többszöri belépést tesz lehetővé, ami azt jelenti, hogy az eljárás még
nem fejeződött be, amikor újra meghívható.
A rekurzív eljárással szemben a különbség az, hogy a rekurzív eljárásban „programozott”,
hogy mikor történik az eljárás újrahívása, reentrant el járás esetén az esetleges újrahívás ideje a
véletlentől függ. Ez utóbbi esetben azt, hogy a munkaterületek ne keveredjenek össze, az biztosítja,
hogy újabb belépés csak másik processzusból képzelhető el, és minden processzus saját vermet
használ.
Ha egy eljárásunk készítésekor betartjuk, hogy az eljárás a paramétereit a vermen keresztül
kapja, kilépéskor visszaállítja a belépéskori regiszter-tartalmakat – az esetleg eredményt tartalmazó
regiszterek kivételével –, továbbá a fenti módon kialakított munkaterületet használ, akkor az
eljárásunk rekurzív is lehet, és a többszöri belépést is lehetővé teszi (reentrant).
![Page 109: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/109.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 109/133
109.
41. Feltételes fordítás
Feltételes fordításra az assembler is képes. Ez tulajdonképpen ugyanaz, mint amit
ProgAlapon tanultunk. El tudjuk érni, hogy a programkód egyes részeit a forditóprogram (jelen
esetben az assembler) ne forditsa le. Ez különösen akkor lehet előnyös, ha pl. hibajakeresés céljából aprogramban több helyen elhelyeztünk egy parancsot, amely kiirja az eredményt a képernyőre vagy a
nyomtatóra. Természetesen a végleges programban ezek a kiirások nem szerepelnek, vagyis valahogy
el kell érnünk, hogy a forditóprogram ne forditsa le. Ez lehetséges úgy, hogy egyenként kitöröljük
őket (akár mind a 432 darabot), ezzel azonban az a baj, hogy ha véletlenül továbbra is hibás a
program, egyenként kell őket visszairni. Ugyanez a helyzet a kommentezéssel is. Ehelyett inkább
olyan megoldást kell keresnünk, amely lehetővé teszi, hogy az általunk kiválasztott dolgokról a
forditáskor megmondjuk, benne legyenek-e a forditott kódban, vagy sem. Ez a feltételes forditás.
A feltételes forditás általános szerkezete:
IFxx feltétel
... ; lefordul, ha a feltétel igaz
ELSE ; ez az ág nem kötelező
... ; lefordul, ha a feltétel hamis
ENDIF
A fenti példában xx-t helyettesitve a megfelelő kulcsszavakkal megkapjuk a következő táblázatot:
IF kifejezés ; igaz, ha a kifejezés nem 0
IFE kifejezés ; igaz, ha kifejezés 0
IF1 ; igaz a forditás első menetében IF2 ; igaz a forditás második menetében
IFDEF Szimbólum ; igaz, ha Szimbólum definiált IFNDEF Szimbólum ; igaz, ha Szimbólumnem definiált IFB <arg> ; igaz, ha arg üres (blank) IFNB <arg> ; igaz, ha arg nem üres
IFIDN <arg1>,<arg2> ; igaz, ha arg1=arg2
IFDIF <arg1>,<arg2> ; igaz, ha arg1=arg2 nem teljesül
![Page 110: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/110.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 110/133
110.
42. Makró (definíció, hívás), blokk ismétlés
Makró
Az eljárások előnye, hogy csak egyszer kell megírnunk az illető részfeladatot megoldó eljárást,a továbbiak során elegendő a paraméterek megfelelő beállítása után felhívnunk ezt az eljárást. Maga
az eljárás csak egyszer szerepel a programban.
Kimutatkozik az eljárások hátránya, ha az eljárás maga egyszerű, de sok paramétert használ,
mert ilyenkor a paraméterek átadása összemérhető magával az eljárás végrehajtásával. A
paraméterek átadása minden hívásnál terheli a memóriát és a futási időt is. Többek között ilyen
esetekben nyújt hatékony megoldást a makró.
Makrók használatával kapcsolatban meg kell különböztessük a makró definíciót és a makró
hívást.
Makró definíció:
M_név MACRO *fpar1+,*fpar2+… ;makró fej (kezdet) … ;makró törzse
ENDM ;makró vége
A makró fejben megadott *fpar1+,*fpar2+…-t formális paramétereknek, vagy egyszerűen
paramétereknek szokás nevezni. A makró definíció nem lesz része a lefordított programnak, csupán
azt határozza meg, hogy később mit kell a makró hívás helyére beírni (makró kifejtés, helyettesítés).
A makró törzsén belül előfordulhat makró hívás és makró definíció is.
Makró hívás:
M_név *apar1+,*apar2+…
A makró hívásában megadott *apar1+,*apar2+…-t aktuális paramétereknek vagy
argumentumoknak szokás nevezni. A műveleti kód helyére írt M_név hatására a korábban megadott
definíció szerint megtörténik a makró helyettesítés, más néven makró kifejtés. Ez a makró törzs
bemásolását jelenti, miközben az összes paraméter összes előfordulása a megfelelő argumentummal
helyettesítődik. A helyettesítés szövegesen történik, azaz minden paraméter – mint szöveg – helyére
a megfelelő argumentum – mint szöveg – kerül. A helyettesítés nem rekurzív, és argumentuma sem
lehet makró hívás, csak egyszerű szöveg, de az argumentumnak megfelelő formális paraméternek
lehet olyan előfordulása, amely a későbbiekben makró hívást eredményez.
Példaként legyen a programban gyakran előforduló részfeladat a dupla szavas összeadás.
Makró definíció: MDADD MACRO
ADD AX,BX
ADC DX,CX
ENDM
Makró hívás: MDADD
![Page 111: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/111.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 111/133
111.
Fordítás közben MDADD definíciója szerint, megtörténik a makró helyettesítése, és a program-szövegrészévé válik:
ADD AX,BX
ADC DX,CX
Futás közben csak ez a két utasítás kerül végrehajtásra.
Paraméter nemcsak operandus részen fordulhat elő a makró törzsében, hanem másutt is, pl.:
PL MACRO P1,P2
MOV AX,P1
P2 P1
ENDM
makró definíció esetén a
PL Adat, INC
makró hívás a
MOV AX,Adat
INC Adat
utasításokra cserélődik.
A &, %, ! karakterek továbbá a <> és ;; speciális szerepet töltenek be makró kifejtéskor.
&: Előfordulhat, hogy azt szeretnénk, hogy makró kifejtéskor a paraméter – helyettesített – értéke
része legyen egy szónak. Ezt a & karakterrel oldhatjuk meg. A makró generátor az & karakter mindkét
oldalát megvizsgálja, hogy ott paraméter szerepel-e. Ha igen, elvégzi a paraméter helyettesítését, és
mindenképpen elhagyja az & jelet. Pl.:
UGRIK MACRO Felt, Címke
J&Felt Felt&Címke
ENDM
A hívás, pl.:
UGRIK Z,Alfa
Ennek kifejtése:
JZ Zalfa
%: Az utána szereplő paraméter értékének számjegyek sorozatává alakítását írja elő.
S = 0
ErrMsg MACRO textS = s+1
MSG %s,text
![Page 112: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/112.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 112/133
112.
ENDM
Msg MACRO sz,str
Msg&sz db str
ENDM
Az
ErrMsg ’syntax error’
makró hívás hatására az
msg1 db ’syntax error’
adatfoglaló utasítás
!: Az utána következő karakter változatlanul kerül bemásolásra. Lehetőséget ad arra, hogy pl. az &
jelet a kifejtett makró szövegében szerepelhessen.
<>: Ha aktuális paraméterként olyan szöveget kívánunk megadni, amely pl. ,-t tartalmaz, akkor ezt <>
jelek között tehetjük meg. Pl az
adat macro p
db p
endm
makró definíció esetén az
adat <’abc’,13,10,0>
hívás kifejtve:
db ’abc’,13,10,0
míg ezzel szemben az
adat ’abc’,13,10,0
kifejtve
db ’abc’
;;: A makró definíció megjegyzéseinek kezdetét jelzi. A ;; utáni megjegyzés nem jelenik meg a
programlistában.
Ha makró egyes részeihez címkét szeretnénk rendelni, és a makró többször is meghívjuk, akkor
hibajelzést kapunk. Az ilyen hiba elkerülésére használjuk a LOCAL utasítást.
LOCAL c1*,c2…+
![Page 113: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/113.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 113/133
113.
c1*,c2…+ minden makró hívásnál más, ??xxxx alakú szimbólumra cserélődik, ahol xxxx a makró
generátor által meghatározott hexadecimális szám. A LOCAL operátort közvetlenül a makró fej utáni
sorba kell írni.
Makró definíció belsejében meghívható az éppen definiálás alatt lévő makró is (a makró hívás ezáltal
rekurzívvá válik). Pl. a
PUSHALL MACRO reg1,reg2,reg3,reg4,reg5,reg6
IFNB <reg1> ;;ha a paraméter nem üres
Push reg1 ;;az első regiszter mentése
PUSHALL reg2,reg3,reg4,reg5,reg6 ;;rekurzió
ENDIF
ENDM
Makró lehetővé teszi, hogy egy felhívással akárhány (legfeljebb 6) regiszter tartalmát a verembe
mentsük, pl.: a
PUSHALL ax,bx,cx
hatására a
PUSH ax
PUSH bx
PUSH cx
utasítás sorozat generálódik.
Blokk ismétlés
A makróhoz hasonló lehetőséget biztosít: a blokk egy definíciója alapján a blokk többszöri kifejtését.
Lényeges különbség azonban, hogy ezek az operátorok nemcsak a blokk definíciójának kezdetét
jelölik ki, hanem a kifejtést (hívást) is előírják. A program más részéről nem hívhatók ezek a
definíciók.
Blokk ismétlés kifejezés-szer:
REPT kifejezés
… ;ez a rész ismétlődik
ENDM
![Page 114: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/114.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 114/133
114.
A kifejezés nem lehet változó, a fordítási időben ismert kell legyen az értéke!
Blokk ismétlés argumentum lista szerint:
IRP par,<arg1,*,arg2…+>
… ; ez a rész kerültöbbször bemásolásra úgy, … ; hogy par rendre felveszi az
… ; arg1*,arg2…+ értéket
ENDM
Pl.: IRP x,<1,2,3>
Db x
ENDM
hatása: db 1
db 2
db 3
Blokk ismétlés string alapján:
IRPC par,string
… ; ez a rész kerül bemásolásra úgy, … ; hogy par rendre felveszi a string karaktereit
ENDM
A stringet nem kell idéző jelek közé tenni, ez csak újabb ismétlést jelentene.
A makró definíció is tartalmazhat blokk ismétlést és blokk ismétlés is tartalmazhat makró definíciót
vagy makró hívást.
![Page 115: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/115.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 115/133
115.
43. Címkék, változók, konstansok, kifejezések
Címkék
Leggyakoribb definíciója, hogy valamelyik utasítás előtt a sor első pozíciójától :-tal lezártazonosítót írunk. Az így definiált címke NEAR típusú. A LABEL és a PROC pszeudo utasítások további
lehetőséget nyújtanak.
ALFA: ... ;NEAR típusú
BETA LABEL FAR ;FAR típusú
Az eljárás deklarációt a PROC utasítással nyitjuk meg. A címke rovatba írt azonosító az eljárás
neve és egyben a belépési pontjának címkéje. Az eljárás végén az eljárás végét jelző ENDP pszeudo
utasítás előtt meg kell ismételnünk ezt az azonosítót, de ez már nem minősül címkének.
A PROC NEAR ;NEAR típusú (a NEAR elhagyható) ...
B PROC FAR ;FAR típusú
...
Címkére vezérlés átadó utasítással hivatkozhatunk, NEAR típusra csak az adott szegmensből,
FAR típusra más szegmensből
Változók
Definíciója ada definíciós utasításokkal történik. Néha (adat) címkének is nevezik.
Adatdefiníciós utasítások
Az adatokat általában külön szegmensben szokás és javasolt definiálni. A kezdőértékkel
ellátott változók a program betöltésekor a megadott értékkel rendelkeznek, de a program futása
során változhatnak. Erre különösen akkor kell tekintettel lennünk, ha a programot egyszeri betöltés
után többször is el akarjuk indítani. Az adatdefiníciós utasítások elé általában azonosítót (változó név)
írunk, hogy hivatkozhassunk az illető adatra. Egy-egy adatdefiníciós utasítással több azonos típusú
adatot is definiálhatunk. A kezdő érték tetszőleges konstans (szám, szöveg, cím...) kifejezés lehet. Ha
nem akarunk kezdőértéket adni, akkor ?-et kell írnunk. A szöveg és a karakter konstansokat " -k vagy
'-k között adhatjuk meg.
Egyszerű adatdefiníciós utasítások
Define Byte (db): Az operandus lehet numerikus, karakter vagy szöveg. Pl.:
Adat1 db 25 ;1 byte, kezdőértéke decimális 25
Adat2 db 1,2 ;2 byte (nem egy szó) Adat3 db 5 dub (?) ;5 inicializálatlan byte
Kar db ’a’,’b’,’c’ ;3 ASCII kódú karakter
Szoveg db ’Ez egy szöveg’,13,OAH ;ASCII kódú szöveg, és 2 szám
Szoveg1 db ’Ez is ”szöveg”’,”és ez is ’szöveg’”
Vegyesen is előfordulhatnak egy utasításban.
![Page 116: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/116.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 116/133
116.
Define Word (dw): Az operandus lehet numerikus, cím, karakter vagy 2 karakteres szöveg. Pl.:
Szo dw 0742H, 452
Szo_cime dw szo ;szo OFFSET címe
Define Double (dd): Az oprandus lehet numerikus, távoli cím (segment és offset cím), karakter vagymaximum 4 karakteres szöveg. Tipikus alkalmazásai: Távoli címek tárolására a stringkezelő utasítások
előkésítéséhez az LDS és az LES utasítás operandusként, vagy távoli eljárások indirekt hívásához. Pl.:
Szo_f dd szo ;szo távoli (segmentoffset) címe
Define Quadword (dq): Dupla pontosságú (4 szavas) lebegőpontos számok, változók számára történő
helyfoglalásra használatos.
Define Ten bytes (dt): 10 byte-on tárolt 10 jegyű pakolatlan vagy 20 jegyű pakolt decimális számok,
változók számára történő helyfoglalásra használatos.
Összetett adatdefiníciós utasítások
Programozás során sokszor előnyös, ha több – esetleg eltérő típusú – adatot egységesen
tudunk kezelni. Assembly-ben ezt a lehetőséget a struktúra és a rekord biztosítja. A struktúra ill
rekord elemi részeit mezőknek (field) nevezzük.
Konstansok
Egy művelet operandusa lehet konstans, szimbólum vagy kifejezés. A konstans lehet
numerikus vagy szöveg konstans. A numerikusak lehetnek decimálisak, hexadecimálisak, oktálisak
vagy binárisak. A számrendszert a szám végére írt D, H, O ill B betűvel választhatjuk ki. Ha nem írunk
betűt a végére, akkor az alapértelmezett számrendszert kell érteni(általában decimális). Az
alapértelmezett számredszert a
.radix n
pszeudo utasítással állíthatjuk be, és n a számrendszer alapszáma. A hexadecimális számok
számjeggyel kell hogy kezdődjenek, különben a fordító azonosítónak fogja tekinteni. A szöveges
konstansokat a DB utasításban " vagy ' jelek között adhatjuk meg.
Kifejezések
A kifejezés szimbólumokból és konstansokból épül fel az alábbi műveletek segíségével.
Értékét a fordítóprogram határozza meg, és a kiszámított értéket használja operandusként.
Szimbólumok értékén konstansok esetében természetesen a konstansok értékét, címkék, változók
esetében a hozzájuk tartozó címet értjük. Az érték nemcsak számérték lehet, hanem minden, ami az
utasításokban megengedett címzési módok valamelyikénak megfelel. Pl *BX+ is kifejezés és értéke a
BX regiszterrel történő indirekt hivatkozás, és ehhez a fordítóprogramnak nem kell ismernie BX
értékét. De előfordulhat, hogy egy kifejezés egyik szintaktikus helyzetben megengedett, másikban
meg nem.
mov ax,[BX] ;[BX] megengedett
mul [BX] ;*BX+ hibás, de WORD PTR *BX+ megengedett
![Page 117: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/117.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 117/133
117.
A műveletek csökkenő precedencia szerinti sorrendben: (nem feltétlen tartozik a tételhez)
1.
( ) zárójel pár a kifejezésben a műveletek sorrendjét befolyásolja, * + az indirekció előírásra
szolgál. Ha * +-en belüli kifejezésre nem használható indirekció, akkor( )-lel egyenértékű
. (pont): struktúra mezőre hivatkozásnál használatos
LENGTH változó: a változó-hoz tartozó adat terület elemeinek száma
SIZE változó: a változó-hoz tartozó adat terület hossza byte-okban
WIDTH R/F: az R rekord vagy az F (rekord) mező szélessége bitekben
MASK F: az F (rekord) mező bitjein 1, másutt 0
Pl. v dw 20 dup (?)
rec record x:3, y:4
esetén:
mov ax,LENGTH v ;ax 20
mov ax,SIZE v ;ax 40
mov ax,WIDTH rec ;ax 7
mov ax,WIDTH x ;ax 3
mov ax,SIZE rec ;ax 1mov ax,MASK x ;ax 70H
2. Explicit szegmens megadása (segment override prefix). Az automatikus szegmens regiszter helyett
más szegmens regiszter használatát írja elő.
Pl. mov ax,ES:[BX] ; ax (ES:BX) címen levő szó
Nem írható felül az automatikos szegmens regiszter az alábbi esetekben:
CS program memória címzésnél SS stack referens utasításokban (PUSH,POP,...) ES string utasításban DI mellett, de az SI-hez tartozó DS átírható
3.
típus PTR cím: (típus átdefiniálás) ahol a típus lehet BYTE, WORD, DWORD, QWORD, TBYTE, ill
NEAR és FAR. Pl mul BYTE PTR [BX] ;a *BX+ címet byte-osan kell kezelni
OFFSET szimbólum: a szimbólum OFFSET címe (a szegmens kezdetétől számított távolságabyte-okban)
SEG szimbólum: a szimbólum szegmens címe (abban az értelemben, ahogy a szegmensregiszterben szokásos tárolni, tehát valós üzemmódban a szegmens tényleges kezdőcímének16-oda)
TYPE változó: a változó elemeinek hossza byte-okban
... THIS típus: a program szöveg adott pontján adott típusú szimbólum létrehozása
Pl
ADATB EQU THIS BYTE ;BYTE típusú változó, helyfoglalás nélkül ADATW dw 1234H ;ez az adat ADATB-vel byte-osan érhető el
![Page 118: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/118.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 118/133
118.
definíció esetén:
mov al,BYTE PTR ADATW ;al 34H, helyes
mov al,ADATB ;al
mov ah,ADAT+1 ;ah
4.
LOW változó: egy szó alsó (alacsonyabb helyértékű) byte-ja
HIGH változó: egy szó felső (magasabb helyértékű) byte-ja
5. Multiplikatív műveletek
: szorzás
/ : osztás
MOD: (modulo) a legkisebb nem negatív maradék, pl. mov al,20 MOD 16 ;al
kifejezés SHL lépés: kifejezés bitenkénti léptetése balra lépés bittel
kifejezés SHR lépés: kifejezés bitenkénti léptetése jobbra lépés bittel
A kifejezésben előforduló műveleti jelek (SHL, SHR, és az alacsonyabb prioritású NOT, AND, OR,
és XOR) nem tévesztendők össze a velük azonos alakú műveleti kódokkal: az előbbieket a fordító
program, az utóbbiakat a futó program hajtja végre.
6. Additív műveletek
: összeadás
- : kivonás vagy negatív előjel
7. Relációs operátorok: általában feltételes fordítással kapcsolatban fordúlnak elő
EQ: =
NE:
LT: <
LE: ≤
GT: >
GE: ≥
8. NOT: bitenkénti negálás
9. AND: bitnkénti és művelet
10. Bitenkénti vagy és kizáró vagy művelet
OR: bitenkénti vagy művelet
XOR: bitenkénti kizáró vagy művelet
11. SHORT: 8 bites IP relatív címzés kikényszerítése
![Page 119: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/119.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 119/133
119.
44. Szegmens definíció, szegmens csoport, aktív szegmensek kijelölése, globális szimbólumok
A szegmens definícióban a szegmens egyes szeleteit írhatjuk meg a szegmens kezdő:
sz_név SEGMENT align_type combine_type ’osztály’
és a szegmens vége:
sz_név ENDS
utasítások között.
A sz_név a szegmens (szelet) neve. Ez lehet egyedi név is, de több SEGMENT utasítás előtt is
szerepelhet ugyanaz a név. A fordító az azonos nevű szeleteket úgy tekinti, mintha egyetlen
szegmens szeletbe írtuk volna. Az azonos nevű szeletek paraméterei egy modulon belül nemváltozhatnak.
A szerkesztő egy memória szegmensbe szerekeszti az azonos nevű szegmenseket. A szegmens név és
az osztály tetszés szerinti lehet. Az osztály legtöbbször CODE, DATA, CONSTANT, STACK, MEMORY.
Az align_type (illesztés típusa) azt mondja meg, hogy – amennyiben a szegmens szelet egy már
megkezdett szegmens folytatása, akkor – milyen ”határon” kezdődjön a szelet. Az align_type lehet
BYTE, WORD, DWORD, PARA, PAGE, ami rendre 1-gyel, 2-vel, 4-gyel, 16-tal, és 256-tal osztható címet
jelent.
A combine_type (kombinációs típus) az azonos nevű szegmensek kezelésére vonatkozó üzenet aszerkesztőnek. Lehet:
PUBLIC: (alapértelmezés) – az azonos nevű szegmes szeletek egymás folytatásaként szerkesztődnek
össze.
STACK: a szegmens szelet a stackt részekén szerkesztendő, egyébként megegyezik a PUBLIC-kal.
COMMON: az azonos nevű szegmens szeletek azonos címre szerkesztendők, tehát ugyanarra a
memória tartományra kerülnek. Az így keletkező terület hossza megegyezik a leghosszabb szegmens
szelet hosszával. Így elérhető, hogy ugyanazt a memória területet eltérő beosztás szerint tudjuk
címezni.
MEMORY: a szerkesztő ezt a szegmenst az összes többi szegmens fölé (magasabb címre) fogja
szerkeszteni, mindig a program legmagasabb címre kerülő része.
AT kif : a kif sorszámú paragrafusra kerül a szegmens szelet.
Az assemblert informálnunk kell arról, hogy melyik szegmens regiszter melyik szegmensnek a címét
tartalmazza (melyik szegmensre mutat). Erre szolgál az ASSUME pszeudo utasítás:
ASSUME sz_reg1:sz_név1 * , sz_reg2:sz_név2 . . . +
![Page 120: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/120.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 120/133
120.
Az ASSUME utasításban felsorolt szegmenseket „aktív”-aknak nevezzük. Az utasítás hatása egy-egy
szegmens regiszterre vonatkozóan mindaddig érvényes, amíg egy másik ASSUME utasítással mást
nem mondunk az illető regiszterről.
A GROUP utasítással csoportosíthatjuk a szegmenseket:
G_név GROUP S_név1 * , S_név2 . . . +
Az egy csoportba sorolt szegmensek a memória egy szegmensébe kerülnek. Ha ilyenkor az ASSUME
utasításban a csoport nevét adjuk meg, és ennek megfelelően állítjuk be a bázis regisztert, akkor a
csoport minden szegmensének minden elemére tudunk hivatkozni. Azonban vigyázni kell arra, hogy
pl. egy változó OFFSET- je továbbra is annak a szegmensnek az elejétől számított távolsága, amelyben
a változót definiáltuk, az effektív címe viszont a változónak a szegmens csoport elejétől (a memória
szegmens elejétől) számított távolsága.
Ha egy programot több modulban írunk meg, előfordul, hogy ugyanazt a szimbólumot, (pl. változót,
címkét) több modulból is el akarunk érni. Az ilyen több modulból is elérhető szimbólumokat globális
szimbólumoknak nevezzük.
Ha egy szegmens valamelyik szimbólumát globálissá szeretnénk tenni, akkor PUBLIC-ká kell
nyilvánítanunk annak a modulnak az elején, amelyben a szimbólumot definiáltuk. Ez a PUBLIC
pszeudo utasítással lehetséges:
PUBLIC szimb1 [ , szimb2 . . . ]
Azokban a modulokban, amelyekben más modulban definiált szimbólunokat is használni szeretnénk,
az ilyen szimbólumokat EXTERN-né kell nyilvánítanunk. Mivel az assemblernek a szimbólum típusát isismernie kell, ezért az EXTERN pszeudo utasítás a következő alakú:
EXTERN szimb1:típus1 * , szimb2:típus2 . . . +
A globális szimbólumok lehetővé teszik, hogy a programokat modulokra bontva készítsük el. Az egyes
blokkok közötti kapcsolatot a globális szimbólumok jelentik.
![Page 121: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/121.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 121/133
121.
45. Egyszerûsített lexikális elemzõ
Fordítóprogramokban szokásos, hogy a lefordítandó programot olyan elemzésnek vetik alá,
amely felismeri a programban elõforduló nyelvi elemeket (kulcsszavak, azonosítók, …), és ez alapján a
fordítás további részéhez átalakítja a program szövegét. Ezt a feladatot a lexikális elemzõ végzi.
Most egy rendkívüli mértékben leegyszerûsített lexikális elemzõ programját láthatjuk. Az
elemzõnek legyen az a feladata, hogy felismerje a szövegben elõforduló azonosítókat, számokat,
speciális jeleket és a program vége jelet, és ezek elõfordulását rendre A, 0, , és . karaktert írjon a
képernyõre. Az esetleges hibákat ? jelezze.
A programot az adatszegmenssel kezdjük. A lehetséges szintaktikus helyzetekhez ugró
táblákat definiálunk. Az ugró táblához igazodva átkódoló táblát készítünk.
DATA segment para public 'DATA'
;ugró táblák a szintaktikus helyzetnek megfelelõen:
;kezdetben, speciális és hibás karakter után
t_S dw hiba ;hibás karakter: ;áttérés speciális jel szintre
dw lev_a ;betû
dw lev_n ;számjegy
dw lev_s ;speciális jel dw vege ;szöveg vége: program vége
;azonosító szint t_a dw hiba ;hibás karakter:
dw OK ;betû:nincs teendõ
dw OK ;számjegy:nincs teendõ
dw lev_s ;speciális jel, azonosító vége
dw vege ;szöveg vége: program vége
;szám szint t_n dw hiba ;hibás karakter:
;áttérés spec. jel szintre
dw hiba ;betû:hiba, ;áttérés spec. jel szintre
dw OK ;számjegy:nincs teendõ
dw lev_s ;speciális jel: szám vége
level dw ? ;ide kerül az aktuális ugrótábla címe
c_h db 0 ;hibás karakter kódja
c_b db 2 ;betû kódja
c_n db 4 ;számjegy kódja
c_s db 6 ;speciális jel kódja
c_v db 8 ;végjel kódja
![Page 122: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/122.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 122/133
122.
specjel db ' ,.;+-()',13,10 ;a speciális jelek
vegjel db '$' ;vége jel, kihasználjuk, hogy itt van!
table db 256 dup (?) ;átkódoló tábla (256 byte)
text db 'a,tz,fe&a 21 a12; 12a $' ;elemzendõ szöveg
DATA ends
;==============================================================
CODE segment para public 'CODE'
assume CS:code, DS:DATA, ES:DATA, SS:STACK
Lex proc far
push ds
xor ax,ax
push ax
mov ax,DATA
mov ds,axmov es,ax ;assume miatt
call prepare ;az átkódoló elkészítése
mov si,offset text ;az elemzendõ szöveg kezdõcíme
call parsing ;elemzés
ret ;vissza az Op. rendszerhez
Lex endp
;--------------------------------------------------------------prepare proc ;az átkódoló tábla elkészítése
;az eljárás rontja AX, BX, CX, DI, SI tartalmát, ezért elmentjük a verembe
push AX
push BX
push CX
push DI
push SI
cld ;a string mûveletek iránya pozitív
mov bx, offset table
mov di,bxmov al,c_h ;hibás karakter kódja
mov cx,256 ;a tábla hossza
REP stos table ;table <= minden karakter hibás
mov al,c_b ;betû kódja
mov di,'A' ;az elsõ nagybetû ASCII kódja
add di,bx ;az A betû helyének offset címe
mov cx,'Z'-'A'+1 ;a nagybetûk száma
;kihasználjuk, hogy a betûk ASCII kódja folyamatos
REP stosb
![Page 123: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/123.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 123/133
123.
mov di,'a' ;az elsõ kisbetû ASCII kódja
add di,bx ;az a betû helyének offset címe
mov cx,'z'-'a'+1 ;a kisbetûk száma
REP stosb
mov al,c_nmov di,'0' ;az elsõ nagybetû ASCII kódja
add di,bx ;az 0 helyének offset címe
mov cx,'9'-'0'+1 ;a számjegyek száma
;kihasználjuk, hogy a számjegyek ASCII kódja folyamatos
REP stosb
mov si,offset specjel ;speciális jelek feldolgozása
xor ah,ah ;ki fogjuk használni, hogy AX=AL
pr1: lods specjel ;speciális jelek olvasása
mov di,axcmp al,vegjel ;vegjel közvetlenül a speciális jelek után!
je pr2;az már végjel mov al,c_s ;speciális karakter kódja
mov [BX+DI],al ;elhelyezés a táblában
loop pr1 ;ciklus vége
pr2: mov al,c_v ;a végjel kódja
mov [BX+DI],al ;elhelyezés a táblában
;a regiszterek visszamentése
pop SIpop DI
pop CX
pop BX
pop AX
ret
prepare endp
;-------------------------------------------------------------------
parsing proc ;elemzés
push AX
push BX
push CXpush DI
push SI
cld ;a string mûveletek irány pozitív
mov bx,offset table
mov di,offset t_s ;kezdetben is spec. jel szint
lv1: mov level,di ;szint beállítás
xor ah,ah ;kihasználjuk hogy AX=AL
OK: lods text ;a következõ karakter
XLAT ;AL <= 0, 2, 4, 6 vagy 8
mov di,level ;DI <=az akt. ugrótábla címe add di,ax ;di <= a megfelelõ elem címe
jmp [DI] ;kapcsolódó utasítás
![Page 124: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/124.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 124/133
124.
hiba: mov di,offset t_s ;hibás karakter, spec. jel szint
mov al,'?'
lv2: mov ah,14 ;BIOS hívás elõkészítése
int 10h ;BIOS hívás: karakter írás a képernyõre
jmp lv1
lev_a: mov di,offset t_a ;azonosító kezdõdik
mov al,'A'
jmp lv2
lev_na: mov di,offset t_n ;szám kezdõdik
mov al,'0'
jmp lv2
lev_s: mov di,offset t_s ;speciális jel
mov al,',' jmp lv2
vege: mov al,'.'
mov ah,14 ;BIOS hívás elõkészítése
int 10h ;BIOS hívás, karakter kiírása képernyõre
ret ;elemzés vége, vissza a hívóhoz
pop SI
pop DI
pop CX
pop BX
pop AX
parsing endp
;------------------------------------------------------------------
CODE ends
;==================================================================
STACK segment para stack 'STACK'
dw 100 dup (?) ;100 word legyen a verem
STACK ends
end Lex ;modul vége, start cím: Lex
![Page 125: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/125.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 125/133
125.
46. Két menetes assembler fordító
Az assembly nyelvű programok egysoros utasításokból állnak, így természetesnek tűnik az
elgondolás, hogy az assembler az utasításonként lefordított gépi nyelvű kódot egy fájlba helyezze el,
a megfelelő listarészeket pedig (ha van ilyen) egy másik fájlba. Azonban ez különböző nehézségekbe
ütközik, és így nem megvalósítható.
Egy ilyen lehetséges probléma az előre hivatkozási probléma. Ez akkor lép fel, amikor egy
olyan L szimbólumra hivatkozunk, amelyet eddig még nem definiáltunk (pl egy címke, amely a
program végére ugrik, így a definíció a program végéhez van közel). Így az assembler nem ismeri a
szimbólum címét.
Ezt a problémát két módon lehet lekezelni:
Az assembler a forrásprogramot kétszer olvassa. Egy olvasási folyamatot menetnek
nevezünk. A fordítók, amelyek kétszer olvassák a forrásprogramot, a kétmenetes fordítók.
Az assembler a programot csak egyszer olvassa, és egy közbülső formába transzformálja, eztpedig memória egy táblázatába helyezi. Csinál egy második menetet is, de ez már atáblázaton megy végig. Így B/K idő takarítható meg. Ha van listaigény, az egész forráskódottárolni kell a megjegyzésekkel együtt.
A kétmenetes fordítók működése:
Első menet:
Ennek fő feladata az ún. Szimbólumtábla felépítése, amely tartalmazza az összes szimbólum
értékét. Egy szimbolikus névnek értékül adható címke vagy konstans. A fordítás alatt létezik egy
utasításszámláló nevű változó, amely nyomon követi annak az utasításnak a futtatáskori címét,
amelyet éppen fordít. Az első menet kezdetekor ez 0, utána pedig minden utasítás feldolgozásakor az
utasítás hosszával növekszik.
Az első menetben legalább 3 táblázat jön létre: Szimbólumtábla, pszeudoutasítások táblázata
és a műveleti kódtábla. Esetleg még egy konstans táblázat.
A szimbólumtábla tartalmazza a szimbólumot(vagy egy mutatót rá), a numerikus értéket,
valamint egyéb információkat(a szimbólumhoz tartozó adatmező hossza; áthelyezési bitek=>változik-
e a szim. étéke, ha a progi más cimre töltődik be, mint az assembler feltételezi;vajon elérhető-e aszimbólum más eljárásból?)
A szimbólumtábla az asszociatív memória működését szimulálja: A szimbólum ismeretében megadja
a hozzá tartozó értéket.
A szimbólumtábla lehet tömbös felépítésű, a párok első komponense a szimbólum, a második pedig
az érték(vagy az ezekre mutató mutató). A szimbólumtáblában kereshetünk lineárisan(egyszerű, de
lassú módszer, az elemeket át kell vizsgálni sorban egyenként, amig meg nem lesz a keresett
szimbólum), és bináris keresőalgoritmus segítségével, ha a tömb rendezett. Ilyenkor megnézzük a
középső elemét, ha az a keresett elem, vége a keresésnek, ha ennél nagyobb, akkor a felső fél
![Page 126: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/126.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 126/133
126.
táblázatban csináljuk ugyanezt, ha kisebb, az alsóban (mindig a középső értéket nézzük meg először).
Így a legrosszabb esetben log2n lépésre van szükség n elem esetén.
Az asszociatív memória szimulálásának teljesen más módja a tördelő kódolási módszer.
A művelettábla nyit egy bejegyzést minden mnemonic (szimbolikus műveletkód) részére. Abejegyzésnek (vegyük úgy, mint egy táblázat egy sora) a következő mezői vannak (a tábláza oszlopai):
szimbolikus kód, a két operandus, az utasítás hossza, és egy típusszám(operandusaik szerint
csoportosítja az utasításokat). Pl.:
Müv.Kód Első op Második op Müv.Kód Hexában Hossz Típusszám
ADD EAX immed32 05 5 4
Egyes assemblerek lehetővé teszik a közvetlen címzés használatát. Ilyenkor az assembler
automatikusan memóriát foglal a konstansnak. Ezeket a konstansokat literáloknak nevezzük. Az első
menetben az összes literálból táblázat készül. A fordító minden literált felvesz ide, de a menet végénaz ismétlődőeket kitörli.
Második menet:
Ennek feldata a tárgyprogram előállítása és lehetőleg a fordítási lista kinyomtatása. Itt jön
létre a .obj fájl. A második menet kiad még néhány információt, amelyekre a szerkesztőnek lesz
szüksége a későbbiekben.
Ez is egyesével olvassa a sorokat és dolgozza fel azokat. Egy sor egy -egy utasítás, amely a
típusára, a műveleti kódra és a hosszra vonatkozó információval kezdődik (az ideiglenes fájlban), így a
második menet ezt egyszerûen beolvassa, nem kell elemezgetnie. Az utasításhoz generált bináris
kódot a code váltózóban adja vissza, amely aztán kiírásra kerül, és az utasítások bináris kódjaiból
létrejön az object file. Ez hexadecimális alakú.
A forrasprogramban azonban hibák is előfordulhatnak. Az egyszerûbbeket, mint például az
elgépelésből eredő definálatlan szimbólumok, az assembler megpróbálja kijavítani a hozzá legjobban
hasonlító szimbólum használatával. Azonban általában a fordítóprogram tehetetlen a legtöbb hibával
szemben. Pl.
Még nem definiált szimbólum alkalmazása
Többszörösen definiált szimbólum alkalmazása A műveleti kódmezőben lévő kód nem megendegett műveleti kód
A műveleti kódnak túl kevés vagy túl sok operandus van megadva
Egy oktális számban előfordul pl. a 9-es számjegy
Jogtalan regiszterhasználat Hiányzó END utasítás
![Page 127: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/127.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 127/133
127.
47. Az include utasítás. Az include utasítás feldolgozása a fordítássorán.
Az assembler képes kezelni a több fájlra darabolt programokat is, a nyomkövetővel történő
használathoz az egész programnak egyetlen, egy „$” kiterjesztéssel rendelkező fá jlban kellelhelyezkedni. Ezen belül fájlok beillesztését a #include fájlnév paranccsal lehet kérni. Ebben az
esetben a kívánt fájl szintén a kombinált „$” fájlba íródik a kérés helyétől kezdődően. Az assembler
ellenőrzi, hogy a beillesztendő fájlt már feldolgozta-e, és csak egy példányt tölt be. Ez különösen
hasznos, ha több fájl ugyanazokat a fejlécfájlokat használja. Ilyenkor a kombinált forrásfájlba csak egy
példány kerül beillesztésre. A fájl beillesztéséhez szükséges, hogy a #include a sor első tokenje legyen
vezető szóközök nélkül, a fájl útvonalát pedig idézőjelek között kell megadnunk.
Ha csak egyetlen forrásfájlunk van, mondjuk a pr.s, akkor feltételezzük, hogy a projekt neve
pr, a kombinált fájl pedig a pr.$ lesz. Ha egynél több forrásfájlunk van, akkor az assembler az első fájl
nevének tövét tekinti a projekt nevének, és használja a .$ fájl definiálásához, amelyet utána aforrásfájlok összemásolásával állít elő. Ez a viselkedés felülbírálható a parancssoron az első forrásfájl
megadását megelőzően megadott „-o projname” kapcsolóval, amikor is a kombinált fájl a projname.$
lesz.
Megjegyezzük azonban, hogy a beillesztett fájlok, és egynél több forrásfájl használatánakvannak hátrányai is. A címkéknek, változóknak és konstansoknak az összes forrásban különbözőnekkell lenni. Ezen kívül, a ténylegesen fordításra kerülő fájl a projname.$, tehát arra vonatkoznak azassembler által a hibák és figyelmeztetések jelzésekor kiírt sorszámok. Nagyon kis projektek eseténnéha az a legegyszerűbb, ha az egész programot egyetlen fájlban helyezzük, és elkerüljük a #includehasználatát.
![Page 128: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/128.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 128/133
128.
48. Makró generátor
A makró generátor feladata a makró definíciók megjegyzése (pl. makró táblába helyezése) és
a makró hívások kifejtése. A makró generátor általában az assembler első menetében működik.
Az assembler sorról sorra megy végig a forrásprogramon. Ha eközben makródefiníciót talál (a
műveleti kód részen lévő MACRO szóról ismerhető fel), akkor a makró teljes szövegét (a makró végét
az ENDM szó jelzi) elhelyezi a makró táblában.
Amikor a makró a makrótáblába kerül, az assembler egy különleges jellel megjelöli a formális
paramétereket, ez az & jel. Igy majd a makróhívások során használhatunk paramétereket, amelyekkel
a meghívott makró dolgozni fog.
A makróhívások kifejtése során az assembler felismeri, hogy makrót talált a
forrásprogramban, megkeresi a makrót a makrótáblában, betölti egy pufferbe, majd a puffer
tartalmát beleilleszti a program szövegébe a megfelelő helyre.
A makrókifejtést a következő programrészlet ciklikus ismétlésével lehet illusztrálni:
EgySzoOlvasasaAMakroTorzsbol;
if FormalisParameter then
AmegfeleloSorszamuAktualisParameterAtmasolasa;
else
AszoAtmasolasa;
ElvalasztojelFeldolgozasa;
A makróhívásokkor jelentős probléma, hogy a makrón belüli címkék minden makróhíváskor
megjelennek a programban, és ezáltal címkeduplázódás (triplázódas stb, szóval ismétlés) jön létre,
ami fordítási hibát eredményez. Ezért a makrók fejléce után, a címke neve elé oda kell irni a LOCALpszeudoutasítást (a pszeudoutasítások egy másik tétel témaját képezik), ezzel azt érjük el, hogy a
makrógenerátor a címkét egy '??xxxx' alakú azonosítóval helyettesíti (xxxx változó, egy hexadecimális
szám), és minden szimbólum feldolgozása után a változót (vagyis xxxx-et) 1-gyel növeli. Így nem lép
majd fel címkeismétlés.
![Page 129: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/129.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 129/133
129.
49. Szerkesztő
Különböző operációs rendszerekben a szerkesztő elnevezései: Link, Linker, Linkage Editor,
Linkage Loader, stb. Alapvető feladata, hogy a programhoz tartozó object file-okat (modulokat)
egyetlen futtatható file-ba, a load modulba szerkessze. Eközben 4 feladatot kell megoldania:
az azonos nevű és osztályú szegmens-szeletek egymáshoz illesztése a szegmens-szeletek
definíciójában megadott módon,
a GROUP pszeudo utasítással egy csoportba sorolt szegmensek egymás után helyezése,
a relokációk elvégzése,
a külső hivatkozások (extern) feloldása.
A szerkesztő két menetben dolgozik: az első menetben táblázatokat készít, a második
menetben a táblázatokba elhelyezett információk alapján elvégzi a szerkesztést. Az egyik táblázat a
szegmens-szeletekre vonatkozó térkép (map), a másik a globális szimbólumok táblázata.
Az első menetben a szerkesztő beolvassa az összeszerkesztendő modulokat és közben kitölti
a map-et a kezdőcím és a relokációs konstans kivételével. Az összes modul beolvasása után a kívánt
szempontok (szegmens név, osztály, kombinációs típus, és a szerkesztő opcióiban előírt szempontok)
szerint rendezi a táblázat sorait, majd a kezdőcím és a relokációs konstans rovatot is ki tudja tölteni.
A legelső kezdőcím az operációs rendszertől függ (betöltési cím). Az egyes szegmens-szeleteknek és a
szegmens első szeletének a kezdőcíme közötti különbség lesz a relokációs konstans. Ezt az illető
szegmens-szeletben definiált szimbólumokra történő hivatkozások esetén hozzá kell adni a fodító
által előállított relokálandó címhez.
A globális szimbólumok kezeléséhez a fordítóprogram minden object modulban információt
ad át a modulban PUBLIC-ká és EXTERN-né nyilvánított változókról. A szerkesztő az első menetben a
PUBLIC változókból egy közös globális szimbólum táblát készít.
A PUBLIC utasítás nem tartalmazza a típust és a szegmens nevét, de az assembler ismeri, és el
tudja helyezni az object modulban. A modul nevét a szerkesztő is ismeri. A cím a táblázat
összeállításakor még relokálatlan címet jelent. Az első menetben ebben a táblázatban elvégezhető a
relokáció.
Az assembler az EXTERN utasítás alapján újabb táblázatot készít. Az első menetben kigyűjti a
szimbólumokat a hozzájuk tartozó típussal együtt, és ez alapján az első menet végén ellenőrzi, hogy
minden szimbólum előfordul-e közös globális szimbólum táblában. Ha nem, akkor definiálatlan külső
hivatkozások maradtak, ilyenkor az első menet további programkönyvtárbeli modulok hozzávételével
folytatódhat.
A szerkesztő a második menetben a rendezett térkép sorainak megfelelő sorrendben
beolvassa és elhelyezi a szegmens szeleteket, elvégzi a szükséges relokációt és feloldja a külső
hivatkozásokat. Utóbbi feladathoz egy-egy modul betöltésének végén a szerkesztő az EXTERN
szimbólumokat sorra megkeresi a közös public táblában. Ha megtalálta, akkor sorra veszi a
hivatkozásokat, és mindegyik hivatkozáshoz elhelyezi a PUBLIC táblában található címet. Ha az illető
szimbólum nem található meg a közös PUBLIC táblában, akkor „feloldatlan címkonstans” hibajelzést
ad.
![Page 130: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/130.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 130/133
130.
A szerkesztő lehetővé teszi, hogy egy nagyobb programot több modulban, esetleg különböző
programozási nyelveken írjunk meg. Segítségével lehetővé válik, hogy részfeladatok megoldásához
már korábban elkészített object modulokat használjunk fel.
![Page 131: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/131.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 131/133
131.
50. Time sharing (időosztás). binding (cím hozzárendelés),dinamikus szerkesztés
Egy időosztásos (time sharing) rendszerben (nagyobb léptékben nézve) egyidejűleg több
program fut. A program-kiválasztó (scheduler) feladata, hogy gondoskodjon arról, hogy mindegyikprogram elég sűrűn kapjon egy rövid CPU-időt. Egy program elindításakor többek között a következő
feladatokat kell végrehajtani: betöltés, indítás, felfüggesztés, kimentés; a program folytatásakor:
visszamentés, futtatás, felfüggesztés, kimentés. A kimentés – viszamentésre azért van szükség, mert
általában nem biztosítható hogy a visszamentett program a memóriának ugyanarra a területére
kerüljön vissza, ahol korábban futott. Ha pl. a programunk egy JMP L ugró utasítást tartalmaz, akkor
L-hez valamikor hozzá kell rendelnünk a konkrét címet, ez címhozzárendelés (binding).
A címhozzárendelés különböző időpontokban történhet. Ez alapján történhet:
Program írásakor Fordításkor
Szerkesztéskor
Betöltéskor
A címhez használt bázisregiszter kitöltésekor
Utasítás végrehajtásakor
Program írásakor: A számítástechnika kialakulásakor ez volt a helyzet, a programot bináris számokkal
kellett megadni. Manapság ez a módszer már ritka, de a lehetősége fellelhető a szegmens
definicióban alkalmazható AT kifejezés kombinációs típusban.
Fordításkor: Ma már ezt a módszert is igen ritkán alkalmazzák, pl. szintén az AT kifejezés kombinációs
tipussal kapcsolatban, ha a szegmensben szimbolikus címzést használnak. A címhozzárendelés ilyen
módjának a legnagyob hátránya hogy alkalmazása nehézzé, időnként lehetelenné teszi az így
elkészített program részek különböző programokban való felhasználását.
Szerkesztéskor: Ma ez a címhozzárendelás egyik legelterjedtebb módja.
Betöltéskor: Az assembly nem ezt a címhozzárendelési mószert használja. Ha ezt használná , a
programban nem szerepelhetne egyetlen FAR típusú címkonstans se, hiszen ennek az értéke a
betöltés helyétől függ.
A címhez használt bázisregiszter kitöltésekor: Ez a módszer már biztosítja az időosztásos
rendszerben futtatható programok elkészítését. Alkalmazása még komolyabb megszorításokat jelent.
A betöltések esetén is gondoskodni kell a FAR címeket tartalmazó változók helyes értékéről, sőt,
távoli eljárás hívás esetén FAR cím kerül a verembe, és természetesen ezzel is foglalkozni ke ll.
Megfelelően kialakított hardver sokat segíthet a probléma megoldásában.
Az utasítás végrehajtásakor: Ehhez a címhozzárendelést két lépésben valósítják meg, Először a
szimbolikus címzést virtuálissá alakítják, majd ezt fizikai címzéssé. A virtuális címhozzárendelés
történhet pl. szerkesztési időben, a fizikai cím hozzárendelés a lap (page) tábla kitöltésekor, ami
valóban gyakran az utasítás végrehajtásának megkezdése után történik.
![Page 132: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/132.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 132/133
132.
Dinamikus szerkesztés
Előfordulnak olyan nagyméretű programok, amelyekben bizonyos eljárások csak nagyon
ritkán szükségesek. Ha ezeket az eljárásokat is hozzászerkesztjük a programhoz, akkor a program
memóriaigénye nagyon nagy lehet. Ennek elkerülésére szolgál a dinamikus szerkesztés.
A dinamikus szerkesztés egy lehetséges megoldás, hogy a programban létrehozzunk egy
táblázatot (Linkage segment), amely minden esetleg szükséges eljáráshoz egy csatoló blokkot
tartalmaz. Minden blokk elején egy virtuális cím, a további részén az eljárás neve található
karaktersorozat formában. A virtuális cím lehet egy csatolóprogram címe vagy egy lehetetlen cím
(invalid adress). Az utóbbi esetben gondoskodnunk kell arról, hogy a létrejövő megszakítás hatására a
csatoló program kapja meg a vezérlést.
Multics dinamikus szerkesztése: minden programhoz egy úgynevezett kapcsolószegmenst társít,
amiben a hívható eljárások mindegyikének van egy információs blokkja. Az információs blokk elején
egy szó van fenntartva az eljárás virtuális címe számára, ezt az eljárás neve követi, amikarakterláncként tárolt.
A Windows dinamikus szerkesztése: a dinamikus szerkesztéshez egy speciális fájlformátumot
használ, amit DLL-nek (Dynamic Link Library) hívnak. A DLL-ek tartalmazhatnak eljárásokat, adatokat,
vagy mindkettőt. Rendszerint arra használják, hogy lehetőséget biztosítsanak két vagy több folyamat
számára a könyvtár ejárásainak és adatainak megosztott alkalmazására.
A UNIX dinamikus szerkesztése: lényegében hasonló a Windows DLL-es koncepciójához. Az általa
használt speciális fájlt megosztott könyvtárnak hívják. Egy megosztott könyvtár, a DLL fájlhoz
hasonlóan egy archivált fájl, ami megosztott eljárásokat vagy adatmodulokat tartalmaz, amelyek
futási időben vannk jelen a memóriában és a folyamatok számára egyidejűleg elérhetők.
![Page 133: szar_tetelek](https://reader031.vdocuments.pub/reader031/viewer/2022020803/5571fe3049795991699ad351/html5/thumbnails/133.jpg)
5/12/2018 szar_tetelek - slidepdf.com
http://slidepdf.com/reader/full/szartetelek 133/133
51. Programok hangolása
Programhangoláson azt a folyamatot értjük, amikor megállapítjuk a kritikus programrészeket,
és ezek gyorsításával az egész program futását felgyorsítjuk. Bizonyított tény, hogy a nagyobb
programokban a program 1%-a felelős a program futási idejének kb. 50%-áért, 10%-a pedig a 90%-áért. A legritkább esetben célszerű egy feladatot teljes egészében assemblyben programozni, de ha a
program gyakran fut, akkor célszerű lehet a hangolás során bizonyos részeket assemblybe átírni.
A kritikus részek felderítésére használható a következő módszer. Miközben a hangolandó
programot nagy méretű feladaton vagy feladatokon futtatjuk, rövid, véletlen időnként, időzítés
szerinti megszakításokat kérünk. A megszakítások címét egy file-ban rögzítjük. Később a
megszakítások címét és a szerkesztő által összeállított memóriatérképet összevetve,
megállapíthatjuk, hogy mely eljárásokban történt a legtöbb megszakítás, ezekben az eljárásokban
tartózkodott legtöbbet a program. Ezeket az eljárásokat, eljárás részeket kell felgyorsítani pl.
Assembly betétekkel, vagy az egész eljárás assemblybe való átírásával.
A programhangolás hatásának szemléltetésére tételezzük fel, hogy ugyanannak a feladatnak
a megoldásához assemblyben 5-ször annyi utasításra (és időre) van szükség, mint probléma orientált
nyelv esetén, és az elkészült program 3-szor olyan gyors. A probléma orientált nyelven készült
változatának kritikus 10%-át assemblyben újraprogramozzuk. Egy kis számolás után beláthatjuk, hogy
a program problémaorientált nyelven történő elkészítésének és hangolásának ideje (és költsége) kb.
harmada annak, mintha az egészet assemblyben készítenénk, ugyanakkor a sebessége csak 20%-al
lassabb.