Title: Oper
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
szintu 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).
2- 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 átfedo 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).
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éretu 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.
4Lap Virtuális címek Virtuális címek Virtuális címek
N -
-
4 16384 - 20479
3 12288 - 16383
2 8192 - 12287
1 4096 - 8191
0 0 - 4095
Lapkeret Fizikai címek Fizikai címek Fizikai címek
n -
-
4 16384 - 20479
3 12288 - 16383
2 8192 - 12287
1 4096 - 8191
0 0 - 4095
- 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?
5- Egy lapkeret (pl. a 0-4095) tartalmának lemezre
mentése. - A kérdéses lap megkeresése a lemezen.
- A kérdéses lap betöltése a lapkeretbe.
- 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. - A végrehajtás folytatása.
Virtuális címtartomány
Fizikai címtartomány
8196
4096
0
8196
4096
0
leképezés
6- A virtuális címek fizikai címekre történo
leképezését az MMU (Memory Management Unit
memória kezelo 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 32 bites
virtuális cím esetén 1 millió virtuális lap van,
ezért 1 millió bejegyzésu 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).
7 8- Jelenlét/hiány
- (present/absent)
15 bites fizikai cím
Laptábla
1 1 0 0 0 0 0 0 0 0 1 0 1 1 0
4
3 1 110
2
1
0
0 0 0 1 1 0 0 0 0 0 0 0 1 0 1 1 0
20 bites virtuális lapszám 20 bites virtuális lapszám 20 bites virtuális lapszám 20 bites virtuális lapszám 20 bites virtuális lapszám 20 bites virtuális lapszám 12 bites offset 12 bites offset 12 bites offset 12 bites offset 12 bites offset 12 bites offset 12 bites offset 12 bites offset 12 bites offset 12 bites offset 12 bites offset 12 bites offset
32 bites virtuális cím 32 bites virtuális cím 32 bites virtuális cím 32 bites virtuális cím 32 bites virtuális cím 32 bites virtuális cím 32 bites virtuális cím 32 bites virtuális cím 32 bites virtuális cím 32 bites virtuális cím 32 bites virtuális cím 32 bites virtuális cím 32 bites virtuális cím 32 bites virtuális cím 32 bites virtuális cím 32 bites virtuális cím 32 bites virtuális cím 32 bites virtuális cím
6.4. ábra
9virtuális lap
6.5. ábra
Laptábla
lap keret
15 0 0
14 1 4
13 0 0
12 0 0
11 1 5
10 0 0
9 0 0
8 1 3
7 0 0
6 1 7
5 1 6
4 0 0
3 1 2
2 0 0
1 1 0
0 1 1
lap keret
fizikai memória
6. virtuális lap 7
5. virtuális lap 6
11. virtuális lap 5
14. virtuális lap 4
8. virtuális lap 3
3. virtuális lap 2
0. virtuális lap 1
1. virtuális lap 0
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. - Idoosztásos rendszereknél nem kielégíto!
- Munka halmaz (working set) a legutóbbi k memória
hivatkozásban szereplo lapok halmaza (az
operációs rendszer feladata megállapítani).
Idoosztásos rendszerekben ezek a lapok elore
visszatölthetok. - Ha a munkahalmaz nagyobb, mint a lapkeretek
száma, akkor gyakori lesz a laphiány. A nagyon
gyakori laphiányt vergodésnek (thrashing)
nevezzük.
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 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
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
12- FIFO (First-in First-Out, eloször be, eloször
ki) egyszerubb (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 elonyö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.
13- 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 belso elaprózódás
(internal fragmentation). - A belso 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 elonytelen a lemez sávszélességének
kihasználása szempontjából is, viszont kisebb a
vergodés kialakulásának valószínusége.
14- Szegmentálás
- Egy fordítóprogramnak a következo 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.
Virtuális címtartomány
Szabad Jelenleg használt
Verem terület
Elemzési fa
Konstans tábla
Forrás szöveg
Szimbólum tábla
15Szegmentált memóriában minden tábla a többitol
függetlenül nohet vagy zsugorodhat.
Szim-bólum tábla
20 K
16 K
12 K
8 K
4 K
0
Hívási verem
Forrás szöveg
Elemzési fa
Konstans tábla
0. szegmens 1. szegmens 2. szegmens 3. szegmens 4. szegmens
16- Szegmens (6.8. á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özo
tárvédelmi lehetoségek - kód csak végrehajtható, nem írható, nem
olvasható, - konstans csak olvasható
17- A szegmentálás és a virtuális memória
összehasonlítása (6.8. á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 kezelhetok a változó méretu 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
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öltodik. Külso elaprózódáshoz (external
fragmentation) vezethet (6.10. ábra).
Lyukacsosodásnak (checkerboarding) is nevezik.
196 K
- Összepréselés ido igényes, de idonként kell.
- Legjobb illesztés (best fit) és elso illesztés
(first fit) algoritmus. Az utóbbi gyorsabb és
jobb is az általános hatékonyság szempontjából.
20- Pentium 4 (6.12-14. ábra)
- A szegmens regiszter tartalmazza a szelektort.
13 1 2
Index
Szelektor
0 GDT 1 LDT
Védelmi szint 0-3
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).
21Pentium 4 kódszegmensének leírója (6.13. ábra)
BASE 0-15 BASE 0-15 BASE 0-15 BASE 0-15 LIMIT 0-15 LIMIT 0-15 LIMIT 0-15 LIMIT 0-15
B 24-31 G D 0 L 16-19 P DPL TYPE B 16-23
- Ha P0, csapda nem létezo szegmens, vagy be
kell tölteni a szegmenst.
22Szelektor
Offset
Leíró
Bázis cím
Limit
Más mezok
32 bites lineáris cím
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érloregiszter bitje) Ha engedélyezett
lineáris cím virtuális cím Ha
tiltott lineáris cím fizikai cím
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ím Lineáris cím Lineáris cím
10 10 12
DIR PAGE OFF
Lapkönyvtár Lapkönyvtár
1023
2
1
0
32 bit
Laptábla Laptábla
1023
2
1
0
32 bit
Lapkeret Lapkeret
32 bit
24- A lapkönyvtárnak azokhoz a mutatóihoz, amelyek
nem mutatnak sehova, nem kell helyet foglalni a
laptábla számára (rövid szegmenshez csak két db.
ezer, és nem egy milliós bejegyzésu tábla kell). - 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.
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évo szegmenseket
szabadon használhatja. - Magasabb szinten lévo adatokhoz hozzáfér, de az
alacsonyabb szinten lévok kezelése csapdát okoz. - Más szinten lévo 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 ellenorzött belépési ponton
lehet áttérni).
26- Az UltraSPARC III virtuális memóriája
- Virtuális cím 64 bites, egyelore 44 bitre
korlátozva.
Virtuális címtartománymegengedett zónák
264-1
264-243
243-1
0
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.
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
28- A memória kezelo 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).
29- TLB (Translation Lookaside Buffer) a legutóbb
használt 64 lap bejegyzését tartalmazza (6.18.
ábra).
Kulcs
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.
30- TLB hiány esetén TSB folytatja a keresést
(szoftver). - TSB (Translation Storage Buffer) olyan
felépítésu, mint egy direkt leképezésu gyorsító
tár (operációs rendszer építi fel, és kezeli a
központi memóriában).
Virtuális lap tag
Virtuális lap címe
Fizikai lapkeret
Flag-ek
Környezet
Érvényes
tag line
TSB találat esetén egy TLB sor helyébe beíródik a
kért lapnak megfelelo bejegyzé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 megfelelo 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.
32- Virtuális memória és gyorsító tár
- Két szintu hierarchia
- Virtuális memória használatakor az egész
programot lemezen tartjuk, fix méretu 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).
33- 8. Additív muveletek
- összeadás?
- - kivonás?
- 9. Relációs operátorok (igaz-1, hamis0)
általában feltételes fordítással kapcsolatban
fordulnak elo - EQ // -1 EQ 0FFFFFFFFH igaz
- NE ? // -1 NE 0FFFFFFFFH hamis
- LT ? 33 bites argumentumok!
- LE ? 1 GT -1 igaz
- GT ? 1 GT 0FFFFFFFFH hamis
- GE ?
34- 10. NOT bitenkénti negálás?
- 11. AND bitenkénti és muvelet?
- 12. Bitenkénti vagy és kizáró vagy muvelet
- OR bitenkénti vagy muvelet?
- XOR bitenkénti kizáró vagy muvelet?
35- 13.
- SHORT 8 bites IP relatív címzés
kikényszerítése? - .TYPE kifejezés 0, ha kifejezés érvénytelen,
különben
Bit sorszám Ha a bit 0 Ha a bit 1
0 Nem a programmal kapcsolatos A programmal kapcsolatos
1 Nem adattal kapcsolatos Adattal kapcsolatos
5 Nem definiált Definiált
7 Lokális v. PUBLIC EXTERN
36- Feltételes fordítás
- A fordító programok általában így az assembler
is feltételes fordítási lehetoséget biztosít.
Ez azt jelenti, hogy a program bizonyos részeit
csak abban az esetben fordítja le, ha a
fordítóprogram számára ellenorizheto feltétel
igaz illetve hamis. - IFxx feltétel
- ... lefordul, ha a feltétel igaz
- ELSE el is maradhat
- ... lefordul, ha a feltétel hamis
- ENDIF
37- IF kifejezés igaz, ha kifejezés?0
- IFE kifejezés igaz, ha kifejezés0
- Pl.
- IF debug GT 20
- call debug1
- ELSE
- call debug2
- ENDIF
38- IF1 igaz a fordítás
- elso menetében
- IF2 igaz a fordítás
- második menetében
- IFDEF Szimbólum igaz, ha Szimbólum
- definiált
- IFNDEF Szimbólum igaz, ha Szimbólum
- nem definiált
- Pl. Csak akkor definiáljuk buff-t, ha a hossza
ismert - IFDEF buff_len
- buff db buff_len dup (?)
- ENDIF
39- IFB ?arg? igaz, ha
- arg üres (blank)
- IFNB ?arg? igaz, ha
- arg nem üres
- IFIDN ?arg1?,?arg2? igaz, ha
- arg1?arg2 teljesül
- IFDIF ?arg1?,?arg2? igaz, ha
- arg1?arg2 nem teljesül
40- 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
egyszeruen paraméterek. - A makró definíció nem lesz része a lefordított
programnak, csupán azt határozza meg, hogy késobb
mit kell a makró hívás helyére beírni (makró
kifejtés, helyettesítés). - A makró törzsön belül elofordulhat makró hívás és
másik makró definíció is.
41- Makró hívás
- M_név apar1,apar2...
- apar1,apar2... aktuális paraméterek/argumentumok.
- A muveleti 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 elofordulása a megfelelo
argumentummal helyettesítodik. A helyettesítés
szövegesen történik, azaz minden paraméter mint
szöveg helyére a megfelelo 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 megfelelo formális paraméternek
lehet olyan elofordulása, amely a késobbiek során
makró hívást eredményez.
42- Dupla szavas összeadás (DXAX)?(DXAX)(CXBX)
-
Eljárás deklaráció EDADD PROC NEAR ADD AX,BX ADC DX,CX RET EDADD ENDP Makró definíció MDADD MACRO ADD AX,BX ADC DX,CX ENDM
43- 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.
44- Látható, hogy eljárás esetén kettovel 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 (CXBX)
helyett paraméterként kívánjuk megadni az egyik
összeadandót
45Eljárás deklaráció EDADD2 PROC NEAR PUSH BP MOV BP,SP ADD AX,4BP ADC DX,6BP 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 2SI 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
46Makró definíció MDADD2 MACRO P IFB ?P? ADD AX,BX ADC DX,CX ELSE ADD AX,P ADC DX,P2 ENDIF ENDM Makró hívás MDADD2 SI Fordítás közben a hívás az ADD AX,SI ADC DX,SI2 utasításokra cserélodik, futás közben csak ez a két utasítás kerül végrehajtásra. MDADD2 hatása ADD AX,BX ADC DX,CX
- Most sem része a makró definíció a lefordított
programnak.
47A 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élszeru a makró
alkalmazása. De ha a program sok helyérol kell
meghívnunk egy hosszabb végrehajtandó
programrészt, akkor általában célszerubb eljárást
alkalmazni.
48- Paraméter másutt is elofordulhat 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
49- A , , ! karakterek továbbá a ltgt é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
- erry db Error y x
- endm
- errgen 5, ltUnreadable diskgt
- hatása
- err5 db Error 5 Unreadable disk
50- ltgt (literál szöveg operátor) Ha aktuális
paraméter szóközt vagy ,-t is tartalmaz. Az elozo
példa ltgt nélkül - errgen 5, Unreadable disk
- kifejtve
- err5 db Error 5 Unreadable
- adat macro p
- db p
- endm
- adat ltabc,13,10,0gt
- adat abc,13,10,0
- kifejtve
- db abc,13,10,0
- db abc
51- ! (literál karakter operátor) Az utána következo
karaktert makró kifejtéskor közönséges
karakterként kell kezelni. Pl. a korábbi errgen
makró - errgen 103, ltExpression !gt 255gt
- hívásának hatása
- err103 db Error 103 Expression gt 255
- de
- errgen 103, ltExpression gt 255gt
- hívásának hatása
- err103 db Error 103 Expression
52- (kifejezés operátor) Az utána lévo 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 ltsym1sym2gt, (sym1sym2)
- kif txt, txt
- db sym1sym2 300
- db txt Ez egy szöveg
53- 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 s1
- Msg s,text
- ENDM
- Msg MACRO sz,str
- msgsz db str
- ENDM
54s 0 ErrMsg MACRO text s s1 Msg s,text ENDM Msg MACRO sz,str msgsz 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) az - s s1
- 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élodik, majd kifejtésre kerül ez a makró is,
ebbol kialakul - msg1 db syntax error
55s 0 ErrMsg MACRO text s s1 Msg s,text ENDM Msg MACRO sz,str msgsz db str ENDM
- Egy újabb hívás és hatása
- ErrMsg invalid operand
- msg2 db invalid operand
56- (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.
57- LOCAL c1,c2...
- c1, c2, ... minden makró híváskor más, ??xxxx
alakú szimbólumra cserélodik, 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.
58- Makró definíció belsejében lehet másik makró
definíció is. A belso makró definíció csak a
külso makró meghívása után jut érvényre, válik
láthatóvá. Pl. - shifts macro OPNAME makrót
definiáló makró - OPNAMES MACRO OPERANDUS,N
- mov cl, N
- OPNAME OPERANDUS,cl
- ENDM
- endm
-
59- shifts macro OPNAME makrót
definiáló makró - OPNAMES 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.
60- 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
61- Makró definíció belsejében meghívható az éppen
definiálás alatt lévo makró is (a makró hívás
ezáltal rekurzívvá válik). - PUSHALL macro reg1,reg2,reg3,reg4,reg5
- IFNB ltreg1gt ha a paraméter nem üres
- push reg1 az elso 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
62- PUSHALL macro reg1,reg2,reg3,reg4,reg5
- IFNB ltreg1gt ha a paraméter nem üres
- push reg1 az elso 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.
63- FL_CALLELJ 0
- CALLELJ macro Eljárást beépíto é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 elso 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
64- Az elso 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-bol
keletkezett).
65- 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 elonye, hogy az eljárá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örodjünk
azzal, hogy hozzá kell-e szerkesztenünk a
programhoz vagy se.
66- Megváltoztathatunk egy makró definíciót azáltal,
hogy újra definiáljuk. - Makró definíción belül elofordulhat másik makró
definíció. - E két lehetosé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ítheto olyan makró, amely átdefiniálja
önmagát. - Az önmagát átdefiniáló makrók esetében a belso és
külso definíciót lezáró ENDM utasítások között
egyetlen utasítás sem szerepelhet még kommentár
sem!
67- Önmagát átdefiniáló makró (az elozo feladat
másik megoldása) - CALLELJ2 macro külso makró definíció
- jmp FIRST
- Elj2 proc eljárás deklaráció
- ...
- ret
- Elj2 endp
- FIRST call Elj2 eljárás hívás
- CALLELJ2 MACRO belso makró definíció
- call Elj2 eljárás hívás
- ENDM belso makró definíció vége
- endm külso makró definíció vége
68- CALLELJ2 elso 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 belso makró definíció
- call Elj2 eljárás hívás
- ENDM belso makró definíció vége
69- 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ésobbi 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!
70- 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.
71- Feladatok
- Milyen utasítások érhetok 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 muködik az asszociatív memória?
- Mi a laphiány?
- Mi a kérésre lapozás?
- Mi a munka halmaz (working set)?
72- Feladatok
- Mikor alakul ki vergodés?
- Milyen lapkezelési eljárásokat ismer?
- Mi a belso elaprózódás?
- Mi az elonye, é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 elonyei?
- Mi a külso 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 mezoket tartalmaz a kódszegmensek leírója?
73- Feladatok
- Mire szolgál az LDT (Local Descriptor Table) és a
DDT (Global Descriptor Table)? - Hogy képzodik 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 szintu 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!
74- Feladatok
- a 7
- b 2
- c equ a shl b
- mov cx, not c mod 8 or b
- esetén, mi lesz cx tartalma?
- Mit értünk feltételes fordításon?
- Milyen feltételes fordítási szerkezeteket ismer?
- Mikor értékelodik ki a feltételes fordítás
feltétele? - Mire szolgál a feltételes fordítás?
- Milyen feltételes fordítási utasításokat ismer?
- Mire szolgál az IF1 feltételes fordítási
utasítás? - Mire szolgál az IFB feltételes fordítási utasítás?
75- Feladatok
- Hasonlítsa össze a makrót az eljárással!
- Mikor célszeru 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?
76- 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?