Máté: Architektúrák10. előadás1 Operációs rendszer szintje Operating System Machine (OSM) Ezen a szinten programozóknak rendelkezésre állnak a felhasználói módban használható ISA szintű utasítások és az operációs rendszer által hozzáadott utasítások: rendszerhívások (system calls). Ezeket az operációs rendszer eljárásai valósítják meg (értelmezés).
Máté: Architektúrák10. előadás2 Virtuális memória Régen nagyon kicsi volt a memória. Sokszor nem fért el az egész program a memóriában. Overlay (átfedés): A program több része fut ugyanazon a memória területen, mindig az aktuálisan futó rész van a memóriában, a többi rész mágneslemezen van. A programozó dolga a feladat átfedő részekre bontása, és a részek mozgatása a memória és a háttér tároló között. Ma már sokkal nagyobb ugyan a memória, de még sokkal nagyobb lehet a címtartomány (address space).
Máté: Architektúrák10. előadás3 Virtuális címtartomány: azok a címek, amelyekre a program hivatkozni tud. Fizikai címtartomány: azok a címek, amelyek tényleges memória cellát címeznek. A virtuális és fizikai címtartomány ugyanolyan méretű lapokra van osztva (6.3. ábra). A fizikai „lapokat” lapkeretnek (page frame) nevezzük. Lap méret: 512 B – 64 KB (– 4 MB), mindig 2 hatványa.
Máté: Architektúrák10. előadás4 A virtuális címtartomány sokkal nagyobb, mint a fizikai! Mit kell tenni, ha olyan címre történik hivatkozás, amely nincs a memóriában? LapVirtuális címek N- ……-… LapkeretFizikai címek n- ……-…
Máté: Architektúrák10. előadás5 1.Egy lapkeret (pl. a ) tartalmának lemezre mentése. 2.A kérdéses lap megkeresése a lemezen. 3.A kérdéses lap betöltése a lapkeretbe. 4.A memória térkép megváltoztatása: pl. a 4096 és 8191 közötti címek leképezése a betöltött lapkeret címtartományába. 5.A végrehajtás folytatása. Virtuális címtartomány … Fizikai címtartomány … leképezés 6.2. ábra
Máté: Architektúrák10. előadás6 A virtuális címek fizikai címekre történő leképezését az MMU (Memory Management Unit – memória kezelő egység végzi. Memória térkép (memory map) vagy laptábla (page map) kapcsolja össze a virtuális címeket a fizikai címekkel. Pl. 4 KB-os lapméret és 32 bites virtuális cím esetén 1 millió virtuális lap van, ezért 1 millió bejegyzésű laptáblára van szükség. 32 KB fizikai memória esetén csak 8 lapkeret van, ezért a leképezés megoldható 8 cellás asszociatív memóriával is (a gyakorlatban több ezer lapkeret van, és az asszociatív memória igen drága).
Máté: Architektúrák10. előadás7 Asszociatív memória kulcsmező kulcs össze- hasonlító szelektor tartalom össze- hasonlító tartalom szelektor
Máté: Architektúrák10. előadás8 Jelenlét/hiány (present/absent) … … bites virtuális lapszám 12 bites offset 32 bites virtuális cím bites fizikai cím 6.4. ábra Laptábla
Máté: Architektúrák10. előadás9 … fizikai memória 6.5. ábra Laptábla … 6. virtuális lap7 5. virtuális lap6 11. virtuális lap5 14. virtuális lap4 8. virtuális lap3 3. virtuális lap2 0. virtuális lap1 1. virtuális lap0 lap keret virtuális lap lap keret
Máté: Architektúrák10. előadás10 Laphiány (page fault): a lap nincs a memóriában. Kérésre lapozás (demand paging): lapozás csak laphiány esetén. A program egyetlen bájtja sem kell bent legyen a memóriában, csak a másodlagos tárolón. Időosztásos rendszereknél nem kielégítő! Munka halmaz (working set): a legutóbbi k memória hivatkozásban szereplő lapok halmaza (az operációs rendszer feladata megállapítani). Időosztásos rendszerekben ezek a lapok előre visszatölthetők. Ha a munkahalmaz nagyobb, mint a lapkeretek száma, akkor gyakori lesz a laphiány. A nagyon gyakori laphiányt vergődésnek (thrashing) nevezzük.
Máté: Architektúrák10. előadás11 Lapkezelési eljárások: melyik lap helyett töltsük be a kért lapot? LRU (Least Recently Used, legrégebben használt): általában jó, de nem jó pl. 9 lapon átnyúló ciklus esetén, ha csak 8 memória lap van (6.6. ábra). 7. Virtuális lap 6. Virtuális lap 5. Virtuális lap 4. Virtuális lap 3. Virtuális lap 2. Virtuális lap 1. Virtuális lap 0. Virtuális lap 7. Virtuális lap 6. Virtuális lap 5. Virtuális lap 4. Virtuális lap 3. Virtuális lap 2. Virtuális lap 1. Virtuális lap 8. Virtuális lap 7. Virtuális lap 6. Virtuális lap 5. Virtuális lap 4. Virtuális lap 3. Virtuális lap 2. Virtuális lap 0. Virtuális lap 8. Virtuális lap
Máté: Architektúrák10. előadás12 FIFO (First-in First-Out, először be, először ki): egyszerűbb (de most ez se jobb, mint LRU). Csak a módosult (dirty, szennyezett) lapokat kell visszaírni, a tisztát (clean) nem (szennyezés bit). Most is előnyös, ha az utasítások és az adatok elkülönülten helyezkednek el a memóriában: az utasításokat nem kell visszaírni.
Máté: Architektúrák10. előadás13 Lapméret és elaprózódás Ha egy program k lapon fér el, akkor általában a k -dik lap nincs tele. Ha a lap mérete n, akkor programonként átlagosan n/2 bájt kihasználatlan: belső elaprózódás (internal fragmentation). A belső elaprózódás ellen a lap méretének csökkentésével lehet védekezni, de ez a laptábla méretének növekedéséhez vezet. A kis lap előnytelen a lemez sávszélességének kihasználása szempontjából is, viszont kisebb a vergődés kialakulásának valószínűsége.
Máté: Architektúrák10. előadás14 Szegmentálás Egy fordítóprogramnak a következő célokra kellhet memória (6.7. ábra): szimbólum tábla, forrás kód, konstansok, elemzési fa, verem. Rögzített memória felosztás esetén ezek egyike kicsinek bizonyulhat, miközben a többi nem használja ki a rendelkezésére álló tartományt. Verem terület Elemzési fa Konstans tábla Forrás szöveg Szimbólum tábla Virtuális címtartomány Szabad Jelenleg használt
Máté: Architektúrák10. előadás15 Szegmentálás (6.8. ábra) 0. szegmens 1. szegmens 2. szegmens 3. szegmens 4. szegmens 20 K 16 K 12 K 8 K 4 K 0 Konstans tábla Elemzési fa Hívási verem Szegmentált memóriában minden tábla a többitől függetlenül nőhet vagy zsugorodhat. Szim- bólum tábla Forrás szöveg
Máté: Architektúrák10. előadás16 Szegmens (6.9. ábra) A programozó számára látható logikai egység. Minden szegmens címtartománya 0-tól valamilyen maximumig terjed. A szegmens tényleges mérete ennél kisebb lehet. A program számára a címtartomány két dimenziós: (szegmens, offset). Általában egy szegmensben csak egyféle dolgok vannak: vagy kód vagy konstans vagy … Különböző tárvédelmi lehetőségek: kód: csak végrehajtható, nem írható, nem olvasható, konstans: csak olvasható …
Máté: Architektúrák10. előadás17 A szegmentálás és a virtuális memória összehasonlítása (6.9. ábra) SzempontokLapozásSzegmentálás Tudnia kell róla a programozónak?NemIgen Hány lineáris címtartomány létezik? 1Több Meghaladhatja-e a virtuális címtartomány nagysága a fizikai memória méretét? Igen Könnyen kezelhetők a változó méretű táblák? NemIgen Mi ennek a technikának a lényege? Nagy memória szimulálása Több címtartomány biztosítása
Máté: Architektúrák10. előadás18 A szegmentálás megvalósítása Lapozással: Minden szegmensnek saját laptáblája van. A szegmens néhány lapja a memóriában van. Cseréléssel: Teljes szegmensek mozognak a memória és a lemez között. Ha olyan szegmensre hivatkozunk, amely nincs a memóriában, akkor betöltődik. Külső elaprózódáshoz (external fragmentation) vezethet (6.10. ábra). Lyukacsosodásnak (checkerboarding) is nevezik.
Máté: Architektúrák10. előadás19 Összepréselés: idő igényes, de időnként kell. Legjobb illesztés (best fit) és első illesztés (first fit) algoritmus. Az utóbbi gyorsabb és jobb is az általános hatékonyság szempontjából K 0. 4 K 2. 5 K 3. 8 K 4. 7 K 7. 5 K 0. 4 K 2. 5 K 3. 8 K 4. 7 K 3 K 7. 5 K 0. 4 K 2. 5 K 3. 8 K 5. 4 K 3 K 7. 5 K 0. 4 K 2. 5 K 6. 4 K 5. 4 K 3 K 4 K 7. 5 K 0. 4 K 2. 5 K 6. 4 K 5. 4 K 10 K 6 K 7. 5 K 0. 4 K 2. 5 K 3. 8 K 4. 7 K 3 K 5 K 4 K
Máté: Architektúrák10. előadás20 Pentium 4 ( ábra) A szegmens regiszter tartalmazza a szelektort Index A szelektor (6.12. ábra) indexe választja ki a leírót (descriptor) a lokális (LDT, Local Descriptor Table) vagy globális leíró táblából (GDT, Global Descriptor Table). (6.13. ábra). A 0. leíró használata csapdát eredményez (hiba). 0: GDT 1: LDT Védelmi szint: 0-3 Szelektor:
Máté: Architektúrák10. előadás21 Ha P=0, csapda:nem létező szegmens, vagy be kell tölteni a szegmenst. BASE 0-15LIMIT 0-15 B 24-31G D 0L 16-19PDPLTYPEB : LIMIT értéke bájtokban 1: LIMIT értéke lapokban (lap ≥ 4 KB) 0: 16 bites szegmens r. 1: 32 bites szegmens r. Szegmens típusa, védelme Védelmi szint (0-3) 0: a szegmens nincs a memóriában 1: a szegmens a memóriában van Pentium 4 kódszegmensének leírója (6.13. ábra)
Máté: Architektúrák10. előadás ábra Ha offset (a szegmens elejéhez viszonyított relatív cím) a szegmens határán túl van, csapda (hiba). Lapozást tiltó flag (a globális vezérlőregiszter bitje): Ha engedélyezett: lineáris cím = virtuális cím Ha tiltott:lineáris cím = fizikai cím 32 bites lineáris cím Szelektor Bázis cím Limit Más mezők Offset Leíró +
Máté: Architektúrák10. előadás23 Lapkönyvtár (page directory ábra) A 32 bites lineáris címek és a 4 KB-os lapok miatt egy szegmenshez egymillió lap is tartozhat. Túl sok! Minden futó programhoz egy lapkönyvtár tartozik. Minden bejegyzés egy laptáblára mutat, vagy sehova. Lineáris cím DIRPAGEOFF Lapkönyvtár 1023 … bit Laptábla 1023 … bit Lapkeret 32 bit
Máté: Architektúrák10. előadás24 A lapkönyvtárnak azokhoz a mutatóihoz, amelyek nem mutatnak sehova, nem kell helyet foglalni a laptábla számára (pl. csak két db. ezer, és nem egy milliós bejegyzésű tábla kell egy 4 MB-nál rövidebb szegmenshez ). A táblákban minden bejegyzéshez 32 bit áll rendelkezésre. A mutatókhoz nem használt biteket a hardver az operációs rendszer számára hasznos jelzésekkel tölti ki (védelem, szennyezettség, hozzáférés, …). Speciális hardver támogatja a legutóbb használt lapok gyorsabb elérését.
Máté: Architektúrák10. előadás25 A Pentium 4 védelmi rendszere (6.16. ábra) A futó program pillanatnyi szintjét a PSW tartalmazza. A program a saját szintjén lévő szegmenseket szabadon használhatja. Magasabb szinten lévő adatokhoz hozzáfér, de az alacsonyabb szinten lévők kezelése csapdát okoz. Más szinten lévő eljárás hívásánál CALL helyett szelektort kell alkalmazni, ez egy hívás kaput (call gate) jelöl ki (más védelmi szintre csak szabványos – tehát ellenőrzött – belépési ponton lehet áttérni) szint A szintek egy lehetséges felhasználása: Felhasználói programok Osztott könyvtár Rendszer hívások Kernel
Máté: Architektúrák10. előadás26 Az UltraSPARC III virtuális memóriája Virtuális cím 64 bites, egyelőre 44 bitre korlátozva Virtuális címtartomány megengedett zónák 44 bitre korlátozva ez a címtartomány folytonos. Fizikai címtartomány maximum 41 bites. A kód és adat lapokat külön kezeli.
Máté: Architektúrák10. előadás27 Lapméret: 8, 64, 512 KB és 4 MB (6.17. ábra). Lap mérete Virtuális lap címe (bit) OFFSET (bit) Fizikai lap címe (bit) OFFSET (bit) 8 KB51 (31)13 → KB48 (28)16 → KB45 (25)19 → MB42 (22)22 → bitre korlátozva maximum 41 bit
Máté: Architektúrák10. előadás28 A memória kezelő egység (MMU) három szinten dolgozik: A legutóbb használt lapokat gyorsan megtalálja (hardver). A kód és az adat lapokat teljesen külön kezeli. A nem nagyon régen használtakat már lassabban (hardver segítséggel). A nagyon régen használtakat csak hosszas keresés után (szoftveres úton).
Máté: Architektúrák10. előadás29 TLB (Translation Lookaside Buffer) a legutóbb használt 64 lap bejegyzését tartalmazza (6.18. ábra). Környezet (context): processzus szám. Asszociatív memória: Kulcs a keresett virtuális lap és a környezet. TLB hiány (TLB miss) esetén: csapda. Érvényes Virtuális lap Környezet Fizikai lapkeret Flag-ek Kulcs
Máté: Architektúrák10. előadás30 TLB hiány esetén TSB folytatja a keresést (szoftver). TSB (Translation Storage Buffer): olyan felépítésű, mint egy direkt leképezésű gyorsító tár (operációs rendszer építi fel, és kezeli a központi memóriában). TSB találat esetén egy TLB sor helyébe beíródik a kért lapnak megfelelő bejegyzés. Érvényes Virtuális lap tag Környezet Fizikai lapkeret Flag-ek Virtuális lap címe tag line
Máté: Architektúrák10. előadás31 TSB hiány esetén a fordítótábla (translation table) alapján keres. Ennek a táblának a szerkezetét az operációs rendszer határozza meg. Egy lehetséges megoldás a tördeléses eljárás. Ebben az esetben a memóriába töltött virtuális lapok és a nekik megfelelő fizikai lapkeretek sorszáma listákba van helyezve. Ha a virtuális lap sorszáma p-vel osztva q-t ad maradékul, akkor csak a q-adik listát kell végignézni. Ha ez se találja a keresett lapot, akkor nincs a memóriában.
Máté: Architektúrák10. előadás32 Virtuális memória és gyorsító tár Két szintű hierarchia: Virtuális memória használatakor az egész programot lemezen tartjuk, fix méretű lapokra osztjuk. Lap hiány esetén a lapot a központi memóriába töltjük (operációs rendszer). Gyorsító tár esetén a központi memóriát gyorsító sorokra osztjuk. Gyorsító tár hiány esetén a gyorsító sort a gyorsító tárba töltjük (hardver).
Máté: Architektúrák10. előadás33 Makró és blokk ismétlés Makró definíció: M_névMACRO[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.
Máté: Architektúrák10. előadás34 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 nem 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.
Máté: Architektúrák10. előadás35 Dupla szavas összeadás: (DX:AX) (DX:AX)+(CX:BX) Eljárás deklaráció: EDADDPROCNEAR ADDAX,BX ADCDX,CX RET EDADDENDP Makró definíció: MDADDMACRO ADDAX,BX ADCDX,CX ENDM
Máté: Architektúrák10. előadás36 Ha a programban valahol dupla szavas összeadást kell végezzünk, akkor hívnunk kell az eljárást illetve a makrót: Eljárás hívás: CALLEDADD Makró hívás: MDADD Futás közben felhívásra kerül az EDADD eljárás Fordítás közben megtörténik a makró helyettesítés: ADDAX,BX ADCDX,CX Futás közben ez a két utasítás kerül csak végrehajtásra.
Máté: Architektúrák10. előadás37 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:
Máté: Architektúrák10. előadás38 Eljárás deklaráció: EDADD2PROCNEAR PUSHBP MOVBP,SP ADDAX,4[BP] ADCDX,6[BP] POPBP RET4 EDADDENDP Eljárás hívás: Ha SI az összeadandónk címét tartalmazza, akkor a felhívás: PUSH2[SI] PUSH[SI] CALLEDADD2 Futás közben végrehajtásra kerül a paraméter átadás, az eljárás hívás, az eljárás: összesen 9 utasítás
Máté: Architektúrák10. előadás39 Most sem része a makró definíció a lefordított programnak. Makró definíció: MDADD2MACROP IFB P ADDAX,BX ADCDX,CX ELSE ADDAX,P ADCDX,P+2 ENDIF ENDM Makró hívás: MDADD2[SI] Fordítás közben a hívás az ADDAX,[SI] ADCDX,[SI]+2 utasításokra cserélődik, futás közben csak ez a két utasítás kerül végrehajtásra. MDADD2 hatása: ADDAX,BX ADCDX,CX
Máté: Architektúrák10. előadás40 A fenti példában rövid volt az eljárás törzs, és ehhez képest viszonylag hosszú volt a paraméter átadás és átvétel. Ilyenkor célszerű a makró alkalmazása. De ha a program sok helyéről kell meghívnunk egy hosszabb végrehajtandó programrészt, akkor általában célszerűbb eljárást alkalmazni.
Máté: Architektúrák10. előadás41 Paraméter másutt is előfordulhat a makró törzsben, nemcsak az operandus részen, pl.: PLmacrop1,P2 movax,p1 P2p1 endm PLAdat, INC hatása: movax,Adat INCAdat
Máté: Architektúrák10. előadás42 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: errgenmacroy, x err&ydb’Error &y: &x’ endm errgen5, hatása: err5db’Error 5: Unreadable disk’
Máté: Architektúrák10. előadás43 <> (literál szöveg operátor): Ha aktuális paraméter szóközt vagy, -t is tartalmaz. Az előző példa <> nélkül: errgen5, Unreadable disk kifejtve: err5db’Error 5: Unreadable’ adatmacrop dbp endm adat adat’abc’,13,10,0 kifejtve: db’abc’,13,10,0 db’abc’
Máté: Architektúrák10. előadás44 ! (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ó errgen103, 255> hívásának hatása: err103db’Error 103: Expression > 255’ de errgen103, 255> hívásának hatása: err103db’Error 103: Expression ’
Máté: Architektúrák10. előadás45 % (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.: sym1equ100 sym2equ200 txtequ’Ez egy szöveg’ kifmacroexp, val db”&exp = &val” endm kif, %(sym1+sym2) kiftxt, %txt db”sym1+sym2 = 300” db”txt = ’Ez egy szöveg’”
Máté: Architektúrák10. előadás46 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 ErrMsgMACROtext s=s+1 Msg%s,text ENDM MsgMACROsz,str msg&szdbstr ENDM
Máté: Architektúrák10. előadás47 s=0 ErrMsgMACROtext s=s+1 Msg%s,text ENDM MsgMACROsz,str msg&szdbstr ENDM 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 s értékére ( 1 ) cserélődik, majd kifejtésre kerül ez a makró is, ebből kialakul: msg1db’syntax error ’
Máté: Architektúrák10. előadás48 s=0 ErrMsgMACROtext s=s+1 Msg%s,text ENDM MsgMACROsz,str msg&szdbstr ENDM Egy újabb hívás és hatása: ErrMsg ’invalid operand’ msg2db’invalid operand’
Máté: Architektúrák10. előadás49 ;; (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.
Máté: Architektúrák10. előadás50 LOCALc1[,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. KOPOGmacro n LOCAL ujra movcx,n ujra:KOPP loopujra 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.
Máté: Architektúrák10. előadás51 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.: shiftsmacroOPNAME; makrót ; definiáló makró OPNAME&SMACROOPERANDUS,N movcl, N OPNAMEOPERANDUS,cl ENDM endm
Máté: Architektúrák10. előadás52 shiftsmacroOPNAME; makrót ; definiáló makró OPNAME&SMACROOPERANDUS,N movcl, N OPNAMEOPERANDUS,cl ENDM endm Ha ezt a makrót felhívjuk pl.: shifts ROR akkor a RORSMACROOPERANDUS,N movcl, N ROROPERANDUS,cl ENDM makró definíció generálódik.
Máté: Architektúrák10. előadás53 RORSMACROOPERANDUS,N movcl, N ROROPERANDUS,cl ENDM Mostantól meghívható a RORS makró is, pl.: RORSAX, 5 aminek a hatása: movcl, 5 RORAX,cl
Máté: Architektúrák10. előadás54 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). PUSHALLmacroreg1,reg2,reg3,reg4,reg5 IFNB ;; ha a paraméter nem üres pushreg1;; az első regiszter mentése PUSHALLreg2,reg3,reg4,reg5 ;; rekurzió ENDIF ENDM Most pl. a PUSHALLax, bx, cx makró hívás hatása: pushax pushbx pushcx
Máté: Architektúrák10. előadás55 PUSHALLmacroreg1,reg2,reg3,reg4,reg5 IFNB ;; ha a paraméter nem üres pushreg1;; az első regiszter mentése PUSHALLreg2,reg3,reg4,reg5 ;; rekurzió ENDIF ENDM PUSHALLax, bx, cx makró hívás hatása: pushax PUSHALLbx, cx az újabb hívás hatása: pushbx PUSHALLcx az újabb hívás hatása: pushcx PUSHALL ennek hatására nem generálódik semmi.
Máté: Architektúrák10. előadás56 FL_CALLELJ=0 CALLELJmacro ;; Eljárást beépítő és felhívó makró LOCALFIRST;; nem lenne fontos IFFL_CALLELJ;; a 2. hívástól igaz callElj;; 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 JMPFIRST;; jut érvényre Eljproc;; eljárás deklaráció... ret Eljendp FIRST:callElj;; az eljárás felhívása endm
Máté: Architektúrák10. előadás57 Az első CALLELJ hívás hatására az FL_CALLELJ=1 JMP??0000 Eljproc... ret Eljendp ??0000:callElj utasítások generálódnak (??0000 a FIRST -ből keletkezett).
Máté: Architektúrák10. előadás58 A további CALLELJ hívások esetén csak egyetlen utasítás, a callElj utasítás generálódik. A megoldás előnye, hogy az eljárás akkor és csak akkor része a programnak, ha a program tartalmazza az eljárás felhívását is, és mégsem kell törődjünk azzal, hogy hozzá kell-e szerkesztenünk a programhoz vagy se.
Máté: Architektúrák10. előadás59 Megváltoztathatunk egy makró definíciót azáltal, hogy újra definiáljuk. Makró definíción belül előfordulhat másik makró definíció. E két lehetőség kombinációjából adódik, hogy a makró definíción belül megadhatunk ugyanarra a makró névre egy másik definíciót, ezáltal készíthető olyan makró, amely „átdefiniálja” önmagát. Az önmagát átdefiniáló makrók esetében a belső és külső definíciót lezáró ENDM utasítások között egyetlen utasítás sem szerepelhet – még kommentár sem!
Máté: Architektúrák10. előadás60 Önmagát „átdefiniáló” makró (az előző feladat másik megoldása): CALLELJ2macro; külső makró definíció jmpFIRST Elj2proc; eljárás deklaráció... ret Elj2endp FIRST:callElj2; eljárás hívás CALLELJ2MACRO; belső makró definíció callElj2; eljárás hívás ENDM; belső makró definíció vége endm; külső makró definíció vége
Máté: Architektúrák10. előadás61 CALLELJ2 első hívásakor a kifejtés eredménye: jmpFIRST Elj2proc; eljárás deklaráció... ret Elj2endp FIRST:callElj2; eljárás hívás CALLELJ2MACRO; belső makró definíció callElj2; eljárás hívás ENDM ; belső makró definíció vége
Máté: Architektúrák10. előadás62 A kifejtés CALLELJ2 újabb definícióját tartalmazza, ez felülírja az eredeti definíciót, és a továbbiak során ez a definíció érvényes. Ez alapján a későbbi CALLELJ2 hívások esetén callElj2 a kifejtés eredménye. Megjegyezzük, hogy most is szerencsésebb lett volna a FIRST címkét lokálissá tenni. Igaz, hogy csak egyszer generálódik, de így a CALLELJ2 makró használójának tudnia kell, hogy a FIRST címke már „foglalt”!
Máté: Architektúrák10. előadás63 Ha egy M_név makró definíciójára nincs szükség a továbbiak során, akkor a PURGEM_név pszeudo utasítással kitörölhetjük.
Máté: Architektúrák10. előadás64 Blokk ismétlés Nemcsak a blokk definíciójának kezdetét jelölik ki, hanem a kifejtést (hívást) is előírják. A program más részéről nem is hívhatók. Blokk ismétlés kifejezés -szer: REPTkifejezés...; ez a rész ismétlődik ENDM
Máté: Architektúrák10. előadás65 A korábbi megoldás: KOPOGmacro n LOCAL ujra movcx,n ujra:KOPP loopujra endm REPTN KOPP ENDM Ha pl. N=3, akkor ennek a hatására a KOPP makró hívások generálódnak. A korábban ismertetett kopogást így is megoldhattuk volna: Megjegyzés: Most N nem lehet változó – fordítási időben ismert kell legyen az értéke!
Máté: Architektúrák10. előadás66 Blokk ismétlés argumentum lista szerint: IRPpar,...; ez a rész többször bemásolásra...; kerül úgy, hogy par rendre...; fölveszi az arg1,arg2... értéket ENDM IRPx, dbx ENDM db1 db2 db3
Máté: Architektúrák10. előadás67 Blokk ismétlés string alapján: IRPCpar,string...; ez a rész kerül többször bemásolásra úgy,...; hogy par rendre fölveszi...; a string karaktereit ENDM Ezt a string -et nem kell idézőjelek közé tenni (újabb ismétlés jelentene). Ha a string -en belül pl. szóköz vagy, is előfordul, akkor <> jelek közé kell tenni. Az előző feladatot így is megoldhattuk volna: IRPCx,123 dbx ENDM
Máté: Architektúrák10. előadás68 Másik példa: IRPCx,ABCDEFGHIJKLMNOPQRSTUVWXYZ db’&x’;; nagy betűk db’&x’+20h;; kis betűk ENDM Hatása: db’A’ db’A’+20ha kódja... db’Z’ db’Z’+20h z kódja Fontos az & jel, nélküle ’x’ -ben x nem paraméter, hanem string lenne!
Máté: Architektúrák10. előadás69 Makró definíció tartalmazhat blokk ismétlést, és blokk ismétlés is tartalmazhat makró definíciót vagy makró hívást. Pl.: A bit léptető és forgató utasítás kiterjesztésnek egy újabb megoldása: ; makrót definiáló blokkismétlés IRPOP, OP&S MACROOPERANDUS,N movcl, N OPOPERANDUS,cl ENDM Ennek a megoldásnak előnye, hogy nem kell külön meghívnunk a külső makrót az egyes utasításokkal, mert ezt elvégzi helyettünk az IRP blokk ismétlés.
Máté: Architektúrák10. előadás70 ; makrót definiáló blokkismétlés IRPOP, OP&S MACROOPERANDUS,N movcl, N OPOPERANDUS,cl ENDM hatása: RCRS MACROOPERANDUS,N movcl, N RCROPERANDUS,cl ENDM RCLS MACROOPERANDUS,N...
Máté: Architektúrák10. előadás71 Feladatok Milyen utasítások érhetők el operációs rendszer szinten? Mi az overlay technika lényege? Mi a virtuális címtartomány? Mi a fizikai címtartomány? Mi a lap és mi a lapkeret? Mi a lapozás? Mi a memória térkép (laptábla)? Mi az MMU? Hogy működik az asszociatív memória? Mi a laphiány? Mi a kérésre lapozás? Mi a munka halmaz (working set)?
Máté: Architektúrák10. előadás72 Feladatok Mikor alakul ki vergődés? Milyen lapkezelési eljárásokat ismer? Mi a belső elaprózódás? Mi az előnye, és mi a hátránya a kis lapméretnek? Mit nevezünk szegmentálásnak? Hogy valósítható meg a szegmentálás? Mik a szegmentálás előnyei? Mi a külső elaprózódás? Mi az összepréselés (compaction)? Hogy valósul meg a szegmens címzés a Pentium 4-en? Mi a szelektor? Milyen információt tartalmaz a Pentium 4 szelektora? Milyen mezőket tartalmaz a kódszegmensek leírója?
Máté: Architektúrák10. előadás73 Feladatok Mire szolgál az LDT (Local Descriptor Table) és a GDT (Global Descriptor Table)? Hogy képződik a lineáris cím? Hogy valósul meg Pentium 4-en a virtuális címzés? Milyen a Pentium 4 védelmi rendszere? Hogy hívható más védelmi szintű eljárás? Jellemezze az UltraSparc III virtuális memóriáját! Mi a TLB (Translation Lookaside Buffer)? Milyen memóriában van a TLB? Mi történik TLB hiány esetén? Hogy szervezett a TSB (Translation Storage Buffer)? Mi történik TSB hiány esetén? Hasonlítsa össze a virtuális memóriát a gyorsító tárral!
Máté: Architektúrák10. előadás74 Feladatok Hasonlítsa össze a makrót az eljárással! Mikor célszerű makrót alkalmazni eljárás helyett? Mi a makro definíció? Mi a makró fej? Mi a makró törzs? Mi a makró hívás? Mi a makró kifejtés? Mi a (formális) paraméter? Mi az aktuális paraméter (argumentum)? Mely karakterek játszanak speciális szerepet makró kifejtéskor? Melyik karakternek mi a szerepe? Adjon példát rájuk! Mi a szerepe a LOCAL pszeudó utasításnak?
Máté: Architektúrák10. előadás75 Feladatok Adjon példát makró hívást tartalmazó makró definícióra! Adjon példát makró definíciót tartalmazó makró definícióra! Mit kell tudni azokról a makró definíciókról, amelyek egy másik makró definícióban találhatók? Adjon példát olyan makró definícióra, amely tartalmazza saját hívását! Adjon példát olyan makró definícióra, amely tartalmazza saját átdefiniálását! Mit kell tudni az önmaguk átdefiniálását tartalmazó makró definíciókról? Mi a hatása a PURGE pszeudó utasításnak?
Máté: Architektúrák10. előadás76 Feladatok Mit jelent a blokk ismétlés? Milyen blokk ismétlési lehetőségeket ismer? Mi a REPT pszeudó utasítás általános alakja? Mi az IRP pszeudó utasítás általános alakja? Mi az IRPC pszeudó utasítás általános alakja? Mondjon példát makrót definiáló blokkismétlésre!