• Nem Talált Eredményt

A processzorok utasításkészlete, utasítás-végrehajtása és műveleti vezérlése

In document Informatikai alapok (Pldal 108-113)

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

4.3.5. A processzorok utasításkészlete, utasítás-végrehajtása és műveleti vezérlése

„Egy processzor utasításkészlete alatt értjük azoknak az elemi (gépi kódú) utasításoknak az összességét, amelyek végrehajtására legalsó, hardverszinten a processzor alkalmas.

Ez az a szint, amit adott esetben egy programozó felhasználhat, vagy amelyre a fordítóprogram egy programot lefordít. Ebből a szempontból a legalsó szint azt jelenti, hogy egy utasítás

105 SDRAM: Synchronous Dynamic Random Access Memory, szinkron dinamikus tetszőleges hozzáférésű memória. Szinkron interfésze által vár az órajelre, mielőtt válaszolna a vezérlő információkra, ahol már szinkronizált a sínrendszerrel.

109 végrehajtása vagy »huzalozott« módon, áramköri szinten valósul meg, vagy az elemi lépéseket vezérlő mikroporgram segítségével” [5].

Az utasításkészletben funkcionális feladatuk szerint három főbb utasítástípust különböztethetünk meg:

adatátviteli, adatmozgató utasítások,

művelet-végrehajtó utasítások,

vezérlő utasítások.

Az utasítások többsége a soros utasítás-végrehajtást nem befolyásolja. A vezérlő utasítások egy részénél (például ugróutasítások, feltételes elágazások) az utasítás-végrehajtás nem a következő utasítással folytatódik.

Utasításszerkezet alatt az elemi szintű gépi kódú utasításoknak a processzor által közvetlenül értelmezhető utasítások felépítését értjük. Az utasításszerkezet határozza meg a processzor számára, hogy a bináris értékekkel megadott utasítás részeit hogyan értelmezze. Az utasításszerkezet leglényegesebb részei (lásd 4.22. ábra):

 Műveleti jelrész (opcode, műveleti kód): meghatározza a processzor által végrehajtandó műveletet.

 Operandus-hivatkozások: megadják a művelet végrehajtásához az operandusok helyét, illetve azt az értéket, amellyel el kell végezni az utasítást.

 Kiegészítő rész (módosító rész): kiegészítő információk a műveleti jelrész, illetve az operandus-hivatkozások pontos értelmezéséhez.

Műveleti jelrész Kiegészítő rész Operandus-hivatkozások 4.22. ábra: A számítógépes utasítások elvi felépítése

Az Intel IA-32 és IA-64 és például az AMD, a DEC VAX processzorok ún. CISC (Complex Instructions Set Computer, komplex utasításkészletű számítógép) architektúrájúak.

Fejlesztésüknél megfigyelhető, hogy a szoftverfejlesztők igényeinek megfelelően bővítik az utasításkészletüket. Címzési módjaik és utasításszerkezetük bár átlátható, de változatos. Az utasítások végrehajtása mikroprogram-vezérelt módon történik. Ez azt jelenti, hogy az egyes gépi utasítások végrehajtásának elemi fázisait egy ún. mikroprogram hajtja végre, amelynek mikroutasításai a gép egyes pontjainak állapotát állítják be. Az egyes gépi utasításokat megvalósító mikroprogramokat egy csak olvasható memóriában (Read Only Memory, ROM), a mikroprogram tárban tárolják.

Ezen az úton fejlődve, a CISC processzorok mikroprogram-vezérelt utasítás-végrehajtása a számítógépek teljesítmény növelésének komoly korlátjává vált az 1970-es évek végére. Ezért olyan architektúrát terveztek, amelyben csak a gyakori utasítások szerepeltek. Továbbá az utasítások szerkezete és hossza megegyezett, végrehajtásukhoz egy-egy gépi ciklusra volt csak szükség. Ezzel kiküszöbölhették a mikroprogramszintet, és a magas szintű programnyelvekről a fordítás a korábbi mikroutasítások szintjére történhetett. Ezért és így alakultak ki a RISC (Reduced Instructions Set Computer, redukált/csökkentett utasításkészletű számítógép) architektúrák.

Ennek a fejlesztési tervezési stratégiának megfelelő processzorok első képviselőinek, az 1980-as évek elején a University of Berkeley-n fejlesztett RISC I, RISC II, illetve a Stanford University-n kifejlesztett MIPS processzorok tekinthetők.

