Máté: Architektúrák7. előadás1 A verem két felső szavának cseréje (4.17. ábra) Megállapodás szerint TOS tartalmazza a verem tetején lévő szót! Ez többnyire előny. swap1MAR = SP – 1; rd // A 2. szó címe, olvasásMAR → B swap2MAR = SP // MAR a verem tetejére mutatMAR → A MDR B SP → A B
Máté: Architektúrák7. előadás2 A verem két felső szavának cseréje (4.17. ábra) swap1MAR = SP – 1; rd // A 2. szó címe, olvasásMAR → B swap2MAR = SP // MAR a verem tetejére mutatMAR → A MDR B swap3H = MDR; wr // 2. szó H-ba, verem tetejéreH = B MDR (MAR) swap4MDR = TOS // verem régi tetejeMDR = A swap4-ben előny, hogy TOS tartalmazza a verem tetején lévő szót. SP → B B
Máté: Architektúrák7. előadás3 A verem két felső szavának cseréje (4.17. ábra) swap1MAR = SP – 1; rd // A 2. szó címe, olvasásMAR → B swap2MAR = SP // MAR a verem tetejére mutatMAR → A MDR B swap3H = MDR; wr // 2. szó H-ba, verem tetejéreH = B MDR (MAR) swap4MDR = TOS // verem régi tetejeMDR = A swap5MAR = SP – 1; wr // a 2. szóbaMAR → B MDR (MAR) swap6TOS = H; goto Main1 // TOS frissítése swap6-ban hátrány, mert ez az utasítás csak azért kell, hogy TOS tartalmazza a verem tetején lévő szót. SP → B A
Máté: Architektúrák7. előadás4 A verem két felső szavának cseréje (4.17. ábra)
Máté: Architektúrák6. előadás5 A WIDE utasítás A WIDE utasítás valójában prefixum: önmagában nem csinál semmit, csak jelzi, hogy a következő utasításnak 16 bites indexe van. Pl.: ILOAD varnumlokális változó a verembe varnum a lokális változó 8 bites indexe. WIDE ILOAD varnumlokális változó a verembe varnum a lokális változó 16 bites indexe. w_iload1 címe = iload1 címe + 0x100
Máté: Architektúrák6. előadás6 Main1PC = PC + 1; fetch; goto(MBR)MBR = ILOAD iload1H = LV MBR varnum iload2MAR = H + MBRU; rd // rd(LV+varnum) iload3MAR = SP = SP + 1 MDR (MAR) iload4PC = PC + 1; fetch; wr (MAR) MDR iload5TOS = MDR; goto Main1 MBR opkód ILOAD varnumlokális változó a verembe varnum a lokális változó 8 bites indexe.
Máté: Architektúrák6. előadás7 Main1PC = PC + 1; fetch; goto(MBR)MBR = WIDE iload1H = LV iload2MAR = H + MBRU; rd // rd(LV+varnum) iload3MAR = SP = SP + 1 MDR (MAR) iload4PC = PC + 1; fetch; wr (MAR) MDR iload5TOS = MDR; goto Main1 MBR opkód wide1PC = PC + 1; fetch; goto(MBR OR 0x100) MBR ILOAD w_iload1PC = PC + 1; fetch // index 2. bájtja MBR 1. bájt w_iload2H = MBRU << 8 // 1. bájt léptetése MBR 2. bájt w_iload3H = H OR MBRU // H = a 16 bites index w_iload4MAR = LV + H; rd; goto iload3rd(LV+varnum) WIDE ILOAD varnumlokális változó a verembe varnum a lokális változó 16 bites indexe.
Máté: Architektúrák6. előadás8
Máté: Architektúrák6. előadás9 Az GOTO offset utasítás. PC relatív: PC értékéhez hozzá kell adni a két bájtos, előjeles offset értékét. Mic-1 program: Main1PC = PC + 1; fetch; goto(MBR) goto1OPC=PC–1 // Main1-nél : PC=PC+1 MBR 1. bájt goto2PC=PC+1; fetch // offset 2. bájtja goto3H=MBR<<8 // 1. (előjeles) bájt <<8 MBR 2. bájt goto4H=MBRU OR H // 16 bites offset goto5PC=OPC+H; fetch; goto (Main1)// PC új értéke Main1PC = PC + 1; fetch; goto(MBR) MBR opkód goto5 kezdeményezi a PC új értékénél lévő bájt olvasását, Main1-ben goto(MBR) már a folytatás első opkódjának megfelelő címre ugrik!
Máté: Architektúrák6. előadás10 A IFLT offset utasítás (Mic-1) Kivesz egy szót a veremből és ugrik, ha negatív. iflt1MAR=SP=SP–1; rd // 2. szó a veremből iflt2OPC=TOS // TOS mentése iflt3TOS=MDR // TOS= a verem új teteje iflt4N=OPC; if(N) goto T; else goto F //elágazás TOPC=PC–1; goto goto2 // igaz ág FPC=PC+1 // hamis ág, át kell lépni offset-et F2PC=PC+1; fetch; goto (Main1) // PC új értéke a folytatás 1. utasításának betöltése Fontos: T címe = F címe + 0x100
Máté: Architektúrák6. előadás11 INVOKEVIRTUAL disp (4.12. ábra), A CPP által mutatott területen a disp (2 bájt) indexű szó mutat a meghívandó metódus kezdő szavára. Ennek a szónak - az első két bájtja tartalmazza a metódus paramétereinek számát, - a második két bájtja a metódus lokális változóinak számát. A metódus végrehajtása a metódus 5. bájtján indul.
Máté: Architektúrák6. előadás12 INVOKEVIRTUAL disp (~4.12. ábra) Hívó LV-je Hívó PC-je Hívott lokális változóinak helye 3. paraméter 2. paraméter 1. paraméter Kapcsoló mutató Előző LV Előző PC Hívó lokális változóinak helye 2. paraméter 1. paraméter Kapcsoló mutató 3. paraméter 2. paraméter 1. paraméter OBJREF Előző LV Előző PC Hívó lokális változóinak helye 2. paraméter 1. paraméter Kapcsoló mutató ← LV ← SP A verem új alapja Betett paraméterek A verem alapja hívás előtt A hívó lokális területe verem a hívás előtt verem a hívás után
Máté: Architektúrák6. előadás13 INVOKEVIRTUAL disp A CPP által mutatott táblázat disp indexű eleme a meghívandó metódusra mutat. disp első bájtjának MBR-be olvasását már Main1 kezdeményezte. invo1PC = PC + 1; fetch // disp 2. bájtját olvassa invo2H = MBRU << 8 // disp 1. bájtját lépteti invo3H = H OR MBRU // H = disp invo4MAR = CPP + H; rd // kezdő cím olvasása invo5OPC = PC + 1 // OldPC = visszatérési cím A könyvben MBRU OR H szerepel, az OR művelet kommutativitása miatt megengedhető.
Máté: Architektúrák6. előadás14 INVOKEVIRTUAL: a metódus elején lévő 2 bájt tartalmazza a paraméterek számát. invo6PC = MDR; fetch // PC: új metódus eleje invo7PC = PC + 1; fetch // paraméterek száma invo8H = MBRU << 8 invo9H = H OR MBRU // H = paraméterek száma invo10TOS = SP – H // OBJREF is paraméter! invo11TOS = MAR = TOS + 1 // OBJREF címe TOS-ban tároljuk ideiglenesen OBJREF címét, ide mutat majd a hívott metódus LV-je. Az utasítások sorrendje más, mint a könyvben!
Máté: Architektúrák6. előadás15 INVOKEVIRTUAL: lokálisok száma 2 bájt a paraméterek száma után, OBJREF cseréje, ide kerül a lokális változók fölötti címre mutató Kapcsoló mutató. A mutatott címre kerül majd a Hívó PC-je. TOS = MAR = OBJREF címe invo12PC = PC + 1; fetch // lokálisok száma 1. bájt invo13PC = PC + 1; fetch // lokálisok száma 2. bájt invo14H = MBRU << 8 invo15H = H OR MBRU // H = lokálisok száma invo16MDR = H + SP + 1; wr // OBJREF cseréje TOS = OBJREF címe
Máté: Architektúrák6. előadás16 ← SP INVOKEVIRTUAL disp (~4.12. ábra) Hívó LV-je Hívó PC-je Hívott lokális változóinak helye 3. paraméter 2. paraméter 1. paraméter Kapcsoló mutató Előző LV Előző PC Hívó lokális változóinak helye 2. paraméter 1. paraméter Kapcsoló mutató 3. paraméter 2. paraméter 1. paraméter OBJREF Előző LV Előző PC Hívó lokális változóinak helye 2. paraméter 1. paraméter Kapcsoló mutató ← LV ← SP A verem új alapja Betett paraméterek A verem alapja hívás előtt A hívó lokális területe verem a hívás előtt verem a hívás után ← SP
Máté: Architektúrák6. előadás17 INVOKEVIRTUAL: a hívó PC-je és LV-je TOS = OBJREF címe invo17MAR = SP = MDR // hívó PC-jének helye invo18MDR = OPC; wr // hívó PC vermelése invo19MAR = SP = SP + 1 // hívó LV-jének a helye invo20MDR = LV; wr // hívó LV-jének vermelése invo21PC = PC + 1; fetch // utasítás olvasás invo22LV = TOS // LV új értéke invo23TOS = MDR; goto Main1 // TOS=hívó LV-je TOS = MDR nélkül TOS a Kapcsoló mutató címét (a hívott LV-jét) tartalmazná!
Máté: Architektúrák6. előadás18 IRETURN ~4.12. ábra Visszatérési é. Hívó LV-je Hívó PC-je Hívott lokális változóinak helye 3. paraméter 2. paraméter 1. paraméter Kapcsoló mutató Előző LV Előző PC Hívó lokális változóinak helye 2. paraméter 1. paraméter Kapcsoló mutató Visszatérési é. Előző LV Előző PC Hívó lokális változóinak helye 2. paraméter 1. paraméter Kapcsoló mutató ← LV ← SP Betett paraméterek A verem alapja IRETURN után A hívó lokális területe A verem alapja IRETURN előtt Verem IRETURN előtt Verem IRETURN után
Máté: Architektúrák6. előadás19 IRETURN // ~4.13. ábra iret1MAR = SP = LV; rd // kapcs. mut. olvasása iret2H = H // vár, hogy az olvasás befejeződjön iret3LV = MAR = MDR; rd // hívó PC olvasása iret4MAR = LV + 1; rd // hívó LV címe iret5PC = MDR; fetch // hívó PC, opkód olv. iret6MAR = SP // visszatérési érték címe iret7LV = MDR // hívó LV iret8MDR = TOS; wr; goto Main1 iret3-4: MAR nem lehet SOURCE operandus!
Máté: Architektúrák6. előadás20
Máté: Architektúrák6. előadás21 Házi feladat: A ábra többi része. Továbbfejlesztések: több sínes rendszerek.
Máté: Architektúrák6. előadás22 Input, output, interfész, I/O lapkák UART (Universal Asynchronous Receiver and Transmitter) egy bájtot tud olvasni az adatsínről, és aztán sorosan továbbítja az eszközhöz (vagy fordítva), programmal konfigurálható (belső regiszterének beállításával): 5-8 bit szélesség, sebesség ( bps), paritás ellenőrzés (páros, páratlan, nincs). USART (Universal Synchronous Asynchronous Receiver and Transmitter): szinkron és aszinkron módon is tud működni.
Máté: Architektúrák6. előadás23 PIO (Parallel Input/Output, ábra) 24 B/K vonal, amellyel TTL kompatibilis eszközökhöz (billentyűzet, kapcsolók, nyomtatók) tud kapcsolódni. Konfigurálható. Leggyakoribb az ábrán látható használat. Aszinkron eszközökhöz „kézfogás” logika van beépítve. 8255A párhuzamos B/K lapka Port A Port B Port C #CS A0-A1 #WR #RD RESET D0-D7
Máté: Architektúrák6. előadás24 Beviteli/Kiviteli (B/K, Input/Output, I/O) eszközök használata (chip selection): Valódi B/K eszköz. Memóriára leképezett B/K (memory-mapped I/O). Pl.: ábra K 64 K 2 KB EPROM a 0 címnél 2 KB RAM a 8000H címnél 4 B PIO az FFFCH címnél
Máté: Architektúrák6. előadás ábra. Teljes cím dekódolás. A 15 a legmagasabb helyértékű bit K 64 K 2 KB EPROM a 0 címnél 2 KB RAM a 8000H címnél 4 B PIO az FFFCH címnél #CS EPROM #CS RAM #CS PIO A 15 A0A0 A 11
Máté: Architektúrák6. előadás ábra. Részleges cím dekódolás K 64 K 2 KB EPROM a 0 címnél 2 KB RAM a 8000H címnél 4 B PIO az FFFCH címnél #CS EPROM #CS RAM #CS PIO A0A0 A 15
Máté: Architektúrák6. előadás27 Input, output (I/O) utasítások A külvilággal történő információ csere port-okon (kapukon) keresztül zajlik. A kapu egy memória cím, az információ csere erre a címre történő írással, vagy erről a címről való olvasással történik. Egy-egy cím vagy cím csoport egy-egy perifériához kötődik. A központi egység oldaláról a folyamat egységesen az input és az output utasítással történik.
Máté: Architektúrák6. előadás28 A periféria oldaláról a helyzet nem ilyen egyszerű. Az input információ „csomagokban” érkezik, az output információt „csomagolva” kell küldeni. A csomagolás (vezérlő információ) mondja meg, hogy hogyan kell kezelni a csomagba rejtett információt (adatot). Éppen ezért az operációs rendszerek olyan egyszerűen használható eljárásokat tartalmaznak, amelyek elvégzik a ki- és becsomagolás munkáját, és ezáltal lényegesen megkönnyítik a külvilággal való kommunikációt.
Máté: Architektúrák6. előadás29 Input/output ( ábra) Az I/O vezérlő regiszterei (5.31. ábra). Terminál: külön regiszterek az inputra és outputra. Beírt karakterMegjelenítendő karakter Billentyűzet puffereKépernyő puffere Megszakítás engedélyezett Billentyűzet állapotKépernyő állapot Van beírt karakter Kész a következő karakter fogadására
Máté: Architektúrák6. előadás30 programozott B/K (5.32. ábra) tevékeny várakozás (pollozásos technika): public static void output_buffer(int buf[], int count) { // count számú bájt kiírása buf-ból az eszközre int status, i, ready; for(i=0; i < count; i++) { do { status = in(display_status_reg); // az állapot lekérdezése ready = (status >> 7) & 0x01; // a kész bit elkülönítése } while(ready != 1); out(display_buffer_reg, buf[i]); }
Máté: Architektúrák6. előadás31 megszakítás vezérelt B/K az eszköz megkapja a feladatát, majd ha elkészült, beállítja a „Megszakítás engedélyezett” bitet, addig a központi egység más feladatot végezhet. DMA (Direct Memory Access, ábra) a DMA önállóan végzi az eszköz figyelését és az adatok mozgatását CPU DMA cím számláló eszköz irány Memória Cikluslopás.
Máté: Architektúrák6. előadás32 Megszakítás rendszer, interrupt utasítások Az I/O utasítás lassú a CPU gyors, a CPU várakozni kényszerül I/O regiszter (port): a port és a központi egység közötti információ átadás gyors, a periféria autonóm módon elvégzi a feladatát. Újabb perifériához fordulás esetén a CPU várakozni kényszerülhet. Pollozásos technika (~tevékeny várakozás): a futó program időről időre megkérdezi a periféria állapotát, és csak akkor ad ki újabb I/O utasítást, amikor a periféria már fogadni tudja. A hatékonyság az éppen futó programtól függ.
Máté: Architektúrák6. előadás33 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 úgynevezett megszakítás kezelő végrehajtását kezdi meg. Miután a megszakítás kezelő 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ított programnak.
Máté: Architektúrák6. előadás34 A megszakító rutin megszakítható-e? Gyors periféria kiszolgálása közben megszakítás kérés, … „Alap” állapot – „megszakítási” állapot, megszakítási állapotban nem lehet újabb megszakítás. Hierarchia: megszakítási állapotban csak magasabb szintű ok eredményezhet megszakítást. Bizonyos utasítások csak a központi egység bizonyos kitüntetett állapotában hajthatók végre, alap állapotban nem → csapda, szoftver megszakítás. Megoldható az operációs rendszer védelme, a tár védelem stb. A megoldás nem tökéletes: vírus.
Máté: Architektúrák6. előadás35 Csapda és megszakítás Csapda (trap): A program által előidézett feltétel (pl. túlcsordulás) hatására automatikus eljárás hívás. Csapda kezelő. Megszakítás (interrupt): Olyan automatikus eljárás hívás, amit általában nem a futó program, hanem valamilyen B/K eszköz idéz elő, pl. a program utasítja a lemezegységet, hogy kezdje el az adatátvitelt, és annak végeztével megszakítást küldjön. Megszakítás kezelő. A csapda a programmal szinkronizált, a megszakítás nem.
Máté: Architektúrák6. előadás36 Pl.: Egy sornyi karakter képernyőre írása a terminálon. Előkészítés: Egy rendszerprogram összegyűjti a kiírandó karaktereket egy pufferben, beállít egy globális változót, hogy mutasson a puffer elejére, egy másik globális változóban megadja a karakterek számát. Megnézi, hogy a terminál tud-e adatot fogadni (5.31. ábra), és ha igen, akkor elindítja az első karakter kiíratását. Ekkor a CPU fölszabadul egy másik program futtatására. A terminál a képernyőre írja a karaktert, és megszakítást kezdeményez. A megszakítás kezelő újabb karakter kiírását kezdeményezi...
Máté: Architektúrák6. előadás37 Megszakítás kezelés (3.43. ábra) 8259A Megszakítás vezérlő berendezések CPU INT INTA# RD# WR# A0# CS# D0-D7 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 IRi , INT , ha CPU tudja fogadni, akkor INTA# , i D0-D7, a CPU megszakításvektor táblázat i –edik eleméből tudja a megszakítást kiszolgáló eljárás kezdőcímét, megszakítás … Nyolcnál több eszköz kiszolgálásához több megszakítás vezérlő kapcsolható össze.
Máté: Architektúrák6. előadás38 Megszakítás Hardver tevékenységek (3.42. ábra): 1.Az eszköz vezérlő megszakítás jelet tesz a sínre, 2.ha a CPU fogadni tudja a megszakítást, nyugtázza, 3.az eszköz vezérlője az eszköz azonosítószámát (megszakítás-vektor) elküldi a sínen, 4.ezt a CPU átmenetileg tárolja, 5.a CPU a verembe teszi az utasításszámláló aktuális értékét és a PSW-t, 6.a CPU az azonosító indexű megszakítás kezelő címét teszi az utasításszámlálóba és gyakran betölti vagy módosítja PSW-t.
Máté: Architektúrák6. előadás39 Szoftver tevékenységek (terminálra íráskor): 7.menti a használni kívánt regisztereket, 8.kiolvassa egy eszközregiszterből a terminál számát, 9.beolvassa az állapotkódot, 10.ha B/K hiba történt, itt lehet kezelni, 11.aktualizálja a mutatót és a számlálót, a kimenő pufferbe írja a következő karaktert, ha van, 12.visszajelez az eszköz vezérlőnek, hogy készen van, 13.visszaállítja a mentett regisztereket, 14.visszatér a megszakításból, itt történik a PSW eredeti értékének visszaállítása is.
Máté: Architektúrák6. előadás40 Átlátszóság: Amikor bekövetkezik egy megszakítás, akkor bizonyos utasítások végrehajtódnak, de amikor ennek vége, a CPU ugyanolyan állapotba kerül, mint amilyenben a megszakítás bekövetkezése előtt volt. Ha sok eszköz van a rendszerben, akkor célszerű, ha egy megszakítás kiszolgálása közben másik megszakítás is történhet, ilyenkor a megszakítások hierarchiába vannak rendezve (5.46. ábra).
Máté: Architektúrák6. előadás ábra ISR: Interrupt Service Routine Felhasználói program RS232 ISR Lemez ISR Felhasználói program Nyom- tató ISR Nyomtató megszakítás 2-es elsőbbséggel RS232 megszakítás 5-ös elsőbbséggel Nyomtató ISR befejeződik Lemez ISR befejeződik RS232 ISR befejeződik, lemez megszakítás keletkezik A lemez 4-es elsőbbségű megszakítási kérelme függőben marad Nyomtató Felhasz- náló Nyomtató Felhasz- náló Verem
Máté: Architektúrák6. előadás42 Feladatok Mire szolgál a SWAP utasítás? Hogy valósítható meg a SWAP utasítás? Mire szolgál a WIDE utasítás? Hogy valósítható meg a WIDE utasítás? Mire szolgál az ILOAD utasítás? Hogy valósítható meg az ILOAD utasítás? Mire szolgál a WIDE ILOAD utasítás? Hogy valósítható meg a WIDE ILOAD utasítás? Mire szolgál a GOTO utasítás? Hogy valósítható meg a GOTO utasítás?
Máté: Architektúrák6. előadás43 Feladatok Melyek az IJVM feltételes ugró utasításai? Mire szolgál az IFLT utasítás? Hogy valósítható meg az IFLT utasítás? Mit nevezünk metódusnak? IJVM melyik utasítása szolgál a metódus hívására? Mire szolgál az INVOKEVIRTUAL utasítás? Hol található az INVOKEVIRTUAL disp utasítással hívott metódus? Milyen információ van a metódus elején? Hogy néz ki a veremnek egy metódus számára látható része?
Máté: Architektúrák6. előadás44 Feladatok Mely regiszterek tartalmát kell menteni metódus hívás esetén? IJVM melyik utasítása szolgál a metódusból való visszatérésre? Hogy találhatók meg a mentett regiszter tartalmak visszatéréskor? Miért nem lenne jó IRETURN megvalósításában: iret3:MAR = MDR; rd iret4:MAR = MAR + 1? Hol található a metódus visszatérési értéke az IRETURN utasítás után?
Máté: Architektúrák6. előadás45 Feladatok Az IRETURN utasítás mikroprogramozását úgy is megvalósíthattuk volna, hogy a Kapcsoló mutatót nem használjuk, hanem SP értékéből indulunk ki. Hogyan? Így 7 utasítás is elegendő lett volna. Miért jobb mégis az előadáson bemutatott megoldás? Elemezze a ábra programjait!
Máté: Architektúrák6. előadás46 Feladatok Mi az UART? Mire szolgál az UART? Paritás ellenőrzés szempontjából hogy működhet az UART? Mi az USART? Milyen digitális áramkörök segítségével tudja megvalósítani a párhuzamos-soros átalakítást? Mit jelent a CS# jelölés egy chip lábán? Mit jelent a PIO rövidítés? Milyen lábai vannak PIO lapkának? Hány regisztere van PIO lapkának?
Máté: Architektúrák6. előadás47 Feladatok Mi biztosítja, hogy kapcsolók állapotának lekérdezésére és lámpák működtetésére is használható a PIO lapka? Mit jelent a valódi/memóriára leképezett I/O? Melyiknek mi az előnye, hátránya? Mit nevezünk teljes/részleges cím dekódolásnak? Melyiknek mi az előnye, hátránya? Mit nevezünk port-nak?
Máté: Architektúrák6. előadás48 Feladatok Milyen vezérlő regiszterei vannak egy terminálnak? Mire szolgál a terminál billentyűzet puffer regisztere? Hogyan történik a programozott B/K? Mit nevezünk pollozásos technikának? Mire használható a DMA? Hogy működik a DMA? Milyen regiszterei vannak a DMA-nak?
Máté: Architektúrák6. előadás49 Feladatok Mit nevezünk program megszakításnak? Mi a megszakítás kezelő? Hogyan történhet a nyomtatás szervezése megszakítás segítségével? Megszakítható-e a megszakítás kezelő? Mi a csapda? Mi a különbség a csapda és a megszakítás között? Hogy működik a 8259A megszakítás vezérlő lapka? Milyen hardver és milyen szoftver tevékenységek tartoznak a megszakításhoz? Mit jelent az átlátszóság megszakítás esetén?