Gábor Dénes Főiskola Győr Mikroszámítógépek Előadás vázlat 102 2004/2005 tanév 4. szemeszter
A PROCESSZOR
A processzorok jellemzése A processzor felépítése A processzorok üzemmódjai Regiszterkészlet Utasításfelépítés, utasításkészlet Utasításvégrehajtás Memóriakezelés Megszakítások, kivételek 14:33:29
A processzor részei, kapcsolatuk A legfontosabb architektúrális építőelemek: vezérlőegység (CU = Control Unit) aritmetikai (logikai) egység (ALU = Arithmetical and Logical Unit), regisztertárolók, sínillesztő egység (BIU = Bus Interface Unit), címszámító és védelmi egység (AU = Adress Unit), belső gyorsító tár (L1 cache), az előző részegységek kommunikációját biztosító eszközök (mikroszámítógépeknél a belső sínrendszer). 14:33:29
A processzor vázlatos felépítése Belső sínrendszer AU ALU CU Külső sínrendszer BIU Címszámítás Vezérlés regiszterei regiszterei MűveletvégrehajL1 cache tás regiszterei 14:33:29
A processzor üzemmódok A processzorok különböző üzemmódjaira, állapotaik megkülönböztetésére lényegében: védelmi szempontból, a programfolyamatok biztonságos működtetése miatt, az operációs rendszer és a felhasználói programok működtetésének elkülönítése miatt (például hibakezelésnél), a korábbi processzorokkal való bináris programkompatibilitás megtartása miatt van szükség. 14:33:29
A processzor üzemmódok A Pentium processzorok négy üzemmódjai: Valós Védett Védett valós Rendszermenedzselő (SMM) üzemmód 14:33:30
Regiszterkészlet A processzor regisztereinek csoportosítása: Rendszerregiszterek Intruction Register Program Counter Speciális célú regiszterek Flag Register Stack Pointer Általános célú regiszterek Akkumulátor regiszter Szegmensregiszterek 14:33:30
Regiszterkészlet A processzor regisztereinek csoportosítása: Címző regiszterek EBP, ESP, ESI, EDX Szegmensregiszterek CS, DS, ES, SS, FE, GS Utasítászámláló regiszter EIP Állapotjelző regiszter EFLAGS Általános célú regiszterek EAX, EBX, ECX, EDX 14:33:30
Utasításkészlet, utasításszerkezet Utasításszerkezet alatt az elemi szintű (gépi kódú), a processzor által értelmezhető utasítások felépítését értjük. Ez határozza meg a processzor számára, hogy a gépi utasítások egyes részeit hogyan értelmezze. Részei: műveleti kód, operandusok, kiegészítő (módosító) rész. Egy processzor utasításkészlete alatt azoknak az elemi szintű gépi kódú utasításoknak az összességét értjük, melyek végrehajtására a processzor a legalsó, hardver szinten képes. Ez az a szint, amelyre a fordítóprogram a különböző programnyelveken megírt programokat lefordítja. 14:33:30
Utasításkészlet Az utasításkészlet jóságára nem lehet egzakt megfogalmazást tenni, néhány szempont: Minden utasítás azonos módon működjön. Az eszközöket azonos módon használják. Az utasítások egyes részei mindig ugyanúgy kerüljenek feldolgozás alá. Minden utasítás bármely címzési módot használhassa. Többféle megoldhatóság esetén kivitelezhető legyen mindegyik. Az utasítások egyszerűek legyenek. 14:33:30
Utasításszerkezet Az utasításszerkezet eltérő az különböző processzoroknál. Megszabja, hogy a CPU az utasítás mely részét hogyan tudja értelmezni. Az utasítások rendszerint három részből állnak: Műveleti jelrész az elvégzendő feladatot határozza meg. Címrész az operandusok memóriabeli címét adja meg. Kiegészítő vagy módosító rész a műveleti jelrész vagy a címrész értelmezését módosíthatja. Műveleti jelrész Mód. rész Címrész 14:33:30
Utasításszerkezet II A program futása közben rendszerint a processzornak négy címre van szüksége: Az első operandus címére A második operandus címére Az eredmény címére Soronkövetkező utasítás címére Attól függően, hogy az utasítás címrésze hány címet tartalmaz, beszélhetünk négy-, három-, kettő-, egy- és nullcímes utasításokról. 14:33:30
Utasításszerkezet III A legbonyolultabb a 4-címes utasítás: Műveleti jelrész 1. operandus címe 2. operandus címe Eredmény címe Köv. utasítás címe A 3 címes utasításszerkezethez be kell vezetni a programszámláló regisztert, ami a következő ut. címét tart. Műveleti 1. operandus 2. operandus Eredmény jelrész címe címe címe A 2 címes utasításszerkezet során az eredményt a 2. operandus helyén fogjuk tárolni. Műveleti jelrész 1. operandus címe 2. operandus + eredmény címe 14:33:30
Utasításszerkezet IV Az 1-címes utasításhoz be kell vezetnünk az akkumulátor regisztert, amely a 2. operandus címét tartalmazza.az eredmény is ide kerül. Műveleti jelrész 1. operandus címe A veremtároló használatával elhagyható az operandus címe, így kapjuk az ún. 0-címes utasításokat. Műveleti jelrész 14:33:30
Adatátviteli utasítások Az adatátviteli utasításokkal különböző tárolók között lehet mozgatni, másolni az adatokat memória, regiszter memória, regiszter (MOVE) memória háttértárolók, perifériák (IN, OUT) regiszter, memória verem (POP, PUSH). 14:33:30
Műveleti utasítások aritmetikai utasítások (ADD, SUB, MUL, DIV stb.), logikai utasítások (AND, OR, XOR stb.), bitléptető/forgató utasítások (SLL, SRL stb.), bitműveletek, karakterlánc (string) műveletek (CMPB stb.), multimédiás és 3D grafikus műveletek (PADD, PADDS stb.). 14:33:30
Vezérlő utasítások Ezekkel az utasításokkal egyrészt a program soros utasítás-végrehajtását lehet vezérelni, másrészt a processzor működését szabályozni. Ezek: feltétel nélküli vezérlésátadás (JMP), feltételes vezérlésátadás (pl. JNE), szubrutin hívás (CALL), visszatérés szubrutinból (RET), ciklus képző utasítás (LOOP). A processzor működését szabályozó utasítások közé tartoznak a különböző programvezérelt megszakítást kérő utasítások (pl. INT). 14:33:30
A processzor utasításfeldolgozása A processzor teljesítményében meghatározó jelentőségű a művelet-végrehajtó egységek száma és működése. Az ALU működését és képességeit a műveletekben értelmezett adattípusok alapján értékelhetjük. Ezek: fixpontos számok, lebegőpontos számok, binárisan kódolt decimális (BCD) számok, multimédiás (MMX) adatok, karakteres mezők, bitmezők 14:33:31
Tárolókezelés Mivel az utasítások és az operandusok a tárolóban helyezkednek el, ezért kiemelt fontosságú annak kezelési módja. A tároló szervezéséből adódóan címzéssel érhető el. Annak érdekében, hogy a különböző feladatokat egyszerűen lehessen megoldani, különböző tároló-elérési módszereket dolgoztak ki. Az adatok fizikai címét rendszerint nem tartalmazza az utasításszerkezet, tehát címmódosítást kell elvégezni 14:33:31
Tárolókezelés II A cím módosításának okai: A címrész rendszerint nem elegendő hosszúságú Adatsorozat elemein ugyanazokat a műveleteket kell végrehajtani Ciklikus műveletsorozatot kell végrehajtani Az elkészült programhordozhatósága Lehetőségei: Közvetlen Közvetett Literális Indexelés 14:33:31
Közvetlen címzés A közvetlen címzés esetén a címrészben tárolóhelycím található, amely mutathat a memóriaára, vagy valamelyik regiszterre. Két típúsa van: Abszolút címzés esetében az utasítás címrészében valóban az operandus fizikai címe található. Használata nem mindig előnyös, mivel így az adatoknak fix helyen kell lenniük. Memóriacímekhez 16-32, míg a regiszterekhez 3-6 bit szélességű címekre van szükség. 14:33:31
Közvetlen címzés A relatív címzés esetén a címrész egy alapcímhez viszonyított eltolást tartalmaz. Alapcím lehet: Egy kijelölt regiszterben, a bázisregiszterben eltárolt fizikai memóriacím. A címek rövidítése érdekében a memóriát több kisebb részre osztjuk, szegmentáljuk. A bázisregiszter ezek kezdőcímét tartalmazza. A program kezdetének a címe nagyon fontos, mert így a programok memórián belül áthelyezhetők. Az utasítás tárolóbeli helye, itt az alapcím a PC. Csak egy szűkebb környezet elérésére nyújt lehetőséget. 14:33:31
Közvetlen címzési módok Adatterület Program terület LDA a 1999 2000 2001 2000 Program terület BR 4096 3800 Adatterület 4096 LDA r 200 + 4296 3800 14:33:31
Közvetett címzés A közvetett vagy indirekt címzés esetén az operandus memóriacímét vagy annak egy összetevőjét adjuk meg az utasításban. A címmezőben az a memóriacím található, ahol az operandus címe került tárolásra. Adatterület Program terület LDA i 1600 2800 2800 3800 1600 14:33:31
Közvetlen adatcímzés A közvetlen adatcímzést álcímzésnek és literális címzésnek is nevezik. Akkor beszélünk ilyen címzésről, ha maga az operandus található az utasítás címrészében. Az operandusnak bele kell férni a címrész szélességébe. Program terület LDA # 1600 Akkumulátor 1600 14:33:31
Indexelt címzés Adatsorozatokkal való munka során alkalmazott címzési mód. Az utasítás címrészében az operandus helyének az alapcíme található. Ehhez adjuk hozzá az indexregiszterben lévő értéket és megkapjuk a fizikai címet. Ennek növelése, csökkentése automatikusan megoldható. Program terület IX 5 Adatterület 3000 LDA ix 3000 + 3005 3800 14:33:31
Az aritmetikai egység
Aritmetikai egység Az legfontosabb műveletcsoport az adat-műveletek. Az ALU feladatai: Aritmetikai műveletek elvégzése (+, -, *, /, ^) rendszerint kettes számrendszerben Logikai műveletek (ÉS, VAGY, NEM stb.) végrehajtása Bitforgatás és léptetés 14:33:31
Számok ábrázolása A számábrázoláshoz megkülönböztetnünk: az alábbiakat kell Egészszámok törtszámok Pozitív számok negatív számok Fixpontos számábrázolás ±a m a m 1 a m 2... a 1 a 0 a 1 a 2... a n Az elválasztójeltől balra az egész-, jobbra a törtrész található. Ezt az ábrázolásmódot kis számok esetén alkalmazzuk. 14:33:31
Számok ábrázolása Lebegőpontos számábrázolás nagy és kis számok rövid leírásához használható hatékonyan. ±a r ±p, ahol az 'a' mantissza, a 'p' a karakterisztika, az 'r' pedig a radix. Normalizálás Az egységes számformátumok érdekében alkalmazzuk. Általában nullára, ritkábban egyesekre normalizálunk. 0,45298 * 10-5 4,5298 * 10-4 14:33:32
Számábrázolási problémák A számítógépes számfeldolgozásnál folyamatos korlát a rendelkezésre álló tárolási szélesség. Hibák: Túlcsordulásról (overflow) beszélünk, ha a művelet eredménye nem fér el a tárolóban. Alulcsordulás esetén az eredmény olyan kicsi, hogy nem ábrázolható. Előfordulhat, hogy a kapott eredmény nem tartozik a számhalmazba. A lebegőpontos számok esetében hét számtartományt különböztethetünk meg. 14:33:32
Lebegőpontos számtartományok -0.999*10+99> nagy abszolút értékű negatív számok -0.999*10+99 0.100*10-99 negatív számok tartománya -0.100*10-99< kis abszolút értékű negatív számok 0 +0.100*10-99> kis pozitív számok +0.100*10-99 0.999*10+99 pozitív számok tartománya +0.999*10+99< nagy pozitív számok tartománya 14:33:32
Numerikus adatok tárolása
Fixpontos számábrázolás A szám kettes számrendszerbeli együtthatóit kell eltárolni a tárolókban. A kettedes pont célszerűségi okokból vagy az MSB (Most Significant Bit) előtt, vagy az LSB (Last Significant Bit) után helyezkedik el (innen a fixpontos elnevezés). Előbbi esetben tört, az utóbbiban egész számokat ábrázolhatunk. Egész számok tartománya: 0 <= A < 2n Törtszámok tartománya: 2-n <= A < 1 n n-1 n-2........................... 3 2 1 0 1 0 0 1 0 1 1 0 1 1 0 0 1 1 0 0 14:33:32
Negatív fixpontos ábrázolás A negatív számok jelölésére négy különböző módszert használhatunk: Előjeles, abszolút értékes 1-es komplemens 2-es komplemens 2k-1 többletes, ahol a k a karakterisztika tárolási bitjeinek száma Leggyakrabban ez utóbbit használják kiegészítve az előjeles, abszolút értékes ábrázolással. 14:33:32
Negatív fixpontos ábrázolás Az előjeles, abszolút értékes ábrázolásnál a legfelső helyiértékű biten jelezzük az előjelet. Ha ez '1', akkor a szám negatív, ha '0', akkor pozitív. A többi helyiértéken tároljuk a szám abszolút értékét. 1 Tárolandó szám abszolút értéke Előjelbitek Az egyes komplemens tárolás során az n-1 bites tárolási helyen az előjeltelen tárolandó számértéket az adott tároló hosszon ábrázolható legnagyobb számra, 2n-1-1-re kiegészítő számsorozatot tároljuk. 14:33:32
Negatív fixpontos ábrázolás A kettes komplemenskódú tárolás során az előjeltelen számot adott tárolóhosszon ábrázolható legnagyobb számnál 1-gyel nagyobb számra (2n-1) kiegészítő számot tároljuk. A 2n-1 többletes kódú tárolásnál a tárolandó számértékhez az adott tároló hosszon ábrázolható számnál 1gyel nagyobb számnak megfelelő értéket adunk hozzá annak érdekében, hogy pozitív számot tárolhassunk. Formailag megegyezik a 2-es komplemenssel, de az előjelbit itt mindig nulla. 14:33:32
Negatív fixpontos ábrázolás 1 0 0 1 0 1 1 0 Előjeles, abszolút értékes 1 0 1 0 1 0 0 1 1-es komplemens 1 0 1 0 1 0 1 0 2-es komplemens 0 0 1 0 1 0 1 0 2n-1 többletes kód 14:33:32
Lebegőpontos számábrázolás A szám kettes számrendszerbeli együtthatóit kell eltárolni a tárolókban. A kettedes pont célszerűségi okokból vagy az MSB előtt, vagy az LSB után helyezkedik el (innen a fixpontos elnevezés). Előbbi esetben tört, az utóbbiban egész számokat ábrázolhatunk. Egész számok tartománya: 0 <= A < 2n Törtszámok tartománya: 2-n <= A < 1 1 Karakterisztika 1 Előjelbitek Mantissza 14:33:32
ANSI/IEEE 754 szabvány A szabványban az alábbi módon definiálták a számok formái megjelenését: s ± p e A= 1 1.a 2 s a p e a mantissza előjele (0, ha pozitív) egyesekre normalizált mantissza törtrésze (szignifikandus) a karakterisztika eredeti értéke eltolás értéke, nagysága 2m-1-1, ahol m= 8, 11, 15. 14:33:32
ANSI/IEEE 754 szabvány A szabvány az alábbi formátumokat határozza meg: Egyszeres pontosság (single precision), amely 32 bites Dupla pontosság (double precision), amely 64 bites Kiterjesztett pontosság (extended precision), amely 80 bit hosszúságú Négyszeres pontosság (quadrupled precision), amely 128 bit hosszúságú 14:33:33
ANSI/IEEE 754 szabvány A tárolt adatformák mindegyike azonos szerkezetű és három részből áll: A szignifikandus előjelbitje, amely 0 pozitív számoknál. A karakterisztika (8, 11 vagy 15 bit), amely 2m-1-1-es többletű formájú. A legkisebb és a legnagyobb érték speciális. A szignifikandus (23, 52, 64 vagy 112 bit) egyesekre normalizált. 14:33:33
ANSI/IEEE 754 szabvány A túlcsordulás és az alulcsordulás kezelésére az alábbi adatformátumokat határozza meg: normalizált adatformátum denormalizált adatformátum nulla számérték végtelen számérték nem meghatározható számérték, ahol különbséget tesz "jelző nem szám" és "csendes nem szám" érték között. A "jelző nem szám" lebegőpontos operandusként kivételt okoz. 14:33:33
ANSI/IEEE 754 szabvány Normalizált Szignifikandus Karakterisztika E E tetsz. tetsz.kitevő kitevő tetszőleges számérték Denormalizált Karakterisztika 0 kitevő E E tetsz. Szignifikandus nem 0 számérték Nulla Karakterisztika 0 kitevő E E tetsz. Szignifikandus 0 Végtelen Karakterisztika E E 111...111 tetsz. kitevő Szignifikandus 0 Nem-szám Karakterisztika E 111...111 E tetsz. kitevő Szignifikandus nem 0 számérték 14:33:33
ANSI/IEEE 754 szabvány Jellemző Egyszeres pontosság Előjelbit [bit] 1 Karakterisztika [bit] 8 Mantissza [bit] 23 Teljes hossz [bit] 32 Kitevő többlet 127 Kitevő tartománya -126-127 Legkisebb -126 2 normalizált szám Legnagyobb +128 2 normalizált szám Decimékis számok -38 +38 10-10 tartománya Legkisebb -45 10 Készítette:szám Markó Imre 2006 denormalizált Kiterjesztett és Dupla pontosság négyszeres pontosság 1 11 52 64 1023-1022-1023 2-1022 1 15 64/112 80/128 16383-16382-+16383 2-16382 2+1024 2+16384 10-308-10+308 10-4932-10+4932 10-324 10-4935 14:33:33
BCD kódolás Mivel csak tíz számjegyet különböztetünk meg, ezért ehhez elegendő négy bit is. Ha egy decimális számot 4 bitre kiegészített bináris megfelelőjével tárolunk, akkor BCD (Binary Coded Decimal) kódolásról beszélünk. Ezzel a módszerrel két számot tárolhatunk egy bájton. -6969 0 0 0 0 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 1 1 10 1 14:33:33
Karakterek ábrázolása A karakterek ábrázolásának lehetőségei: ASCII Latin1 Kódlapok Unicode 14:33:33
Egyéb tárolási formák Eddigi kódolásokban a kódolt jelsorozatból nem lehetett meghatározni annak tartalmát. Vannak olyan tárolási formátumok, ahol kiegészítő információkat is tárolnak az adatok mellett. Ez bonyolult adatstruktúrák közvetlen, vagy alacsony szintű kezelését teszik lehetővé. A jelölt adattárolás (tagged storage) jellemzője hogy a tárolt adat kiegészül olyan információkkal, amelyek a felhasználási lehetőséget határozzák meg. Ezek hibafeltárási lehetőségeket nyújtanak számunkra. 14:33:33
Egyéb tárolási formák Deszkriptoros tárolási forma egyszerű adatstruktúrák kezelését teszi lehetővé kiegészítő információk (hozzáférési jogok, felhasználói cél stb.) hozzáadásával. A deszkriptorban tárolt információ egy része közvetlenül hardver kezelésű, másik része viszont szoftveres úton dolgozható fel. Összetett struktúra (object oriented, capability addressing schemes) alkalmazása a szoftverszintű adatkezelést segíti elő. 14:33:33
Műveletvégzés
Műveletek típusai Alapvetően a műveleteket aritmetikai és logikai csoportokba sorolhatjuk. Más osztályzás során az adatok tárolási formáját vesszük figyelembe: Fixpontos Lebegőpontos, BCD Speciális (3D, vektoros, MMX) adatok 14:33:33
Fixpontos aritmetikai műveletek Összeadás ugyanúgy végezzük, mint decimális számokkal. Az átvitelt a következő helyiértékben figyelembe vesszük. 110100010101 + 001101010111 1000001101100 Kivonás visszavezethető negatív szám hozzáadására. Szorzás visszavezethető sorozatos összeadásokra, vagy 1bites eltolásokra. Osztás visszavezethető sorozatos kivonásokra, vagy 1-bites eltolásokra. 14:33:33
Fixpontos aritmetikai műveletek Kivonás 10110011-110011001 1100011010 179-409 -230 10110011 + 001100111 100011010 1100011010 + 0011100101 0011100110 110111100-101101111 1001101 444-367 77 794 230 110111100 + 010010001 1001001101 14:33:34
Lebegőpontos műveletek A lebegőpontos műveleteket visszavezethetjük fixpontos számokra, így végezzük a műveleteket is. Szabályok: Összeadásnál és kivonásnál ha az operandusok karakterisztikái nem egyeznek meg, akkor a mantissza jobbra léptetésével és a karakterisztika egyidejű balra léptetésével tudjuk megoldani. Osztásnál és szorzásnál a mantisszákat fixpontos számként kell osztani, illetve szorozni, a karakterisztikák pedig fixpontos számként összeadásra és kivonásra kerülnek. 14:33:34
Logikai műveletek A logikai műveletekhez a BOOL-algebrát használjuk. Az ALU ezeket közvetlenül képes elvégezni, ezért vannak ilyen műveletei utasítások. Három alapművelet létezik, amelyből az összes többi származtatható. NEM ÉS VAGY A 0 1 Y=A 1 0 B 0 0 1 1 A 0 1 0 1 Y=A B 0 0 0 1 B 0 0 1 1 A 0 1 0 1 Y=A B 0 0 0 1 14:33:34
Aritmetikai és logikai egység felépítése
Aritmetikai egység Az ALU fő részegységei: Összeadó egység, két operandus összeadására. Léptető áramkörök, regisztertartalmat léptetik jobbra vagy balra léptetik, vagyis osztják és szorozzák. Logikai áramkörök, a logikai műveletvégzéshez. Regiszterek, az adatok ideiglenes tárolására. Ezek lehetnek csak az ALU által használhatók, de lehetnek általános processzorregiszterek is. Az aritmetikai műveletek eredménye néhány FLAG-et is beállít. 14:33:34
Aritmetikai egység A logikai műveletek közül az alapműveleteket közvetlenül képes megoldani. A műveletek az alábbi FALG-ekre vannak hatással: Átvitel (carry) akkor '1', ha a legmagasabb helyiértéken átvitel történt. Nulla (zero) akkor '1', ha az eredmény nulla. Előjel (sign) akkor '1', ha az eredmény negatív. Túlcsordulás (overflow) akkor '1', ha az eredmény nagyobb, mint a tárolható legnagyobb szám. 14:33:34
Összeadó áramkörök Az aritmetikai műveleteket összeadásokra vezetjük vissza. Ennek megfelelően az ezeket végrehajtó egység is összeadó áramkör lesz. Teljes összeadó Félösszeadó S S + + C & C & A D B + 1 & A B 14:33:34
1-bites ALU felépítése S 1 L Logikai egység S Aritmetikai egység 1 & + & & & Ci Ci-1 & Ci + 1 Ci-1 & 1 & & V01 A V01 B V03 V02 V02 & V04 V03 & & V04 A B & Vezérlő logika V0 V1 A B14:33:34
Az ALU felépítése Akkumulátor Szorzóregiszter Adatregiszter Párhuzamos összeadó Kimeneti sín Bemeneti sín + * / Vezérlő egység 14:33:34
Műveletek végrehajtása
Műveletvégrehajtás lépései A processzor utasításokat hajt végre. Az utasításokkal a feldolgozás ideje alatt más és más egység végez műveleteket. A megértés érdekében bontsuk lépésekre az utasításvégrehajtás folyamatát. Utasításelékészítés, lehívás (FETCH) A processzor az utasításszámláló regiszter tartalmát átviszi a memória címregiszterébe, vagy a címsínt vezérlő cím pufferébe. Ennek alapján kikeresi a tárból az utasítást, majd átviszi a vezérlő egység utasításregiszterébe. 14:33:34
Műveletvégrehajtás lépései Utasításszámláló regiszter tartalmának növelése A PC tartalmát megnöveljük az éppen lehívott utasítás hosszának megfelelő értékkel. Így a PC a következő utasítás címét fogja tartalmazni. A PC a kezdeti értékét az operációs rendszertől kapja. Műveleti kód értelmezése Ezalatt megtörténik a műveleti jelrész értelmezése, valamint az operandusok pontos címének meghatározása. 14:33:35
Műveletvégrehajtás lépései Operandusok előkészítése Az előző lépésben kidolgozott cím alapján kikeresi az operandusokat a memóriából és átviszi az utasítás által meghatározott helyre. Végrehajtás Ebben a fázisban megtörténik a kijelölt művelet végrehajtása az előkészített operandusokkal. Ha ugróutasítást hajtunk végre, akkor a PC tartalmát ebben a lépésben módosítanunk kell. Eredmény eltárolása Az eredményt eltároljuk az előírt helyre (ALU). 14:33:35
Soros végrehajtás folyamata Utasítás dekódolás Utasítás lehívás Végrehajtás címszámítás Memória hozzáférés Nulla? Előjel A B conc ALU kim. Adat mem. LMD MUX IR Reg. tár MUX Ut. tár MUX PC Visszaírás MUX NPC IMM 14:33:35
A vezérlő egység
A vezérlő egység működése Az elemi lépéseknek a végrehajtása áramköri szinte még tovább bontható. A tényleges végrehajtáshoz adatútvonalak nyitása és zárása szükséges, a megfelelő időzítésű megvalósítását nevezzük műveleti vezérlésnek. Az adatútvonalak nyitása és zárása vezérlési pontokon keresztül, működtetésük vezérlővonalakon keresztül valósulnak meg. A kapuk nyitását és zárását modellezhetjük egy ÉS kapuval. Ennek az egyik bemenetére '1' kapcsolva a kimenetet a másik vonal határozza meg. 14:33:35
C3 PC OP C1 Műveleti vezérlés A1 Összeadó Shiftelő Komplementáló AC CÍM C2 A2 Címsín A3 C5 C5 C5 A4 C5 A6 A5 C5 Vezérlősín MAR Főtár MDR M1 PAR Periféria vezérlés PDR P1 Adatsín M2 C5 M3 C5 C5 P2 C5 P3 14:33:35
C3 PC OP C1 Műveleti vezérlés A1 Összeadó Shiftelő Komplementáló AC CÍM C2 A2 Címsín A3 C5 C5 C5 A4 C5 A6 A5 C5 Vezérlősín MAR Főtár MDR M1 PAR Periféria vezérlés PDR P1 Adatsín M2 C5 M3 C5 C5 P2 C5 P3 14:33:35
C3 PC OP C1 Műveleti vezérlés A1 Összeadó Shiftelő Komplementáló AC CÍM C2 A2 Címsín A3 C5 C5 C5 A4 C5 A6 A5 C5 Vezérlősín MAR Főtár MDR M1 PAR Periféria vezérlés PDR P1 Adatsín M2 C5 M3 C5 C5 P2 C5 P3 14:33:35
C3 PC OP C1 Műveleti vezérlés A1 Összeadó Shiftelő Komplementáló AC CÍM C2 A2 Címsín A3 C5 C5 C5 A4 C5 A6 A5 C5 Vezérlősín MAR Főtár MDR M1 PAR Periféria vezérlés PDR P1 Adatsín M2 C5 M3 C5 C5 P2 C5 P3 14:33:35
C3 PC OP C1 Műveleti vezérlés A1 Összeadó Shiftelő Komplementáló AC CÍM C2 A2 Címsín A3 C5 C5 C5 A4 C5 A6 A5 C5 Vezérlősín MAR Főtár MDR M1 PAR Periféria vezérlés PDR P1 Adatsín M2 C5 M3 C5 C5 P2 C5 P3 14:33:36
A műveleti vezérlés megoldásai A műveleti vezérlést két, alapvetően eltérő módon valósíthatjuk meg: Huzalozott (hardver) műveleti vezérlés Ebben az esetben az utasítás feldolgozását jelentő elemi tevékenységek sorrendjének vezérlését bonyolult sorrendi hálózattal valósítják meg. Ez megfelelő sorrendben és időzítéssel adja ki a kapukat vezérlő jeleket. A megoldás nagyon gyors, de merev és költséges megoldás. A vezérlést PLA-val oldják meg, amely ÉS és VAGY kapuk sorozata. Ez a megoldás célgépekben használatos, ahol fontos a nagyon gyors működés. 14:33:36
Huzalozott mikroprogramozás Címsín PC Prog. mem. cím MŰV. Program tároló PLA C1 Címsín Adat mem. cím Adattároló ALU Adatsín 14:33:36
A műveleti vezérlés megoldásai Mikroprogramozott (szoftver) műveleti vezérlés Ebben az esetben az elemi tevékenységek sorrendjét egy tárolt program utasításai vezérlik. A program utasításai a mikroutasítások, amelyek két részből állnak: a következő mikroutasítás címéből és a kapukat közvetlenül vagy közvetetten működtető vezérlőmezőből. A makroszintű gépi utasítás adja meg a műveletet vezérlő mikroprogram kezdőcímét, amelynek mikroutasításait sorra végrehajtva történik meg az utasítás végrehajtása. A mikroprogram elméletileg cserélhető, ez lehetővé tesz változtatható utasításkészletű processzorokat. 14:33:36
A mikroprogramozott vezérlés A vezérlőegységnek azt a részét, amely a műveleti vezérlést oldja meg, mikrovezérlőnek nevezik. A mikrovezérlő felépítését alapvetően meghatározza az alkalmazott mikroutasítás struktúra. Horizontális mikroutasítások Ezeknél a vezérlési mező minden bitje önálló funkciót tölt be, egy-egy vezérlési pont engedélyezésére és tiltására vagy állapotjelző beállítására szolgál. Sok esetben nem elég széles a vezérlési mező, ezért ún. kódolt (packed) mezőket alkalmaznak, amelyek a vezérlési mező egy-egy csoportját foglalják össze, és a további dekódolással kapjuk meg a vezérlőjeleket. 14:33:36
A horizontális vezérlés Horizontális mikroutasítás Kódolt horizontális mikroutasítás Köv. ut. címe K.m K.m K.m K.m Köv. ut. címe Vezérlő bitek Horizontális mikroutasítás Nanout. címe Vezérlő bitek Köv. ut. címe Nanotár Vezérlő14:33:36 bitek
A horizontális vezérlés A mikroprogramtár csökkentéséhez kétszintű tárolási rendszert használnak. A mikroutasítás vezérlési mezője azt a címet tartalmazza, amely a nanotárban a tényleges vezérlési mezőre mutat. Ennek az előnye, hogy több mikroutasítás is használhatja ugyanazokat a vezérlési jelsorozatot plusz tárolókapacitás lekötése nélkül. Hátránya, hogy az utasítások kiértékelése hosszabb időt vesz igénybe. 14:33:36
A vertikális vezérlés Vertikális mikroprogramozott műveleti vezérlés olyan struktúra, ahol a mikroutasítások csak egy-egy elemi művelet elvégzését engedélyezik. A gépi kódú utasítás egymás utáni mikroutasítások halmazaként hajtható végre. A mikroprogram tartalmazhat eljárásokat, szubrutinikat, felépítése hasonlít a makroprogramokéhoz. A gyorsabb működés miatt regisztertárakat alkalmaznak, a mikroutasítások elsősorban ezeket használják. A mikroutasítás néhány bites része mint műveleti jelrész határozza meg, hogy mikroutasítás vezérlési mezőinek előírásait hogyan kell alkalmaznia a mikrovezérlőnek. 14:33:36
A horizontális vezérlés Intel processzorok mikroutasításainak szerkezete 5 5 SOURCE 3 TYPE DESTINATION ALU 4 ALU MŰV. 3 REGISZTER 1 C 504 * 21 BIT Motorola processzorok mikroutasításainak szerkezete Általános célú mikroutasítás 2 Kétszintű mikrotároló 1 10 2 TYP 0 FC Következő ut. címe trap Feltételes mikroutasítás 2 8 FC Köv. ut. címe 5 Felt. FC = külső kapcsolat típusa 17 bit 1 1 Felhasznált ter. 544 68 bit prefetch 1 1 max1 024 1 prefetch 336 max 1024 nanotár 14:33:36
A vertikális vezérlés Cím Ugrási cím MUX Mikroutasításszámláló regiszter Betöltés Külső feltételek µpc Léptetés Mikroprogramtár Mikroutasítás Dekóderek Vezérlő jelek 14:33:36
A CISC RISC architektúra A CISC processzoroknál a magas szintű programozási nyelv segítségével készült felhasználói programot az összetett utasításokkal rendelkező gépi nyelvre fordítják, majd ezeket a mikroprogramok segítségével az adott hardveren értelmezik és végrehajtják. Az utasításvégrehajtás egy mikroutasításokkal megvalósított értelmező rendszer segítségével történik meg. Az adatmozgás rendszerint a memória és a regiszterek között történik. 14:33:37
A CISC RISC architektúra A RISC processzorok esetében a magasszintű programozási nyelven készült programot egyszerű, gépi kódú utasításokból álló kódra fordítják le. Ez a kód már nem igényli a mikroutasításokkal megvalósított értelmező rendszert, mivel az utasítások közvetlenül végrehajthatók. A lefordított programot a főtárból a cache-be mozgatjuk, ebből hajtjuk végre. Adatmozgás rendszerint regiszterek között zajlik. A RISC rendszerekhez komoly fordítóprogramokra van szükség! 14:33:37
Gyorsítási lehetőségek
Gyorsítási lehetőségek A processzor gyorsítására az alábbi lehetőségeink vannak: Órajel növelése, amelynek technológiai korlátjai vannak. Rendszertechnikai gyorsítás, amely a processzor speciális szervezésével alakítható ki. Ennek fajtái. Ezekben az esetekben párhuzamosítást használunk. Célprocesszorok Pipeline Szuperskalár felépítés 14:33:37
Pipeline A párhuzamosítás akkor lehetséges, ha a folyamat olyan részekre bonthatók, melyek más-más erőforrásokat és egységeket kötnek le. Amint felszabadul egy erőforrás, a következő folyamat már igénybe veheti azt. A folyamat fázisai a soron következő folyamat indulási állapotát állítják elő. A pipeline végrehajtása történhet szinkron és aszinkron ütemezéssel. 14:33:37
Pipeline A szinkron ütemezés során minden egység azonos ütemezéssel dolgozik, feladatát mindegyik ugyanakkor kezdi meg. Az időzítéseket a leglassabb egység határozza meg. A megoldás hátránya, hogy a különböző folyamatok végrehajtásához eltérő időre van szükség. A CISC rendszerekre ez fokozottan igaz. Az adatáramlás folyamatosságának biztosítására átmeneti tárolókat használnak az adatfolyamban. 14:33:37
Pipeline Az aszinkron ütemezés során az egyes fokozatok jelzik egymásnak az adott feladat befejeződését. A következő csak ezután kezdhet dolgozni a kapott adattal. Ez azt is jelenti, hogy az aktuális egység készen áll a következő folyamatot fogadni. 14:33:37
Pipeline működése Soros utasításfeldolgozás FETCH Dekódolás Op. lehívás Végrehajtás Visszaírás FETCH Dekódolás n+1. utasítás n. utasítás Pipeline utasításvégrehajtás FETCH Dekódolás FETCH Op. lehívás Végrehajtás Dekódolás FETCH Visszaírás Op. lehívás Végrehajtás Dekódolás n. utasítás Visszaírás Op. lehívás Végrehajtás Visszaírás 14:33:37
Soros végrehajtás folyamata Utasítás dekódolás Utasítás lehívás Végrehajtás címszámítás Memória hozzáférés Nulla? Előjel A B conc ALU kim. Adat mem. LMD MUX IR Reg. tár MUX Ut. tár MUX PC Visszaírás MUX NPC IMM 14:33:37
Pipeline végrehajtás folyamata Memória hozzáférés MUX Nulla? Adat mem. MUX MUX Reg. tár MUX PC Ut. tár Végrehajtás címszámítás Visszaírás Utasítás dekódolás Utasítás lehívás Előjel 14:33:37
Pipeline fajtái Multifunkcionális pipeline során a folyamatok nem ugyanazokat az erőforrásokat használják fel. Egyfunkciós pipeline esetén minden folyamat ugyanazokkal az erőforrásokkal gazdálkodik. Lineáris pipeline során minden folyamat egyszer használ egy erőforrást. A nemlineáris pipeline során egy erőforrás többször is használható egy folyamat végrehajtása során. Az utasításvégrehajtás lépéseit úgy kell meghatározni, hogy minden lépést egy konkrét részáramkör hajtson végre. 14:33:37
Utasításvégrehajtás lépései A felbontásnál az alábbi szempontokat kell figyelembe venni: Egyes lépések erőforrásigénye: minden lépés valamilyen erőforrást köt le. Előfordulhat olyan eset, hogy lépés csak több erőforrás igénybevételével hajtható végre. Időszükséglet: Az egyes fázisok időszükséglete is befolyásolja a fázisok számát. Mindig a leghosszabb elérés fogja meghatározni a maximális sebességet és közvetve a lépések számát is. Áramköri problémákat is figyelembe kell venni, mivel előfordulhat, hogy egy feladat csak nagyon bonyolult áramkörrel oldható meg, ami több hibalehetőséget és drágább előállítási költséget von maga után. 14:33:37
Utasításvégrehajtás problémái A folyamatos utasításvégrehajtást az alábbi műveletek zavarhatják meg leginkább: tárolóhivatkozású utasítások (időigényesek) vezérlésátadó utasítások (feltételes, feltétel nélküli és ciklusok, másik címre viszik a vezérlést) megszakítások, kivételek (más címen folytatódik) Ezek meglehetősen nagy számban találhatók meg az utasításfolyamban, ezért fontos a megfelelő kezelésük. Mindhárom esetben a folyamatos utasításvégrehajtást meg kell szakítani vagy fel kell függeszteni, ami lyukakat eredményez a folyamatban. Ezek csökkentik a pipeline hatékonyságát. 14:33:38
Memóriautasítások kezelése Várakozási állapotok beiktatása A memóriautasításokat követő utasítások végrehajtását felfüggesztjük várakozási állapotok (WAIT) beiktatásával addig, míg be nem fejeződik a művelet. A pipeline-ban lyukak keletkeznek. Ha sok ilyen művelet van, a feldolgozás hatékonysága jelentősen lelassulhat. F F F F F D D E1 D D W E E E E E2 D W W W W n+4. utasítás n+3. utasítás n+2. utasítás n+1. utasítás n. utasítás 14:33:38
Memóriautasítások kezelése Késleltetett memóriautasítás Abban az esetben használjuk, ha a következő utasításnak szüksége van az előzőleg beolvasott adatra. Ilyenkor egy olyan utasítást használunk (NOP), amelynek erre nincs szüksége, a végrehajtást pedig nem borítja fel. Az utasításátrendezést a fordítóprogram végzi el! F F D E F D E W F D E W D E1 E2 W W n+3. utasítás n+2. utasítás n+1. utasítás n. utasítás 14:33:38
Elágazások kezelése A legnagyobb problémát jelentik. Az oka, hogy az ugrási cím csak a végrehajtás fázisában válik ismertté, másrészt nem a soron következő címről kell folytatni a végrehajtást. Ilyenkor a pipeline-ban lévő utasításokat törölni kell, majd ismét feltölteni a pipeline-t. A feltétel nélküli vezérlésátadó utasítások esetében a vezérlőegység addig késlelteti a csővonalba belépő utasításokat, míg az utasítás kiértékelése megtörténik. Hátránya, hogy a csővonalban lyukak keletkeznek, de nem kell ürítést végezni. Másik lehetőség szerint a processzor kiüríti ilyen utasítás esetén a csővonalat. 14:33:38
Elágazások kezelése A feltételes vezérlésátadó utasítások és ciklusutasítások eseténben legfontosabb meghatározni az ugrás várható irányát. Két lehetősége: Statikus előrejelzés során a fordítás során kell ezt megállapítani és így olyan utasításfolyamot generálni, hogy folyamatos legyen annak végrehajtása. Dinamikus előrejelzés futás közben vizsgálatot jelent. Egyik megoldás szerint egy táblázatban tárolja az ugróutasítások címeit és figyeli a feltételek teljesülését. A másik módszer egy cache-tárban tárolja az ugróutasítások és az ugrás helyének a címeit. Amikor ugyanazt az utasítást kell feldolgozni, a cache-ből veszi ki azt. 14:33:38
Elágazások kezelése Az elágazások problémáinak feloldására az alábbi lehetőségeink vannak: pipeline törlése (flushing, squashing) pipeline leállítása (pipeline freezing) elágazás előrejelzés (branch prediction) spekulatív utasítás végrehajtás (speculative execution) késleltetett elágazás (delayed branch) elágazás összevonás (branch folding) pipeline többszörözés 14:33:38
Pipeline törlése A vezérlőegység folyamatosan tölti fel a csővonalat. Ha a soron következő utasítás ugróutasítás, akkor az addig betöltött utasítások folyamatait törli, majd ismét feltölti a csővonalat a megfelelő címről. Minden értéket vissza kell állítani, amit a törölt folyamatok megváltoztattak. Visszaírás I Végrehajtás I Dekódolás Előkészítés I I K K I+1 I+1 I+2 I+1 I+2 I+3 K K K+1 K+2 K+3 K+1 K+2 K+3 K+1 K+2 K+3 K+1 K+2 K+3 14:33:38
Pipeline leállítása Abban az esetben, ha a soron beolvasott utasítás vezérlésátadó utasítás, a csővonal feltöltése mindaddig felfüggesztésre kerül, amíg az ugrási cím rendelkezésre nem áll. Természetesen ezt a megoldást leginkább a dinamikus előrejelzés alkalmazása során használhatjuk. Visszaírás I Végrehajtás I Dekódolás Előkészítés I I ÁLL ÁLL K ÁLL ÁLL K ÁLL ÁLL K ÁLL ÁLL K K+1 K+2 K+3 K+1 K+2 K+3 K+1 K+2 K+3 K+1 K+2 K+3 14:33:38
Elágazás előrejelzés A processzor vezérlőegysége meg tudja jósolni, hogy a következő utasítás melyik memória címen lesz megtalálható és onnan be tudja tölteni. Ehhez speciális vezérlőegységre van szükség, amely már bizonyos szintű elődekódolást végez a soron következő utasításon. Pipeline Csővonal 1 Utasítás 1 Utasítás 2 Utasítás 3 Utasítás 4 Dekóder Végrehajtó egység Visszaírás Csővonal 2 14:33:38
Elágazás előrejelzés Pipeline Out-of-Order végrehajtó egység Időzítő Utasítás 1 Dekóder Utasítás 2 Utasítás 3 Utasítás 4 Dekóder Végrehajtó egység Dekóder ROB Visszaírás 14:33:38
Elágazás előrejelzés - Netburst Pipeline Out-of-Order végrehajtó egység Időzítő Utasítás 1 Utasítás 2 Utasítás 3 Dekóder Dekódolt utasítások (cache) Végrehajtó egység Utasítás 4 ROB Visszaírás 14:33:38
Spekulatív utasításvégrehajtás A spekulatív végrehajtás az utasítások sorrendjének olyan manipulációját jelenti, amelynek eredményeként a teljesítmény a maximálisra növelhető, figyelembe véve a szuperskalár felépítés sajátosságait és az alkalmazásával kapcsolatos problémákat. A technika használatával a processzor foglaltsága esetén olyan utasítás kerül végrehajtásra - természetesen amennyiben erre lehetőség van -, amely más erőforrásokat köt le. Természetesen az ilyen esetekben az utasítások és az adatok egymással való függőségének a kezelésének kiemelkedő szerepe van. 14:33:38
Spekulatív utasításvégrehajtás while (1){ code = getcode(); if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...;...; do while (stackp>base); if ( ) free_ent++; oldcode = incode ;} //következő code //kilépés, ha nincs több //a feltétel telj. //reset //új code //kilépés, ha nincs több //speciális esetben //végrehajtjuk az utolsó //code-ot //utasításhurok //eredmények a stackbe //kiolvasás a stackből //ha új, új táblabejegyzés //az utolsó code frissítése 14:33:39
Spekulatív utasításvégrehajtás Az aktuális folyamat code = getcode(); if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...;...; do while (stackp>base); if ( ) free_ent++; oldcode = incode ; A következő folyamat code = getcode(); if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...;...; do while (stackp>base); if ( ) free_ent++; oldcode = incode ; 14:33:39
Spekulatív utasításvégrehajtás A aktuális memóriafolyamat kimenetének függőségeit eltávolíthatják Az A következő folyamat a helyi spekulatív tárolókkal code = getcode(); code = getcode(); if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...;...; do while (stackp>base); if ( ) free_ent++; oldcode = incode ; if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...;...; do while (stackp>base); if ( ) free_ent++; oldcode = incode ; 14:33:39
Spekulatív utasításvégrehajtás Az aktuális folyamat code = getcode(); if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...;...; do while (stackp>base); if ( ) free_ent++; oldcode = incode ; A következő folyamat code = getcode(); if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...;...; do while (stackp>base); if ( ) free_ent++; oldcode = incode ; 14:33:39
Spekulatív utasításvégrehajtás Az új folyamatok kezdetére jellemző, hogy: Az aktuális folyamat következő folyamat a free_ent értékét egyszer A megnövelik (gyakran) code = getcode(); code = getcode(); azonos stackp értéket használnak (mindig) if (code ==-1)goto exit; if (code ==-1)goto exit; if (...){ gyakran hamis free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...;...; gyakran igaz (stackp>base); do while if ( ) free_ent++; oldcode = incode ; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...;...; do while (stackp>base); if ( ) free_ent++; oldcode = incode ; 14:33:39
Spekulatív utasításvégrehajtás Az aktuális folyamat A következő folyamat code = getcode(); code = getcode(); if (code ==-1)goto exit; if (code ==-1)goto exit; if (...){ if (...){ gyakran hamis free_ent=...; free_ent=...; code=getcode(); code=getcode(); if (code==-1) goto exit;} if (code==-1) goto exit;} incode = code; incode = code; gyakran hamis if (code>=free_ent){ if (code>=free_ent){ *stackp++=...; Álfüggőségek *stackp++=...; code=oldcode;} code=oldcode;} while (code>=256){ while (code>=256){ *stackp++=...;...; *stackp++=...;...; do while (stackp>base); do while (stackp>base); if ( ) free_ent++; if ( ) free_ent++; oldcode = incode ; oldcode = incode ; 14:33:39
Spekulatív utasításvégrehajtás Az aktuális folyamat code = getcode(); if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...;...; do while (stackp>base); if ( ) free_ent++; oldcode = incode ; A következő folyamat code = getcode(); if (code ==-1)goto exit; if (...){ free_ent=...; code=getcode(); if (code==-1) goto exit;} incode = code; if (code>=free_ent){ *stackp++=...; code=oldcode;} while (code>=256){ *stackp++=...;...; do while (stackp>base); if ( ) free_ent++; oldcode = incode ; 14:33:39
Spekulatív utasításvégrehajtás Fő szál PC PC Függőség vizsgálat Regiszterek Függőség vizsgálat Továbbítás Eredmény puffer Spekulatív szál Regiszterek Eredmény puffer Spekuláció Végrehajtás Cache / Operatív tár 14:33:39
Késleltetett elágazás A fordítás során a fordítóprogram az ugróutasítások mögé olyan utasításokat helyez, amelyek az elágazástól függetlenül végrehajthatók, vagy éppen nem csinálnak semmit (NOP). Ennek eredményeként nem lesz üres állapot a csővonalban. Ezzel egy késleltetési rést (delay slot) hozunk létre, amelynek mérete maximálisan n-1, ahol 'n' a csővonal állapotainak száma. Visszaírás I Végrehajtás I Dekódolás Előkészítés I I NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP K K K K K+1 K+2 K+3 K+1 K+2 K+3 K+1 K+2 K+3 K+1 K+2 K+3 14:33:39
Adatok kezelésének problémái A pipeline problémákat okoz az operandusok esetében is. Akkor jelentkezik olyan, ha olyan utasítás van a csővonalban, amelynek az éppen végrehajtott utasítás fogja az operandust átadni. Ebben az esetben az operandus nincs még meg akkor, mikor már szükség lenne rá. Ezt nevezik HAZARD-nak. 14:33:39
Pipeline adtfeldolgozási hibák Példaprogram ADD SUB AND OR XOR R1, R2, R3 R4, R5, R1 R6, R1, R7 R8, R1, R9 R10, R1, R11 Minden utasítás, ami az első ADD után van, annak eredményére hivatkozik. A hagyományos pipeline feldolgozáshoz szükséges a memóriába visszaírás állapotának a kivárása, különben hibás regisztertartalommal dolgoznának. 14:33:39
Pipeline adtfeldolgozási hibák IM DM Reg. IM DM Reg. IM Reg. DM Reg. IM Reg. DM Reg. IM Reg. Reg. Reg. DM Reg. 14:33:40
Pipeline adtfeldolgozási hibák IM DM Reg. IM DM Reg. IM Reg. DM Reg. IM Reg. DM Reg. IM Reg. Reg. Reg. DM Reg. 14:33:40
Adatok kezelésének problémái A pipeline-ban előforduló hazardok Írás utáni írás során a második utasítás írása után módosítja ugyanazt az első. Írás utáni olvasás során a második utasítás felülír egy olyan adatot, amelyet az első utasítás olvasott volna be. Olvasás utáni írás során a második utasítás ezt megelőzően olvas ki egy operandust, hogy az az első már módosította volna. Olvasás utáni olvasás nem okoz problémát. 14:33:40
A HAZARD-ok megszüntetése A legegyszerűbb megoldás, hogy addig nem engedjük belépni a csatornába az utasítás, míg meg nem szűnik a függőség. Utasítás átrendezés Ennek során az utasításokat úgy rendezi át vagy a vezérlő egység, vagy a fordítóprogram, hogy azok végrehajtási sorrendje ne okozzon adatütközést. Scoreboarding Minden regiszter tartalmaz egy, a módosítására utaló jelzőbitet. Az utasítások ezt megvizsgálva tudják, hogy abban a megfelelő adatot találják-e meg. Egyébként késleltetni kell a soron következő utasítást. 14:33:40
A HAZARD-ok megszüntetése Adat előreengedés (data forwarding) Ebben az esetben ha a második utasításnak szüksége van az előtte lévő művelet eredményére, akkor azt rendelkezésre állása után rögtön, a vezérlőegységen belül továbbítjuk a következő utasításnak. Adatfolyam analízis A processzor már az utasítás-dekódolás folyamata során analizálja, hogy milyen operandusokra van annak szüksége. Ha függőséget talál, akkor megpróbálkozik az utasításokat átrendezni ennek feloldására. 14:33:40
Szuperskalár processzorok Szuperskalár processzorok képesek több utasításfolyam végrehajtása egy órajelciklus alatt. Problémák: Párhuzamos dekódolás, elődekódolás A párhuzamos utasításvégrehajtáshoz szükség van párhuzamosan működő dekódoló és végrehajtó egységekre. Ezek a függőségi problémát megtöbbszörözik. L1 cache L1 cache 1 ut. dekódolása Utasítás puffer Utasítás puffer Dekódolás/ kibocsájtás Dekódolás/ kibocsájtás PIPELINE n ut. dekódolása PIPELINE 1...n 14:33:40
Párhuzamos dekódolás A függőségi vizsgálatok időigényessége miatt az 1. és 2. szintű cache között elődekódolást végeznek. Ennek során a dekódolás feladatainak egy része már ekkor végrehajtásra kerül. Az utasítás kiegészítik erre a műveltre utaló bitekkel. L2 cache Elődekódoló L1 cache 14:33:40
Utasításkibocsátás, várakoztatás A szuperskalár utasításkibocsátás összetevői: Kibocsátási ráta megadja a processzor által ciklusonként kibocsátható utasítások számát. Kibocsátási politika a függőségek kezelését jelenti. Típusai: Adatfüggőségek a regiszterek között, amelyet regiszterátnevezéssel lehet megszüntetni. Vezérlésfüggőségek feloldását blokkolással (utasításkibocsátás felfüggesztése) vagy spekulatív elágazáskezeléssel lehet megoldani. A függőségek kezelésének egyik legelterjedtebb szerkezeti megoldása a végrehajtó egység előtti pufferelés. 14:33:40
Utasításkibocsátás, várakoztatás Utasítás puffer Dekódolás / Kibocsátás Várakoztató puffer Várakoztató puffer Várakoztató puffer Függőség ell. Kiküldés Függőség ell. Kiküldés Függőség ell. Kiküldés Végrehajtó egység Végrehajtó egység Végrehajtó egység 14:33:40
Regiszter átnevezés Célja az ál-adatfüggőségek feloldása, amely akkor alakul ki, ha a programozók csak kevesebb regisztert használhatnak, mint amennyi fizikailag elérhető lenne és ilyenkor függőség lép fel a használt regiszterek között. A regiszterátnevezés során a függőséget okozó utasítás regiszterét egy másik regiszterrel helyettesítik. Fajtái. Statikus, amelyet a fordítóprogram valósít meg Dinamikus, amely futás közbeni regiszterátnevezést jelent Az átnevezéshez egy átnevező puffertárat és egy leképzőtáblázatot használnak. 14:33:40
Szuperskalár architektúra Spekulatív elágazásbecslés A vezérlőegység valamilyen módon megpróbálkozik kitalálni az ugróutasítás kimenetét. Párhuzamos végrehajtás Probléma: az eredmények nem az utasítások sorrendjében jönnek létre. Feloldásához átmeneti tárolóba helyezik az adatokat, amely tartalmát már a helyes sorrend alapján írják ki. A célra a ROB (Re-Order Buffer) regisztert használják. Az utasítás lehet véget ért vagy befejezett. 14:33:40
Spekulatív elágazás-feldolgozás A vezérlőegység valamilyen módon megpróbálkozik kitalálni az ugróutasítás kimenetét. Ez történhet Statikusan Dinamikusan 14:33:41
A 8086-os processzor Adatmutató és Indexregiszterek (8 szó) Szegmensregiszterek Utasítás regiszter (5 szó) ALE A19-A16 AD15-AD0 Sínillesztő egység 16 bites ALU és FLAG regiszter MEM/IO INTA 6 bájtos utasítássor Vezérlő- és időzítő egység NMI INTR HOLD HLDA CLK LOCK RESET 14:33:41
Minimális konfiguráció 14:33:41
Maximális konfiguráció 14:33:41
A 8088-as processzor Adatmutató és Indexregiszterek (8 szó) Szegmensregiszterek Utasítás regiszter (5 szó) ALE A19-A16 AD7-AD0 Sínillesztő egység 16 bites ALU és FLAG regiszter A8-A15 MEM/IO INTA 4 bájtos utasítássor Vezérlő- és időzítő egység NMI INTR HOLD HLDA CLK LOCK RESET 14:33:41
A 80286-os processzor 3 A19-A16 2 Címző és végrehajtó egység Sínvezérlő és utasításkezelő egység HLDA HOLD LOCK MEM/IO INTA D15-D0 1 CLK RESET NMI INTR 14:33:41
Címző és végrehajtó egység Szegmens méret Offset összeadó Aritmetikai és logikai egység Regisztertár 2 Sínvezérlő egység Szegmens határ ellenőrzés Fizikai cím összeadó Szegmens bázis 3 Vezérlés 1 NMI INTR 14:33:42
Sínvezérlő és utasításkezelő egység 3 Címsín vezérlő Előolvasó 2 CPU kiterjesztés Sín vezérlés Adatvonal vezérlés A19-A16 HLDA HOLD LOCK MEM/IO INTA D15-D0 6 bájtos utasítás sor 1 3 dekódolt utasítás sor Utasítás dekóder 14:33:42
Az i386-os processzor 6 Címszámító egység 7 8 9 1 2 3 Végrehajtó egység NMI INTR HLDA HOLD RESET CLK Sínvezérlő és utasításkezelő egység A31-A0 LOCK MEM/IO INTA D31-D0 4 5 14:33:42
Végrehajtó egység Szorzó- és osztó áramkör Effektív címsín Effektív címsín 2 Címszámító egység Védelmi ellenőrző egység Belső vezérlő sín 3 Dekódoló és sorbaállító egység Barrel shifter ALU regiszterek Vezérlő ROM Sínvezérlő és utasításkezelő egység 1 4 ALU vezérlés Dedikált ALU sín 5 14:33:42
Címszámító egység Szegmentáló egység Lapozó egység Deszkriptor regiszterek Lap cache 2 Eltolási érték sín 9 Kód fetch / Lap fetch Összeadó Limit PLA Végrehajtó egység 1 3 bemenetű összeadó Lineáris címsín Effektív címsín Effektív címsín Fizikai címsín Vezérlő PLA 3 Belső vezérlő sín 6 7 8 Sínvezérlő és utasításkezelő egység 14:33:42
Sínvezérlő és utasításkezelő egység Címszámító egység 8 6 7 9 Eltolási érték 3 dekódolt utasítás sor 4 Kód fetch / Lap fetch Belső vezérlő sín Végrehajtó egység 3 5 Fizikai címsín Utasítás dekóder Lineáris címsín Sín vezérlés A31-A0 Csővonal vezérlés Prefetcher Vezérlés Címsín meghajtó 16 bájtos kódsor NMI INTR HLDA HOLD RESET CLK Kód szál Multiplexer Adatsín meghajtó D31-D0 Dedikált ALU sín 14:33:42
Az i486 DX processzor 1 NMI INTR HLDA HOLD RESET CLK 2 3 Címszámító és vezérlő egység 4 5 6 Sínvezérlő és utasításkezelő egység A31-A0 LOCK MEM/IO INTA D31-D0 7 8 14:33:42
Végrehajtó egység 1 2 Lineáris cím Bázis/index cím Belső sínrendszer Barrel shifter ALU regiszterek Deszkriptor regiszterek ALU Limit PLA Mikroutasítások Lapozó egység 4 Fizikai cím TLB 5 6 Eltolási cím Lebegőpontos egység Vezérlő és védelmi egység Lebegőpontos regiszterek Vezérlő ROM 3 Szegmentáló egység Dekódolt utasítások 7 8 14:33:42
Sínvezérlő és utasításkezelő egység 1 Belső sínrendszer 2 CLK Lineáris cím Cache vezérlés Adatsín meghajtó 8 KB cache Sín vezérlés Fizikai cím Órajel sokszorozó Belső órajel Burst sín vezérlés Eltolási cím Prefetcher Mikroutasítások Dekódolt utasítások 7 8 A31-A0 Írási puffer 4 x 32 3 4 5 6 Cím meghajtó Utasítás dekódoló Kód 32 Bájtos kód sor 2 x 16 Bájt D31-D0 MEM/IO INTA NMI INTR HLDA HOLD RESET Sínméret vezérlés Cache vezérlés Paritás generátor Határ ellenőrzés 14:33:42
A Pentium processzor Utasítás dekódoló A31-A0 D63-D0 MEM/IO INTA NMI INTR HLDA HOLD RESET 1 Sínvezérlő egység 2 3 4 5 7 Végrehajtó egység 6 8 Lebegőpontos és MMX egység 14:33:43
Sínvezérlő egység 64 bites adatsín Vezérlés DP logika 32 bites címsín 1 2 A31-A0 D63-D0 MEM/IO INTA NMI INTR HLDA HOLD RESET Adat Vezérlés BIU Lapozó egység APIC 14:33:43
Utasítás dekódoló 1 2 Ugrási cél puffer TLB Utasítás cache 8 (16) KB Vezérlő ROM Prefetch puffer Utasítás dekódoló 6 Vezérlő egység 3 4 5 14:33:43
Végrehajtó egység 3 4 5 Címszámító egység U pipeline Címszámító egység V pipeline Egész műveletvégző egység regiszterei ALU U pipeline ALU V pipeline 7 Barrel shifter 8 TLB 2 Adat cache 8 (16) KB 1 14:33:43
Lebegőpontos és MMX egység 6 MMX egység 7 Lebegőpontos egység Vezérlés Regisztertár Összeadás 8 Szorzás Osztás 14:33:43
A Pentium III processzor 14:33:43
A Pentium 4 processzor 14:33:43
Az AMD K6 processzor 14:33:44
Az AMD K6-2 processzor 14:33:44
Az AMD K6-2 processzor 14:33:45
Az AMD K6-3 processzor 14:33:45
Az AMD Athlon processzor 14:33:45