690 likes | 827 Views
Történeti áttekintés Kezdetben: kevés, egyszerű utasítás. Később: sok, egyre összetettebb utasítás. IBM 360 -as család. Lefelé kompatibilis, csak a nagyobb gépek hajtják végre hardveresen az utasításokat (gyors), a kicsik interpretálnak (olcsó). Interpretálás (mikroprogramozás) előnyei:
E N D
Történeti áttekintés • Kezdetben: kevés, egyszerű utasítás. • Később: sok, egyre összetettebb utasítás. • IBM 360-as család. Lefelé kompatibilis, csak a nagyobb gépek hajtják végre hardveresen az utasításokat (gyors), a kicsik interpretálnak (olcsó). Interpretálás (mikroprogramozás) előnyei: • hibásan interpretált utasítások könnyű javítása, • új utasítások egyszerű hozzáadása, • strukturált felépítés; összetett utasítások hatékony fejlesztése. 9. előadás
Hetvenes évek vége: • a csak olvasásra használható gyors memóriák (vezérlőtárak – ROM Read Only Memory) megjelenése és beépülése a CPU-ba. • az első 8 bites processzorok: - Motorola 68000 egyszerű utasításokkal nagy interpretert épít (siker), - Zilog 8000 bonyolult hardver utasításokat (kudarc). 9. előadás
A nyolcvanas évek elejétől: A központi memória sebessége csaknem elérte a vezérlő tárak sebességét. RISC (Reduced Instruction Set Computer - csökkentett utasításkészletű számítógép): SPARC, DEC Alpha. Cél: minél gyorsabban indítani és átlapolni a gyors, egyszerű utasításokat. Az utasítások általában két regiszteren hajtanak végre műveletet, az eredményt egy harmadik regiszterbe tárolják. CISC (Complex Instruction Set Computer, összetett utasításkészletű számítógép): IBM nagy gépek, VAX, …. Összetett, és lassabb utasítások. 9. előadás
RISC tervezési elvei • hardveres (nem mikroprogramozott) utasítások, • az utasítások indítási sebességének maximalizálása, • könnyen dekódolható utasítások, • memóriához fordulás csak betöltés (load) és tárolás (store) esetén. Sok regiszter kell! Miért nem nyert a RISC? Kompatibilitás + az elveket az Intel is részben átveszi (486-tól RISC mag). 9. előadás
Betöltő/dekódoló egység Elküldő/Végrehajtó egység Befejező egység mikroművelet tár terület Pentium II CPU mikroarchitektúrája(4.46. ábra) Magas szintű csővezeték: Betöltő/Dekódoló: az utasításokat szétdarabolja, a RISC szerű mikroműveleteket ROB-ba teszi (ROB:ReOrder Buffer – mikroművelet tár terület). Elküldő/Végrehajtó: a ROB-ban lévő utasításokat – esetleg eltérő sorrendben – végrehajtja. Befejező: sorrendben befejezi az összes mikroművelet végrehajtását, frissíti a regisztereket. 9. előadás
Betöltö/Dekódoló Utasítás hossz dekódoló 1. szintű I gyorsító tár gyorsító sor betöltő Utasítás sorba állító 0 1 2 IFU1 IFU0 IFU2 ID0 • IFU0: ha a puffere üres, 32 bájtos gyorsító sort tölt be. • IFU1: legfeljebb 30 utasítás határát megkeresi. • IFU2: beteszi egy sorba az utasításokat. • ID0: az egyszerű utasításokat kettő, a többit a harmadik dekódolja (mint Mic-4), mikroműveletenként: • műveleti kód, • két forrás és • egy cél regiszter. 4.47. ábra 9. előadás
4.47. ábra Következő IP Dinamikus elágazás jövendölő Mikroművelet sorba állító (qeuer) A mikroműveletek a ROB-ba mennek Utasítás sorba állító 0 1 2 Regiszter lefoglaló 1. szintű I gyorsító tár Utasítás hossz dekódoló gyorsító sor betöltő ID0 ID1 ROB IFU2 IFU0 IFU1 RAT Mikroművelet sorba állító (sequencer) Statikus elágazás jövendölő • ID1, statikus + dinamikus elágazás jövendölés (4 bites előzmény figyelés). 9. előadás
RAT: 40 firkáló regiszter WAR és WAW feloldására Következő IP Dinamikus elágazás jövendölő Mikroművelet sorba állító (qeuer) A mikroműveletek a ROB-ba mennek Utasítás sorba állító gyorsító sor betöltő Regiszter lefoglaló 0 1 2 Utasítás hossz dekódoló 1. szintű I gyorsító tár ID0 RAT ROB IFU2 IFU0 IFU1 ID1 Mikroművelet sorbaállító (sequencer) Statikus elágazás jövendölő • ROB (ReOrder Buffer): maximum 3 mikroműveletet fogad ciklusonként. 9. előadás
Elküldő/Végrehajtó Ütemezi és végrehajtja a mikroműveleteket, feloldja a függőségeket és erőforrás igény ütközéseket. Egy ciklusban öt művelet is kiosztható. Foglalóhely: 20 elemű sor azoknak a műveleteknek, amelyeknek minden operandusa megvan. Portok: ezekhez kapcsolódnak a végrehajtó egységek. Ha több művelet osztható ki egy végrehajtó egységnek, akkor bonyolult algoritmus dönt, pl.: egy elágazás végrehajtása elsőbbséget élvez egy aritmetikai művelettel szemben. Portonként sorbaállás lehetséges. Foglalóhely 0. port 1. port 2. port 3. port 4. port 9. előadás
Foglalóhely 0. port 1. port 2. port 3. port 4. port MMX végrehajtó egység MMX végrehajtó egység Lebegőpontos végrehajtó egység Lebegőpontos végrehajtó egység ROB Egész végrehajtó egység Egész végrehajtó egység Betöltő egység Betöltések Tároló egység Tárolások Tárolások Tároló egység Elküldő/Végrehajtó(4.48. ábra) 9. előadás
Betöltő/dekódoló egység Elküldő/Végrehajtó egység Befejező egység mikroművelet tár terület Befejező (4.46. ábra) Ez küldi az eredményeket a megfelelő helyre – regiszterbe és az Elküldő/Végrehajtóba, ahol az eredményre várnak RAW függőség esetén. Az utasításokat a programban lévő sorrendben fejezi be, még akkor is, ha a végrehajtás sorrendje ettől eltért.A feltételesen végrehajtott utasítások eredményét eldobja, ha ezeket az utasításokat nem kellett volna végrehajtani. 9. előadás
2. Szintű gyorsító tár felé Lokális sín a PCI hídhoz Sín illesztő egység 1. szintű I gyorsító tár 1. szintű D gyorsító tár Betöltő/dekódoló egység Elküldő/Végrehajtó egység Befejező egység mikroművelet tár terület Pentium II CPU mikroarchitektúrája(4.46. ábra) 9. előadás
UltraSPARC II CPU mikroarchitektúrája A SPARC sorozat RISC elgondoláson alapul. A legtöbb utasításnak két forrás és egy cél regisztere van. PREFETCH utasítás feltételezett betöltésre, nem okoz gyorsító sor cserét gyorsító tár hiánykor. 2 bites elágazás jövendölő + statikus elágazás jövendölés. 9. előadás
Előre betöltő/Elküldő (4.49. ábra): ciklusonként négy utasítást tölt be – egy fél gyorsító sort, és dekódolja. Dekódoló: Néhány „irányító” bitet ad minden utasításhoz, ezzel a későbbi folyamatot gyorsítja. Maximum 12 elemű sort épít. A kiosztás sorrendben történik. Fő memória Memória illesztő egység 2. szintű gyorsító tár Külső gyorsító tár egység Előre betöltő/Elküldő 1. szintű I gyorsító tár Dekódoló Csoportosító logika 9. előadás
Egész végrehajtó Betöltő/Tároló Lebegőpontos egység Egész regiszterek 1. szintű D gyorsító FP regiszterek ALU ALU Betöltő sor Tároló sor FP ALU FP ALU Grafikai egység Csoportosító logika: egyszerre maximum 4 (2 fix- és 2 lebegőpontos) utasítást tud kiosztani a sorból. A kiosztás és befejezés a sorrendtől eltérő lehet. Az egész és lebegőpontos egység tejesen független. Betöltő/Tároló: írás áteresztő. A gyorsító tár hiány miatti várakozás elkerülésére külön sor a függőben lévő LOAD-ok és STORE-ok számára. Csoportosító logika 9. előadás
Egész végrehajtó Betöltő/Tároló Lebegőpontos egység Egész regiszterek 1. szintű D gyorsító tár FP regiszterek ALU ALU Betöltő sor Tároló sor FP ALU FP ALU Grafikai egység Fő memória Memória illesztő egység 2. szintű gyorsító Külső gyorsító egység Előre betöltő/Elküldő Az UltraSPARC II mikroarchitektúrája (4.49. ábra) 1. szintű I gyorsító tár Dekódoló Csoportosító logika 9. előadás
9 szakaszos csővezeték (4.50. ábra) Betölt Dekódol Csoportosít Regiszter Végrehajt Gyorsító tár X1 FP/Grafikus csővezeték Egész csővezeték N1 X2 N2 X3 N3 ír • max. 4 utasítás az I-gyorsítóból, • irányító bitek az utasításokhoz, • kioszt annyi utasítást, ahányat tud • csapda kezelés • regiszterekbe írás 9. előadás
Betölt Dekódol Csoportosít Végrehajt Regiszter Gyorsító tár X1 FP/Grafikus csővezeték Egész csővezeték N1 X2 X3 N2 N3 ír 4 - 7. szakasz • a fix pontos utasítások 1 ciklus alatt végrehajtódnak + 3 üres szakasz, • LOAD és STORE még dolgozik a gyorsító tár szakaszban + 2 üres szakasz, • a lebegőpontos utasítások a regiszterek eléréséhez általában 1 szakaszt igényelnek + 3-at a végrehajtáshoz. 9. előadás
picoJava II CPU mikroarchitektúrája (4.51. ábra) Nem szuperskaláris: a mikroműveleteket a kiosztás sorrendjében hajtja végre és fejezi be (a fő cél az volt, hogy olcsó legyen). Regiszter oszlop: 64 db 32 bites regiszter, a verem tetején lévő szavakat tartalmazza. Automatikus eljárás (cselező – dribbling):a regiszter oszlop ne legyen túl tele vagy túl üres. Ciklikus puffer 2 mutatóval: nem kell másolgatni. 9. előadás
picoJava II CPU mikro-architektúrája (4.51. ábra) Memória és B/K sín illesztő egység 32 32 0-16 KB I gyorsító tár 0-16 KB D gyorsító tár 32 32 Előre betöltő, dekódoló, összevonó egység Végrehajtást vezérlő egység Egész és lebegőpontos egység 2x32 3x32 64 db 32 bites regiszter Regiszter oszlop A regiszter oszlop közvetlenül, a D gyorsító egy ciklus késleltetéssel érhető el. 9. előadás
Betöltés az I gyorsítótárból Dekódolás, összevonás Operandusok a veremből Utasítás végrehajtás D gyorsítóba írás Eredmények verembe írása picoJava II csővezetéke (4.52. ábra) Nem szuperskaláris, a mikroműveleteket a kiosztás sorrendjében hajtja végre. • Betöltés: egyszerre 8 bájt az I gyorsítótárból. • Dekódolás: RISC jellegű, két forrás és egy cél regisztert tartalmazó mikroutasításokat állít előa CISC utasítás folyamból. • Operandus betöltés a veremből (regiszter oszlopból). • Utasítás végrehajtás. • Ha kell, a D gyorsítóba írás. • Eredmények verembe írása, ha kell. 9. előadás
Utasítás összevonás, pl.: n=k+m; (4.53. ábra) Összevont utasítás után ILOAD k után ILOAD m után ISTORE n után IADD után Kezdetben Kezdetben A dekódoló egyetlen mikroműveletté vonja össze. 9. előadás
Utasítás csoportok (4.54. ábra) JVM-nek több utasítása van, mint IJVM-nek! Több utasítás tartozik egy csoportba. 9. előadás
Utasítások összevonása A dekódoló figyeli, hogy a sorozat megfelel-e egy legfeljebb 4 hosszú mintának (4.55. ábra). Ha megfelel, akkor a sorozatot egyetlen mikroutasítással helyettesíti. 74 bites mikroműveleteket oszt ki, ezek legtöbbje egy kódot és három regisztert tartalmaz, és egy ciklusban végrehajtható. 9. előadás
Elágazás jövendölés: nem lesz elágazás! Inkább olcsó, mint bonyolult hardver! 9. előadás
Összehasonlítás Pentium II CISC gép egy CISC utasítás → több RISC mikroutasítás UltraSPARC II RISC gép picoJava II verem gép, sok memória hivatkozás több CISC utasítás → egy RISC mikroutasítás 9. előadás
Makró és blokk ismétlés Makró definíció: M_név MACRO [fpar1[,fpar2...]] ; makró fej (kezdet) ... ; makró törzs ENDM ; makró vége fpar1,fpar2... formális paraméterek vagy egyszerűen paraméterek. 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 másik makró definíció is. 9. előadás
Makró hívás: M_név [apar1[,apar2...]] apar1,apar2... aktuális paraméterek/argumentumok. 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. Makró hívás argumentuma sem lehet makró hívás. Az argumentumnak megfelelő formális paraméternek lehet olyan előfordulása, amely a későbbiek során makró hívást eredményez. 9. előadás
Ha a programban valahol dupla szavas összeadást kell végezzünk, akkor hívnunk kell az eljárást illetve a makrót: 9. előadás
Látható, hogy eljárás esetén kettővel több utasítást kell végrehajtanunk, mint makró esetében (CALL EDADD és RET). Még nagyobb különbséget tapasztalunk, ha (CX:BX) helyett paraméterként kívánjuk megadni az egyik összeadandót: 9. előadás
Most sem része a makró definíció a lefordított programnak. 9. előadás
Paraméter másutt is előfordulhat a makró törzsben, nemcsak az operandus részen, pl.: PL macro p1,P2 mov ax,p1 P2 p1 endm PL Adat, INC hatása: mov ax,Adat INC Adat 9. előadás
A &, %, ! karakterek továbbá a <> és ;; speciális szerepet töltenek be makró kifejtéskor. & (helyettesítés operátor): • ha a paraméter – helyettesített – értéke része egy szónak; • idézeten belüli helyettesítés: errgen macro y, x err&y db ’Error &y: &x’ endm errgen 5, <Unreadable disk> hatása: err5 db ’Error 5: Unreadable disk’ 9. előadás
<> (literál szöveg operátor): Ha aktuális paraméter szóközt vagy ,-t is tartalmaz. Az előző példa eredménye <> nélkül: errgen 5, Unreadable disk kifejtve: err5 db ’Error 5: Unreadable’ adat macro p db p endm adat <’abc’,13,10,0> adat ’abc’,13,10,0 kifejtve: db ’abc’,13,10,0 db ’abc’ 9. előadás
! (literál karakter operátor): Az utána következő karaktert makró kifejtéskor közönséges karakterként kell kezelni. Pl.: a korábbi errgen makró errgen 103, <Expression !> 255> hívásának hatása: err103 db ’Error 103: Expression > 255’ de errgen 103, <Expression > 255> hívásának hatása: err103 db ’Error 103: Expression ’ 9. előadás
% (kifejezés operátor): Az utána lévő argumentum (kifejezés is lehet) értéke – és nem a szövege – lesz az aktuális paraméter. Pl.: sym1 equ 100 sym2 equ 200 txt equ ’Ez egy szöveg’ kif macro exp, val db ”&exp = &val” endm kif <sym1+sym2>, %(sym1+sym2) kif txt, %txt db ”sym1+sym2 = 300” db ”txt = ’Ez egy szöveg’” 9. előadás
Az alábbi példa a % használatán kívül a makró törzsön belüli makró hívást is bemutatja: s = 0 ErrMsg MACRO text s = s+1 Msg %s,text ENDM Msg MACRO sz,str msg&sz db str ENDM 9. előadás
ErrMsg ’syntax error’ makró hívás hatására bemásolásra kerül (.LALL hatására látszik a listán) az s = s+1 Msg %s,’syntax error’ szöveg. s értéke itt 1-re változik. Újabb makró hívás (Msg). A %s paraméter az értékére (1) cserélődik, majd kifejtésre kerül ez a makró is, ebből kialakul: msg1 db ’syntax error’ 9. előadás
Egy újabb hívás és hatása: ErrMsg ’invalid operand’ msg2 db ’invalid operand’ 9. előadás
;;(makró kommentár): A makró definíció megjegyzéseinek kezdetét jelzi. A ;; utáni megjegyzés a makró kifejtés listájában nem jelenik meg. 9. előadás
LOCAL c1[,c2...] c1, c2, ...minden makró híváskor 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. KOPOG macro n LOCAL ujra mov cx,n ujra: KOPP loop ujra endm Ha a programban többször hívnánk a KOPOG makrót, akkor a LOCAL operátor nélkül az ujra címke többször lenne definiálva. 9. előadás
Makró definíció belsejében lehet másik makró definíció is. A belső makró definíció csak a külső makró meghívása után jut érvényre, válik láthatóvá. Pl.: shifts macro OPNAME ; makrót ; definiáló makró OPNAME&S MACRO OPERANDUS,N mov cl, N OPNAME OPERANDUS,cl ENDM endm 9. előadás
shifts macro OPNAME ; makrót ; definiáló makró OPNAME&S MACRO OPERANDUS,N mov cl, N OPNAME OPERANDUS,cl ENDM endm Ha ezt a makrót felhívjuk pl.: shifts ROR akkor a RORS MACRO OPERANDUS,N mov cl, N ROR OPERANDUS,cl ENDM makró definíció generálódik. 9. előadás
RORS MACRO OPERANDUS,N mov cl, N ROR OPERANDUS,cl ENDM Mostantól meghívható a RORS makró is, pl.: RORS AX, 5 aminek a hatása: mov cl, 5 ROR AX,cl 9. előadás
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). PUSHALL macro reg1,reg2,reg3,reg4,reg5 IFNB <reg1> ;; ha a paraméter nem üres push reg1 ;; az első regiszter mentése PUSHALL reg2,reg3,reg4,reg5 ;; rekurzió ENDIF ENDM Most pl. a PUSHALL ax, bx, cx makró hívás hatása: push ax push bx push cx 9. előadás
PUSHALL macro reg1,reg2,reg3,reg4,reg5 IFNB <reg1> ;; ha a paraméter nem üres push reg1 ;; az első regiszter mentése PUSHALL reg2,reg3,reg4,reg5 ;; rekurzió ENDIF ENDM PUSHALL ax, bx, cx makró hívás hatása: push ax PUSHALL bx, cx az újabb hívás hatása: push bx PUSHALL cx az újabb hívás hatása: push cx PUSHALL ennek hatására nem generálódik semmi. 9. előadás
FL_CALLELJ = 0 CALLELJ macro ;;Eljárást beépítő és felhívó makró LOCAL FIRST ;;nem lenne fontos IF FL_CALLELJ ;;a 2. hívástól igaz call Elj ;;elég felhívni az eljárást EXITM ;;makró helyettesítés vége ENDIF FL_CALLELJ = 1 ;;csak az első híváskor JMP FIRST ;;jut érvényre Elj proc ;;eljárás deklaráció ... ret Elj endp FIRST: call Elj ;;az eljárás felhívása endm 9. előadás
Az első CALLELJ hívás hatására az FL_CALLELJ = 1 JMP ??0000 Elj proc ... ret Elj endp ??0000: call Elj utasítások generálódnak (??0000a FIRST-ből keletkezett). 9. előadás