110 A fent vázolt éles különbségek ma már elhalványulnak a CISC és a RISC utasításkészletű processzorok között. Az Intelnél ez elsőként a Pentium Pro-ban valósult meg 1995-ben. Például a CISC-ek RISC elvekre épülő magot használnak; a CISC utasításokat RISC-szerű elemi utasításokká bontják, és azokat cache-ben (gyorsítótárban) tárolják végrehajtás előtt. Továbbá, a modern CISC-ekben is erőteljes a pipelining, szintén nagy regisztertárakat használnak, és jellemző az utasítások lehetőleg 1 órajel alatti végrehajtása, sőt a szuperskalárosság miatt esetenként több utasítás végrehajtása 1 órajel alatt. Tehát ezek a processzorok ma már csak kívülről, a programozó számára, utasítás-architektúrát tekintve (Instruction Set Architecture, ISA) ek. Másik oldalról a RISC processzorok is gyakran rendelkeznek a tisztán CISC-eknél felsorolható jellemzőkkel.

A RISC elvet a mikrokontrollerek tervezésénél is kihasználják. Napjainkban a beágyazott 32 bites RISC processzorok kb. 75%-a az ARM családból származik. Beépítik a hordozható eszközökbe: PDA-kba, mobiltelefonokba, médialejátszókba, kézi számítógépkonzolokba és számológépekbe; számítógép-perifériákba: merevlemezekbe, asztali routerekbe stb.

A műveleti vezérlés a gépi utasítások elemi lépéseinek ciklusonkénti végrehajtásához a számítógép összes, a művelet-végrehajtáshoz szükséges hardver-részegységének a gépi utasítás alapján történő összehangolt irányítását jelenti. A processzor vezérlőegysége (Control Unit, CU) végzi vezérlőjeleken keresztül. Az elemi lépések ütemezése csak az órajelnek megfelelően történhet (lásd 4.23. ábra).

4.23. ábra. A számítógép gépi ciklusa (Kovács, Knapp, Ágoston, & Budai, Bevezetés a számítástechnikába, Budapest, LSI Oktatóközpont, 1999, p. 362)

A műveleti vezérlés megértéséhez tekintsük át az utasítások végrehajtásának elemi lépéseit nagyvonalakban:

1.lépés: Utasítás-előkészítés. A processzor az utasításszámláló (PC) tartalma alapján letölti az főtárból az utasítást és átmenetileg eltárolja a vezérlőegység utasításregiszterében (IR).

2.lépés: PC tartalmának növelése. A PC tartalmához hardveráramköri úton hozzáadásra kerül az aktuálisan végrehajtandó utasítás hossza – most már a következő végrehajtandó utasítás címét tartalmazza.

3.lépés: Utasítás dekódolása. A műveleti kód értelmezése, az utasítás végrehajtásához szükséges operandusok címének meghatározása.

4.lépés: Operandusok előkészítése. A művelet végrehajtásához szükséges adatok kiolvasása a főtárból.

5.lépés: Műveletvégzés. A dekódoláskor értelmezett művelet végrehajtása az előkészített operandusokkal. Vezérlésátadó utasítás végrehajtásakor ebben a lépésben a következő utasítás címét írja be a processzor a PC-be.

111 6.lépés: Eredmény kiírása. A művelet eredményét a processzor beírja az utasításban előírt tárolóhelyre.

A fenti lépések további részekre bomlanak még fel, elemi lépésekre, amelyek órajelciklusonkénti végrehajtása az áramköri megvalósítás szintjén lehetővé teszik az adatútvonalak vezérlési pontokon keresztüli megnyitását, lezárását és állapotjelzők beállítását stb. (lásd 4.24. ábra). Mindezek együttesen képezik a számítógép műveleti vezérlését.

PC = utasításszámláló regiszter, IR = utasításregiszter, OP = műveleti kód, AC = akkumulátor, MAR = memória-címregiszter, MDR = memória-adatregiszter,

PAR = periféria-címregiszter, PDR = periféria-adatregiszter

4.24. ábra. Az adatútvonalak lépésenkénti – az órajel ütemében történő – nyitása, zárása vezérlési pontokon keresztül valósul meg [7]

