View
20
Download
2
Category
Preview:
DESCRIPTION
Operációs rendszer szintje Operating System Machine (OSM) - PowerPoint PPT Presentation
Citation preview
Máté: Architektúrák 10. előadás 1
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ák 10. előadás 2
Virtuális memóriaRé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ák 10. előadás 3
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ák 10. előadás 4
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?
Lap Virtuális címek
N -
… … - …
4 16384 - 20479
3 12288 - 16383
2 8192 - 12287
1 4096 - 8191
0 0 - 4095
Lapkeret Fizikai címek
n -
… … - …
4 16384 - 20479
3 12288 - 16383
2 8192 - 12287
1 4096 - 8191
0 0 - 4095
Máté: Architektúrák 10. előadás 5
1. Egy lapkeret (pl. a 0-4095) 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
…819640960
Fizikai címtartomány
…81964096
0leképezés
6.2. ábra
Máté: Architektúrák 10. előadás 6
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ák 10. előadás 7
Asszociatív memória
kulcsmező
kulcsmező
kulcs
össze-hasonlító
szelektor
tartalom
össze-hasonlító
tartalom
szelektor
Máté: Architektúrák 10. előadás 8
Jelenlét/hiány (present/absent)
…43 1 110210
0 0 … 0 1 1 0 0 0 0 0 0 0 1 0 1 1 020 bites virtuális
lapszám12 bites offset
32 bites virtuális cím
1 1 0 0 0 0 0 0 0 0 1 0 1 1 0
15 bites fizikai cím
6.4. ábra
Laptábla
Máté: Architektúrák 10. előadás 9
…15 0 014 1 413 0 012 0 011 1 510 0 0
9 0 08 1 37 0 06 1 75 1 64 0 03 1 22 0 01 1 00 1 1
fizikai memória
6.5. ábraLaptábla
…6. virtuális lap 75. virtuális lap 6
11. virtuális lap 514. virtuális lap 48. virtuális lap 33. virtuális lap 20. virtuális lap 11. virtuális lap 0
lap keret
virtuális lap lap keret
Máté: Architektúrák 10. előadás 10
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ák 10. előadás 11
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 lap6. Virtuális lap5. Virtuális lap4. Virtuális lap3. Virtuális lap2. Virtuális lap1. Virtuális lap0. Virtuális lap
7. Virtuális lap6. Virtuális lap5. Virtuális lap4. Virtuális lap3. Virtuális lap2. Virtuális lap1. Virtuális lap8. Virtuális lap
7. Virtuális lap6. Virtuális lap5. Virtuális lap4. Virtuális lap3. Virtuális lap2. Virtuális lap0. Virtuális lap8. Virtuális lap
Máté: Architektúrák 10. előadás 12
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ák 10. előadás 13
Lapméret és elaprózódásHa 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ák 10. előadás 14
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áblaForrás szöveg
Szimbólum tábla
Virtuális címtartomány
Szabad
Jelenleg használt
Máté: Architektúrák 10. előadás 15
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ák 10. előadás 16
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ák 10. előadás 17
A szegmentálás és a virtuális memória összehasonlítása (6.9. ábra)
Szempontok Lapozás Szegmentálás
Tudnia kell róla a programozónak? Nem Igen
Hány lineáris címtartomány létezik?
1 Több
Meghaladhatja-e a virtuális címtartomány nagysága a fizikai memória méretét?
Igen Igen
Könnyen kezelhetők a változó méretű táblák?
Nem Igen
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ák 10. előadás 18
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ák 10. előadás 19
Ö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.
1. 8 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
3 K
7. 5 K
0. 4 K
2. 5 K
6. 4 K
5. 4 K
3 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 K5 K
4 K
4 K
Máté: Architektúrák 10. előadás 20
Pentium 4 (6.12-14. ábra)
A szegmens regiszter tartalmazza a szelektort.
13 1 2Index
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: GDT1: LDT Védelmi szint: 0-3
Szelektor:
Máté: Architektúrák 10. előadás 21
Ha P=0, csapda: nem létező szegmens, vagybe kell tölteni a szegmenst.
BASE 0-15 LIMIT 0-15
B 24-31 G D 0 L 16-19 P DPL TYPE B 16-23
0: LIMIT értéke bájtokban1: 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ában1: a szegmens a memóriában van
Pentium 4 kódszegmensének leírója (6.13. ábra)
Máté: Architektúrák 10. előadás 22
6.14. á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ák 10. előadás 23
Lapkönyvtár (page directory 6.15. á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ím10 10 12DIR PAGE OFF
Lapkönyvtár1023
…210
32 bit
Laptábla1023
…210
32 bit
Lapkeret
32 bit
Máté: Architektúrák 10. előadás 24
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ák 10. előadás 25
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).
0123
szint
A szintek egy lehetséges felhasználása:
Felhasználói programokOsztott könyvtárRendszer hívások
Kernel
Máté: Architektúrák 10. előadás 26
Az UltraSPARC III virtuális memóriája
Virtuális cím 64 bites, egyelőre 44 bitre korlátozva.
0 264-1264-243243-1
Virtuális címtartománymegengedett 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ák 10. előadás 27
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 KB 51 (31) 13 → 28 13
64 KB 48 (28) 16 → 25 16
512 KB 45 (25) 19 → 22 19
4 MB 42 (22) 22 → 19 22
44 bitre korlátozva maximum 41 bit
Máté: Architektúrák 10. előadás 28
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ák 10. előadás 29
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ényesVirtuális
lap Környezet
Fizikai lapkeret Flag-ek
Kulcs
Máté: Architektúrák 10. előadás 30
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ák 10. előadás 31
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ák 10. előadás 32
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ák 10. előadás 33
Makró és blokk ismétlésMakró definíció: M_névMACRO [fpar1[,fpar2...]]
; makró fej (kezdet)
... ; makró törzsENDM ; 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ák 10. előadás 34
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ák 10. előadás 35
Dupla szavas összeadás: (DX:AX)(DX:AX)+(CX:BX)
Eljárás deklaráció:
EDADD PROC NEAR
ADD AX,BX
ADC DX,CXRET
EDADD ENDP
Makró definíció:
MDADD MACRO
ADD AX,BX
ADC DX,CX
ENDM
Máté: Architektúrák 10. előadás 36
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:
CALL EDADD
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:
ADD AX,BX
ADC DX,CX
Futás közben ez a két utasítás kerül csak végrehajtásra.
Máté: Architektúrák 10. előadás 37
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ák 10. előadás 38
Eljárás deklaráció:
EDADD2 PROC NEAR
PUSH BP
MOV BP,SP ADD
AX,4[BP]
ADC DX,6[BP]
POP BP
RET 4
EDADD ENDP
Eljárás hívás:
Ha SI az összeadandónk címét tartalmazza, akkor a felhívás:
PUSH 2[SI]
PUSH [SI]
CALL EDADD2
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ák 10. előadás 39
Most sem része a makró definíció a lefordított programnak.
Makró definíció:
MDADD2 MACRO P
IFB PADD AX,BXADC DX,CX
ELSE
ADD AX,PADC DX,P+2
ENDIF
ENDM
Makró hívás:
MDADD2 [SI]
Fordítás közben a hívás azADD AX,[SI]ADC DX,[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:
ADD AX,BXADC DX,CX
Máté: Architektúrák 10. előadás 40
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ák 10. előadás 41
Paraméter másutt is előfordulhat a makró törzsben, nemcsak az operandus részen, pl.:
PL macro p1,P2mov ax,p1P2 p1endm
PL Adat, INChatása:
mov ax,AdatINC Adat
Máté: Architektúrák 10. előadás 42
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’
Máté: Architektúrák 10. előadás 43
<> (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:
errgen 5, Unreadable disk
kifejtve:err5 db ’Error 5: Unreadable’
adat macro pdb pendm
adat <’abc’,13,10,0>adat ’abc’,13,10,0
kifejtve:db ’abc’,13,10,0db ’abc’
Máté: Architektúrák 10. előadás 44
! (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 ’
Máté: Architektúrák 10. előadás 45
% (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 100sym2 equ 200txt equ ’Ez egy szöveg’
kif macro exp, valdb ”&exp = &val”endm
kif <sym1+sym2>, %(sym1+sym2)kif txt, %txt
db ”sym1+sym2 = 300”db ”txt = ’Ez egy szöveg’”
Máté: Architektúrák 10. előadás 46
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
Máté: Architektúrák 10. előadás 47
s = 0ErrMsg MACRO texts = s+1
Msg %s,textENDM
Msg MACRO sz,strmsg&sz db str
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) azs = 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:
msg1 db ’syntax error’
Máté: Architektúrák 10. előadás 48
s = 0ErrMsg MACRO texts = s+1
Msg %s,textENDM
Msg MACRO sz,strmsg&sz db str
ENDM
Egy újabb hívás és hatása: ErrMsg ’invalid operand’msg2 db ’invalid operand’
Máté: Architektúrák 10. előadás 49
;; (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ák 10. előadás 50
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 nLOCAL ujramov cx,n
ujra:KOPPloop ujraendm
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ák 10. előadás 51
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
Máté: Architektúrák 10. előadás 52
shifts macro OPNAME ; makrót ; definiáló
makróOPNAME&S MACRO OPERANDUS,N
mov cl, NOPNAME OPERANDUS,clENDMendm
Ha ezt a makrót felhívjuk pl.:shifts ROR
akkor aRORS MACRO OPERANDUS,N
mov cl, NROR OPERANDUS,clENDM
makró definíció generálódik.
Máté: Architektúrák 10. előadás 53
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
Máté: Architektúrák 10. előadás 54
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,reg5IFNB <reg1> ;; ha a paraméter nem üres
push reg1 ;; az első regiszter mentésePUSHALL reg2,reg3,reg4,reg5 ;; rekurzió
ENDIFENDM
Most pl. aPUSHALL ax, bx, cx
makró hívás hatása:push axpush bxpush cx
Máté: Architektúrák 10. előadás 55
PUSHALL macro reg1,reg2,reg3,reg4,reg5IFNB <reg1> ;; ha a paraméter nem üres
push reg1 ;; az első regiszter mentésePUSHALL reg2,reg3,reg4,reg5 ;; rekurzió
ENDIFENDM
PUSHALL ax, bx, cxmakró hívás hatása:
push axPUSHALL bx, cx
az újabb hívás hatása:push bxPUSHALL cx
az újabb hívás hatása:push cxPUSHALL
ennek hatására nem generálódik semmi.
Máté: Architektúrák 10. előadás 56
FL_CALLELJ = 0CALLELJ 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ástEXITM ;; makró helyettesítés vége
ENDIFFL_CALLELJ = 1 ;; csak az első híváskor
JMP FIRST ;; jut érvényreElj proc ;; eljárás deklaráció
...ret
Elj endpFIRST: call Elj ;; az eljárás felhívása
endm
Máté: Architektúrák 10. előadás 57
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 (??0000 a FIRST-ből keletkezett).
Máté: Architektúrák 10. előadás 58
A további CALLELJ hívások esetén csak egyetlen utasítás, a
call Elj
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ák 10. előadás 59
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ák 10. előadás 60
Önmagát „átdefiniáló” makró (az előző feladat másik megoldása):
CALLELJ2 macro ; külső makró definíciójmp FIRST
Elj2 proc ; eljárás deklaráció...ret
Elj2 endpFIRST: call Elj2 ; eljárás hívásCALLELJ2 MACRO ; belső makró definíció
call Elj2 ; eljárás hívásENDM ; belső makró definíció végeendm ; külső makró definíció vége
Máté: Architektúrák 10. előadás 61
CALLELJ2 első hívásakor a kifejtés eredménye:
jmp FIRST
Elj2 proc ; eljárás deklaráció
...
ret
Elj2 endp
FIRST: call Elj2 ; eljárás hívás
CALLELJ2 MACRO ; belső makró definíció
call Elj2 ; eljárás hívás
ENDM ; belső makró definíció
vége
Máté: Architektúrák 10. előadás 62
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
call Elj2
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ák 10. előadás 63
Ha egy M_név makró definíciójára nincs szükség a továbbiak során, akkor a
PURGE M_név
pszeudo utasítással kitörölhetjük.
Máté: Architektúrák 10. előadás 64
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:
REPT kifejezés
... ; ez a rész ismétlődik
ENDM
Máté: Architektúrák 10. előadás 65
A korábbi megoldás:
KOPOG macro n
LOCAL ujra
mov cx,n
ujra: KOPP
loop ujra
endm
REPT N
KOPP
ENDM
Ha pl. N=3, akkor ennek a hatására a
KOPP
KOPP
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ák 10. előadás 66
Blokk ismétlés argumentum lista szerint:
IRP par, <arg1[,arg2...]>... ; ez a rész többször bemásolásra ... ; kerül úgy, hogy par rendre... ; fölveszi az arg1,arg2... értéketENDM
IRP x, <1,2,3>db xENDM
db 1db 2db 3
Máté: Architektúrák 10. előadás 67
Blokk ismétlés string alapján:
IRPC par,string... ; ez a rész kerül többször bemásolásra
úgy, ... ; hogy par rendre fölveszi ... ; a string karaktereitENDM
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:
IRPC x,123db xENDM
Máté: Architektúrák 10. előadás 68
Másik példa:
IRPC x,ABCDEFGHIJKLMNOPQRSTUVWXYZdb ’&x’ ;; nagy betűkdb ’&x’+20h ;; kis betűkENDM
Hatása:db ’A’db ’A’+20h a 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ák 10. előadás 69
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 IRP OP,<RCR,RCL,ROR,ROL,SAR,SAL>
OP&S MACRO OPERANDUS,N mov cl, N OP OPERANDUS,cl ENDM 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ák 10. előadás 70
; makrót definiáló blokkismétlés IRP OP,<RCR,RCL,ROR,ROL,SAR,SAL>
OP&S MACRO OPERANDUS,N mov cl, N OP OPERANDUS,cl ENDM ENDM
hatása:
RCRS MACRO OPERANDUS,N mov cl, N RCR OPERANDUS,cl ENDM
RCLS MACRO OPERANDUS,N...
Máté: Architektúrák 10. előadás 71
FeladatokMilyen 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ák 10. előadás 72
FeladatokMikor 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ák 10. előadás 73
FeladatokMire 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ák 10. előadás 74
FeladatokHasonlí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ák 10. előadás 75
FeladatokAdjon 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ák 10. előadás 76
FeladatokMit 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!
Recommended