A műveleti vezérlést a számítógépekben kétféleképpen lehet megoldani:

 Huzalozott módon: hardveráramkörökkel, amelyek a processzorba beépítve irányítják a művelet-végrehajtás ciklusonkénti elemi lépéseit. Ezt kombinációs, illetve sorrendi áramkörökkel valósítják meg, amelyek legtöbbször ún. programozható logikai áramkörök (Programmable Logic Array, PLA). Ez a megoldás a RISC processzorokra jellemző.

 Mikroprogramozott módon: az utasítás-végrehajtás ciklusonkénti elemi lépéseit a vezérlőegységhez tartozó ROM tárolóban található mikroprogramok vezérlik. A gépi kódú utasítások műveleti jelrésze dekódoláskor egy-egy mikroprogram lefutását indítja el. A mikroprogram-utasításokat végrehajtva történik az utasítás elemi lépéseinek vezérlése. Ez a megoldás a CISC processzorokban alkalmazott.

112 4.3.6. Utasítás végrehajtás gyorsítása

A modern processzorok teljesítmény-növelésének egyik módja minden részegységének, áramkörének folyamatosan hasznos munkára fogása. Erre az egyik elterjedt megoldás az utasítások soros végrehajtása helyett a párhuzamos végrehajtásuk. Ennek alapja, hogy a gépi utasítások végrehajtásának elemi lépései/fázisai a processzor más-más részegységét veszik igénybe.

Legegyszerűbb esetben az utasítás-végrehajtás három lépésre/végrehajtó egységre bontható:

 Fetch: utasításlehívás. A sínvezérlő logika végzi. Az IP által mutatott memóriacímről az IR-be kerül a soron következő utasítás.

 Decode: dekódolás. A CU értelmezi az utasítást, meghatározza az operandusok címét, valamint azt, hogy mely áramköröket kell nyitni-zárni az utasítás végrehajtásához.

 Execute: végrehajtás. Az ALU elvégzi az utasításban előírt műveletet.

Az esetek egy részében miután a processzor fenti részegységei végeztek egy-egy utasítás kapcsán a munkájukkal, rátérhetnek a következő utasítás ugyanezen részfeladatának a végrehajtására. Ez eredményezi a pipeline, vagy átlapolt utasításfeldolgozást (csővonal, adatcsatornás, futószalag-utasításfeldolgozást).

Öt utasítás három lépésben való soros végrehajtása 5 3 15 ciklusnyi időt igényel, ahogy 4.25. ábra mutatja.

ciklus 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 lépés F1 D1 E1 F2 D2 E2 F3 D3 E3 F4 D4 E4 F5 D5 E5

4.25. ábra. Öt utasítás soros végrehajtása [3]

Az öt utasítást átlapolt, pipeline szervezéssel végrehajtva, viszont csak 5 2 7 ciklusnyit igényel, ahogy 4.26. ábra szemlélteti.

ciklus 1 2 3 4 5 6 7

4.26. ábra. Öt utasítás átlapolt, párhuzamos végrehajtása [3]

Általában az mondható, hogy ha az utasítások száma magas, például 100 000, akkor a soros utastás-végrehajtás 100 000 3 300 000 ciklusával szemben a pipeline utasítás-végrehajtáshoz csak 100 000 2 100 002, vagyis egyharmadnyi ciklusidő szükséges.

Az i8088 az utasítássorral alakít ki egyfajta pipeline-t (lásd 4.14. ábra).

Az utasítások végrehajtása több lépésre is felbontható, például utasítás lehívása, dekódolása, operandusok címszámítása és lehívása, műveletvégzés, eredmény utasításban megadott helyre írása. A fejlettebb processzorokban esetenként igen mély (sok fázísú) utasítás-végrehajtási pipeline-t alkalmaznak. A pipeline utasítás-feldolgozást alkalmazó CPU-kat utasításszinten párhuzamos működésű (Intruction Level Parallel, ILP) processzoroknak nevezzük.

113 A magonkénti műveletvégző egységek számának növelésével a pipelie-nok egymás mellett működnek, esetenként egy gépi ciklus alatt több utasítást végrehajtva. Ez utóbbi processzorokat szuperskalár processzoroknak nevezzük. A több pipeline működésének feltétele, hogy a CPU műveletvégző egységeihez párhuzamos működésre képes belső adatutak, buszok is rendelkezésre álljanak.

A pipeline feldolgozásnál az ugyanahhoz a programhoz tartozó utasítások végrehajtása alapvetően soros, átlapolt módon történik, míg a szuperskalár feldolgozásnál az ugyanazon programhoz tartozó utasítások sorából kiválasztott 2-4 egymástól független utasítás egyidejű, párhuzamos végrehajtása történik különböző műveletvégző egységeken.

4.4. Adatátvitel a számítógép és a csatlakoztatott perifériák között

In document Informatikai alapok (Pldal 108-113)