otodik generacios processzorok_pentium

302
Tartalomjegyzék Tartalomjegyzék Tartalomjegyzék ............................................................................... 3 1.fejezet: Kompatibilitás az x86-os architektúrákkal ................... 10 1.1. Hardware kompatibilitás ........................................................ 10 1.1.1. Software kompatibilitás .................................................. 10 1.2. Konkurens ötödik generációs x86-kompatibilis architektúrák ........................................................................... 12 1.2.1. Az INTEL Pentium processzora ..................................... 12 1.2.1.1. INTEGER egység ................................................... 13 1.2.1.2. Cache-ek, memória kezelés..................................... 15 1.2.1.3. Programág előrejelzés ............................................. 17 1.2.1.4. Beépített lebegőpontos egység ................................ 18 1.2.1.5. "Bogaras" a koprocesszor ?..................................... 19 1.2.1.6. Sebességnövelő technikák a Pentium osztályú számítógépeknél..................................................... 19 1.2.1.7. Multiprocesszoros rendszerek ................................. 22 1.2.1.8. Adatvédelem ........................................................... 23 1.2.2. A Cyrix M1-es processzor családja ............................ 24 1.2.2.1. Pipeline vagy szuperpipeline ?................................ 24 1.2.2.2. 32 regiszter jobb mint 8 ! ....................................... 26 1.2.2.3. Csökkentett függőség - nagyobb sebesség .............. 28 1.2.2.4. Kiegyénített terhelés -gyorsabb programfutás ....... 29 1.2.2.5. Kiugrás lehetősége a végrehajtási sorrendből ......... 29 1.2.3. A NexGen Nx 586-os processzor családja .................... 31 1.2.3.1. Hogyan lehet RISC processzorból CISC avagy fából vaskarika ? .................................................... 31 1.2.3.2. x86 - RISC86 .......................................................... 33 1.2.3.3. Szuperskalár végrehajtás-javuló hatásfok ............... 35 1.2.3.4. Az utasítás-előrejelzési CACHE (BPC).................. 35 1.2.3.5. Cache hierarchia...................................................... 36 2. fejezet: Processzor erőforrások ................................................... 39 Landmark 2.00 ............................................................................... 40 CHECKIT 3.0 ................................................................................ 43 MIPS 1.20: (MIPS) ........................................................................ 46 3

Upload: dsonic2007

Post on 19-Jan-2016

43 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Otodik Generacios Processzorok_pentium

Tartalomjegyzék

Tartalomjegyzék

Tartalomjegyzék...............................................................................3

1.fejezet: Kompatibilitás az x86-os architektúrákkal ...................10

1.1. Hardware kompatibilitás ........................................................10 1.1.1. Software kompatibilitás ..................................................10

1.2. Konkurens ötödik generációs x86-kompatibilis architektúrák ...........................................................................12

1.2.1. Az INTEL Pentium processzora .....................................12 1.2.1.1. INTEGER egység ...................................................13 1.2.1.2. Cache-ek, memória kezelés.....................................15 1.2.1.3. Programág előrejelzés .............................................17 1.2.1.4. Beépített lebegőpontos egység................................18 1.2.1.5. "Bogaras" a koprocesszor ?.....................................19 1.2.1.6. Sebességnövelő technikák a Pentium osztályú

számítógépeknél.....................................................19 1.2.1.7. Multiprocesszoros rendszerek.................................22 1.2.1.8. Adatvédelem ...........................................................23

1.2.2. A Cyrix M1-es processzor családja ............................24 1.2.2.1. Pipeline vagy szuperpipeline ?................................24 1.2.2.2. 32 regiszter jobb mint 8 ! .......................................26 1.2.2.3. Csökkentett függőség - nagyobb sebesség..............28 1.2.2.4. Kiegyénített terhelés -gyorsabb programfutás .......29 1.2.2.5. Kiugrás lehetősége a végrehajtási sorrendből.........29

1.2.3. A NexGen Nx 586-os processzor családja ....................31 1.2.3.1. Hogyan lehet RISC processzorból CISC avagy

fából vaskarika ? ....................................................31 1.2.3.2. x86 - RISC86 ..........................................................33 1.2.3.3. Szuperskalár végrehajtás-javuló hatásfok...............35 1.2.3.4. Az utasítás-előrejelzési CACHE (BPC)..................35 1.2.3.5. Cache hierarchia......................................................36

2. fejezet: Processzor erőforrások...................................................39

Landmark 2.00...............................................................................40 CHECKIT 3.0................................................................................43 MIPS 1.20: (MIPS)........................................................................46

3

Page 2: Otodik Generacios Processzorok_pentium

Tartalomjegyzék

CPUTEST 1.1 (MIPS)...................................................................48

3. Fejezet: Általános CPU programozási információk .................62

3.1. A memória felépítése..............................................................62 3.1.1. Nemszegmentált vagy "lapos" modell ............................63 3.1.2. Szegmentált modell ........................................................64

3.2. Regiszterek .............................................................................65 3.2.1. Általános regiszterek ......................................................65 3.2.2. Szegmensregiszterek.......................................................67 3.2.3. Utasításmutató ................................................................69 3.2.4. A verem felépítése és használata ....................................69 3.2.5. Flagregiszter ...................................................................70

3.2.5.1. Állapotbitek.............................................................71 3.2.6 Rendszer-regiszterek........................................................73

3.2.6.1. Rendszer-flagek ......................................................74 3.2.6.2. Vezérlőregiszterek .................................................77 3.2.6.3. Nyomkövető regiszterek .........................................82

3.3. CPU üzemmódok....................................................................84 3.3.1. Valós üzemmód ("valós mód").......................................84 3.3.2. Védett üzemmód.............................................................84 3.3.3.Rendszermenedzselő üzemmód.......................................84

3.4. Inicializálás és az üzemmódok közötti átkapcsolás ...............86 3.4.1. A processzor inicializálása .............................................86

3.4.1.1. A processzor állapota reszetelés után .....................87 3.4.1.2. Az első végrehajtott utasítás ...................................90 3.4.1.3. A cache engedélyezése............................................91

3.4.2. Software inicializálás valós üzemmódban......................92 3.4.2.1. Rendszertáblázatok .................................................92 3.4.2.2. Az NMI megszakítás...............................................92

3.4.3. Software inicializálása védett üzemmódban...................93 3.4.3.1. Rendszertáblázatok .................................................93 3.4.3.2. Megszakítások.........................................................94 3.4.3.3. Lapozás ...................................................................94 3.4.3.4. Taszkok ...................................................................96 3.4.3.5. A TLB, BTB és cache tesztelése.............................97

3.4.4. Üzemmódváltás ..............................................................97 3.4.4.1. Átkapcsolás védett módba ......................................97 3.4.4.2. Visszakapcsolás valós üzemmódba ........................98

4

Page 3: Otodik Generacios Processzorok_pentium

Tartalomjegyzék

3.4.5. Példa inicializálásra és üzemmód átkapcsolásra.............99 3.4.5.1. A példa célja............................................................99 2.4.5.2. A memória elrendezése a reset-elést követően .......100 3.4.5.3. Az algoritmus..........................................................100 3.4.5.4. Eszközök használata ...............................................102 3.4.5.5. A STARTUP.ASM listája.......................................104 3.4.5.6. A MAIN.ASM forráskódja .....................................113 3.4.5.7. Állományok támogatása..........................................116

3.5. A valós üzemmód felépítése, működése ................................119 3.5.1. Címek lefordítása............................................................119 3.5.2. Regiszterek és utasítások ................................................120 2.5.3. Megszakítás és kivétel kiszolgálás ................................121 3.5.4. Valós üzemmódú kivételek.............................................122

3.6. A Védett üzemmód felépítése, működése ..............................124 3.6.1. Memóriaszervező regiszterek. ........................................125 3.6.2. Rendszer utasítások ........................................................126 3.6.3. Védett üzemmódú memóriaszervezés ............................128

3.6.3.1 A szegmentálási modell kiválasztása.......................131 3.6.3.1.1. A sík modell ....................................................131 3.6.3.1.2. Védett sík modell ............................................133 3.6.3.1.3. Multiszegmens modell ....................................134

3.6.3.2. Szegmensfordítás ....................................................136 3.6.3.2.1. Szegmensregiszterek .......................................138 3.6.3.2.2. Szegmensszelektorok ......................................139 3.6.3.2.3. Szegmens deszkriptorok..................................141 3.6.3.2.4. Szegmensdeszkriptor-táblázatok.....................148 3.6.3.2.5. Deszkriptortáblázat bázisregiszterek...............149

3.6.3.3. Lapfordítás ..............................................................150 3.6.3.3.1. Lapozási opciók...............................................151 3.6.3.3.2. Lineáris cím.....................................................152 3.6.3.3.3. Laptáblázatok ..................................................152 3.6.3.3.4. Laptáblázat bejegyzések..................................153 3.6.3.3.5. Lapkeret cím....................................................154 3.6.3.3.6. A Present (betöltött, jelenlevő) bit ..................154 3.6.3.3.7 Hozzáfért (accessed) és "piszkos" (dirty)

bitek.................................................................156 3.6.3.3.8. Írás/olvasás illetve felhasználó/felügyelő

bitek.................................................................156

5

Page 4: Otodik Generacios Processzorok_pentium

Tartalomjegyzék

3.6.3.3.9. Lapszintű cache-vezérlő bitek.........................157 3.6.3.3.10. Fordítási segédpufferek .................................157

3.6.3.4. Szegmens- és lapfordítás keverése..........................158 3.6.3.4.1. A sík modell ....................................................158 3.6.3.4.2 Több lapot átfogó szegmensek.........................159 3.6.3.4.3. Több szegmenst átfogó lapok..........................159 3.6.3.4.4. Nem illeszkedő lap- és szegmenshatárok........159 3.6.3.4.5. Illeszkedő lap- és szegmenshatárok ................159 3.6.3.4.6. Egy laptáblázat elhelyezése

szegmensenként...............................................161 3.7. Védelemi mechanizmusok......................................................162

3.7.1. Szegmens szintű védelem ...............................................162 3.7.2. A szegmens deszkriptorok és a védelem ........................163

3.7.2.1. Típusellenőrzés .......................................................164 3.7.2.2. Határ (limit) ellenőrzés ...........................................167

3.7.3. Privilégium szintek .........................................................169 3.7.4. Az adathozzáférések korlátozása....................................171

3.7.4.1. Kódszegmensekbeli adatok elérése.........................173 3.7.5. Vezérlésátadások korlátozása .........................................174 3.7.6. Kapudeszkriptorok..........................................................176

3.7.6.1. Veremváltás ............................................................181 3.7.6.2. Visszatérés egy procedúrából .................................185

3.7.7. Az operációs rendszer számára lefoglalt utasítások .......188 3.7.7.1. Privilegizált utasítások ............................................188 3.7.7.2. Érzékeny utasítások.................................................189

3.7.8. Mutatók érvényességét ellenőrző utasítások ..................189 3.7.8.1. Deszkriptor érvényességének ellenőrzése...............192 3.7.8.2. Mutatók integritása és az RPL ................................193

3.7.9. Lapszinti védelem...........................................................194 3.7.9.1. A laptáblázat bemenetek által tartalmazott

védelmi paraméterek..............................................194 3.7.9.1.1. A megcímezhető tartományt érintő

megszorítások..................................................195 3.7.9.1.2. Típusellenőrzés................................................196 3.7.9.1.3. A védelem kombinálása a laptáblázatok

mindkét szintjén ..............................................197 3.7.9.1.4. A lapvédelem fölülírói ....................................197

3.7.9.2. Lap- és szegmensvédelem kombinálása .................198

6

Page 5: Otodik Generacios Processzorok_pentium

Tartalomjegyzék

3.8. Védett üzemmódú multitaszking............................................200 3.8.1. Taszk-állapot-szegmens.................................................201 3.8.2. A TSS deszkriptor...........................................................204 3.8.3. Taszkregiszter .................................................................205 3.8.4. Taszk kapudeszkriptorok ................................................208 3.8.5. Taszkkapcsolás ...............................................................209 3.8.6. Taszkok visszafelé kapcsolása (LINKING) ...................214

3.8.6.1. A Busy (foglalt) bit megelőzi a hurkok kialakulását ............................................................216

3.8.6.2. A taszk visszakapcsolások módosítása ...................217 3.8.7. Taszkok címtartománya..................................................218

3.8.7.1. Taszkok által lineárisról- fizikai címre végzett leképzés..................................................................218

3.8.7.2. A taszkok logikai címtartománya ..........................219 3.9. Védett üzemmódú kivételek és megszakítások ......................222

3.9.1. Kivétel- és megszakításvektorok ...................................223 3.9.2. Utasítások újraindítása....................................................225 3.9.3. Megszakítások engedélyezése és letiltása .....................225

3.9.3.1. További NMI megszakítások maszkolása..............226 3.9.3.2. INTR megszakítások maszkolása ..........................226 3.9.3.3. Debug hibák maszkolása az RF bit segítségével ....227 3.9.3.4. Egyes kivételek és megszakítások maszkolása.......228

3.9.4. Szimultán kivételek és megszakítások közötti prioritás........................................................................228

3.9.5. A megszakításdeszkriptor-táblázat .................................230 3.9.6. IDT deszkriptorok...........................................................231 3.9.7. Megszakítás taszkok és megszakítás-kezelő

procedurák ...................................................................233 3.9.7.1. Megszakítás-kezelő procedúrák..............................233

3.9.7.1.1. A megszakítás-kezelő eljárás verme ..............234 3.9.7.1.2. Visszatérés egy megszakítás-kezelő

eljárásból .........................................................235 3.9.7.1.3. A megszakítás-kezelő eljárás flag-

használata ........................................................236 3.9.7.1.4. Védelem a megszakítás-kezelő

eljárásokban.....................................................236 3.9.7.2. Megszakítás-kezelő taszkok....................................237

3.9.8. Hibakódok.......................................................................239

7

Page 6: Otodik Generacios Processzorok_pentium

Tartalomjegyzék

3.9.9. Kivétel feltételek............................................................240 3.9.9.1. 0-s számú megszakítás - Osztáshiba (Divide

Error)......................................................................241 3.9.9.2. 1-es számú megszakítás - Debug kivétel ................241 3.9.9.3. 3-as számú megszakítás - Töréspont

(Breakpoint) ...........................................................241 3.9.9.4. 4-es számú megszakítás - Túlcsordulás

(Overflow) .............................................................242 3.9.9.5. 5-ös számú megszakítás - Határsértés (Bounds

Check) ....................................................................242 3.9.9.6. 6-os számú megszakítás - Érvénytelen utasítás

(Invalid Opcode) ....................................................243 3.9.9.7. 7-es számú megszakítás - nem elérhető eszköz

(Device Not Available)..........................................243 3.9.9.8. 8-as számú megszakítás - Kettős hiba, dupla

hiba (Double Fault) ................................................244 3.9.9.9. 9-es számú megszakítás - (az Intel által

fenntartott, használata nem ajánlott)......................246 3.9.9.10. 10-es számú megszakítás - Érvénytelen TSS

(Invalid TSS)..........................................................246 3.9.9.11. 11-es számú megszakítás - Szegmens nincs

jelen, (Segment Not Present) .................................247 3.9.9.12. 12-es számú megszakítás - verem kivétel

(Stack Exception)...................................................249 3.9.9.13. 13-as számú megszakítás - Általános védelmi

hiba (General Protection).......................................250 3.9.9.14. 14-es számú megszakítás - Laphiba (Page

Fault) ......................................................................252 3.9.9.14.1. Taszkkapcsolás alatti laphiba ........................253 3.9.9.14.2. Laphiba összeférhetetlen veremmutatóval ....254

3.9.9.15. 16-os számú megszakítás - Lebegőpontos egység hiba, Floating-Point Error) ........................255

3.9.9.15.1. Numerikus kivételek kezelése.......................257 3.9.9.15.2. Szimultán kivételekre adott válaszok............258

3.9.9.16. 17-es számú megszakítás - Illeszkedés ellenőrzés ellenőrzési hiba (Alignment Check) .....259

3.9.9.17. 18-as számú megszakítás - Processzortípus ellenőrzés (Machine Check) ..................................261

8

Page 7: Otodik Generacios Processzorok_pentium

Tartalomjegyzék

3.9.10. A kivételek összefoglalása............................................261 3.9.11. Hibakódok összefoglalása ............................................263

3.10. Rendszermenedzselő üzemmód...........................................264 3.10.1. Az SMI megszakítás .....................................................265 3.10.2. Az SMM kezdeti állapota .............................................267

3.10.2.1. Az SMM végrehajtása...........................................268 3.10.3. Az SMRAM processzor-állapot tároló formátuma.......269

3.10.3.1. Az SMM revízió-azonosító (FEFCH ofszet) ........271 3.10.3.2. I/O trap-újraindítás (FF00H ofszet) ......................272 3.10.3.3. Felfüggesztett állapotból való automatikus

újraindítás (FF02H ofszet) .....................................273 3.10.3.4. Az állapottároló bázisa (FEF8H ofszet)................273

3.10.4. Az SMRAM relokációja ...............................................274 3.10.5. Visszatérés az SMM-ből...............................................275

3.11. 8086-os virtuális üzemmód ..................................................276 3.11.1. 8086 CPU kód végrehajtása..........................................277

3.11.1.1. Regiszterek és utasítások ......................................277 3.11.2.1. Lapozás a 8086-os virtuális taszkok esetében ......278 3.11.2.2. Védelem egy 8086-os virtuális taszkon belül .......279

3.11.3. Belépés a 8086-os virtuális üzemmódba és az abból való kilépés ........................................................279

3.11.3.1. Taszkátkapcsolások általi tranzíciók.....................282 3.11.3.2. Átmenet trap- és megszakításkapukon

keresztül .................................................................282 3.11.4. Érzékeny utasítások ......................................................285 3.11.5. Virtuális megszakítások támogatása.............................286 3.11.6. A 8086 operációs rendszerhívások emulációja.............286 3.11.7. Virtuális I/O ..................................................................287

3.11.7.1. I/O-ra leképezett I/O .............................................288 3.11.7.2. Memóriába leképezett I/O.....................................288 3.11.7.3. Különleges I/O pufferek........................................289

3.11.8. Különbségek a 8086 CPU-hoz képest ..........................289 3.11.9. Különbségek a 286 CPU-hoz képest ............................294

3.11.9.1. Privilégiumszint ....................................................294 3.11.9.2. A busz lezárása......................................................295

3.11.10. Különbségek a 386 és 486 CPU-hoz képest ...............296

Ábra- és példajegyzék ......................................................................297

9

Page 8: Otodik Generacios Processzorok_pentium

Tartalomjegyzék

Előzetes a második kötet tartalmából ............................................301

10

Page 9: Otodik Generacios Processzorok_pentium

Hardware kompatibilitás

1.fejezet: Kompatibilitás az x86-os architektúrákkal

1.1. Hardware kompatibilitás Az INTEL a Pentium processzort (80502, 80503) úgy tervezte, hogy a már meglévő x86-os architektúrákkal "felülről" kompatibilis legyen. A gyártók közötti hardware kompatibilitásra kár lenne szót vesztegetni, ugyanis a hardware felépítés szükségképpen elkell hogy térjen, a jogi viták elkerülése miatt. Azonban a fejlesztőknél, és a gyártóknál (bízzunk benne hogy nem csak ez) nem ez a fő szempont. Szeretnének minél gyorsabb, és hatékonyabb típusokat kifejleszteni e gyorsuló számítástechnikai piac korlátlan "számítási éhségének" kielégítése érdekében. 1.1.1. Software kompatibilitás Nagyon lényeges kérdés azonban a software kompatibilitás. A software kompatibilitás megőrzése érdekében az alkalmazások fejlesztésekor szemelőtt kell azokat a bit-eket, Byte-okat amelyek különböző hardware architektúrák esetén változhatnak. Erre a sokféle processzor verzió, és chip-gyártó miatt kell ügyelnünk. Az ötödik generációs x86 kompatibilis processzorok gyártása terén sok gyártó és fejlesztő indult csatába. Minden egyes processzornál a kompatibilitás kérdését külön meg kell vizsgálni. Ma már vannak neves cégek, amelyek csak ezen kérdések vizsgálatára kötelezték el magukat, pl.: az XXCAL laboratórium. A továbbiakban ezen nemzetközileg elismert "laborcégek" vizsgálati eredményeire, vagy a software fejlesztőjének kompatibilitási nyilatkozatára fogunk hivatkozni. Számos regiszter és memóriaszerkezet leírásakor egyes bitek "fenntartott"-ként vannak jelölve. Abban az esetben, amikor egy bit meghatározatlannak vagy fenntartottnak van jelölve, alapvető követelmény az, hogy az jövőbeni processzorokkal való kompatibilitás érdekében a software ezeket a biteket úgy kezelje, mintha a jövőben (bár ismeretlen) hatásuk lenne a processzor működésére. A fenntartott bitek

11

Page 10: Otodik Generacios Processzorok_pentium

Kompatibilitás az x86-os architektúrákkal

működését célszerű nemcsak meghatározatlannak, hanem kiszámíthatatlannak is tekinteni. Ajánlatos, hogy a fenntartott biteket figyelembe vevő software kövesse a következő irányvonalakat: − A fenntartott biteket tartalmazó regiszterek tesztelésének eredménye

ne függjön az említett bitek állapotától. Ezért tesztelés előtt ezeket a biteket maszkolni kell.

− A memóriába vagy regiszterbe való tárolás ne függjön egyetlen

fenntartott bit állapotától sem. − Ne alapozzunk a fenntartott bitekben tárolt információ

visszanyerésének lehetőségére. − Egy regiszter feltöltésekor a fenntartott biteket mindig a

dokumentációban közölt értékekkel töltsük fel. Ha ez nincs feltüntetve, akkor vissza kell tölteni az előzőleg onnan kiolvasott értékeket.

12

Page 11: Otodik Generacios Processzorok_pentium

Hardware kompatibilitás

1.2. Konkurens ötödik generációs x86-kompatibilis architektúrák 1.2.1. Az INTEL Pentium processzora Az X86-os család legfiatalabb tagja a Pentium processzor, amelyet az INTEL úgy tervezett, hogy "lefelé" 100 %-ban kompatibilis legyen az X86-os család előző tagjaival.

Hardware-es

Utasítás-elôrejelzés

64 bites

Kód-cache

Busz interface

PrefetchBuffer-ek

Adat-cache

Regiszterkészlet

Hardware-esszorzás

Hardware-es

osztásHardware-es

összeadás

FPUALU ALU

Pipeline-olt

32 bit64 bit

64 bit

64 bit

: A Pentium processzor blokkvázlata

uperskalár architektúrával épül föl, tehát tt egynél több utasítást tud végrehajtani.

egységgel, a processzorlapkára integrált külön

32 bit256 bit

64 bit

256 bit 256 bit

32 bit 32 bit

32 bit 32 bitIntegerEgység

64 bit

1.1. ábra

or sz A Pentium processz

laegyetlen órajel ciklus aBeépített lebegőpontos

13

Page 12: Otodik Generacios Processzorok_pentium

Konkurens ötödik generációs architektúrák

kód- és write-back adatcache-sel,

ián működő Intel486 chip-ez képest.

ine öt utasítás végrehajtási zintre tagozódik:

−− Címgenerálás

− Végrehajtás − WriteBack Utasítások elő-betöltése (Instruction Prefetch): Az utasítások kódjának a magasabb címekről történő előzetes beolvasása a

64 bit-es külső adatbusszal, az újabb 90-100MHz-es típusok integrált MP (Multi Processor) vezérlővel rendelkeznek. 1.2.1.1. INTEGER egység A Pentium processzor szíve a két beépített utasítás pipeline, amelyek egymástól függetlenül működnek. Ezek a pipeline-ok teszik képessé a Pentium processzort, hogy egy óraciklus alatt két integer utasítást végrehajtson. Ez közel kétszeres chip sebességet jelent az azonos frekvench A Pentium processzor pipeline-jai azonosak az Intel486 CPU egyszerű pipeline-jával, de magasabb sebességhez optimalizálták őket. Mindegyik pipels

Prefetch Utasítás dekódolás

U VPipeline Pipeline

Utasításdekódolás

Cím Címgenerálás generálás

Végrehajtás Végrehajtás

Write-Back Write-Back

Utasításdekódolás

PREFETCH

1.2. ábra: Az INTEGER egység

14

Page 13: Otodik Generacios Processzorok_pentium

Az INTEL Pentium processzora

processzorba, a végrehajtást megelőzően; az utasítások végrehajtásának tfedésére használt technika. Amikor egy utasítás a prefetch-ből az á

utasításdekóderbe kerül, a pipeline kész egy másik, új utasítás végre-hajtásának elkezdésére. Sok esetben a Pentium processzor két utasítást is el tud végezni egyszerre - egy utasítást mindegyik pipeline-ban - ez a módszer "utasítás párosítás" néven ismert. A párosítás feltétele, hogy mindkét utasításnak "egyszerűnek" kell lennie. Mindegyik pipeline saját ALU-val (aritmetikai logikai egység), címgeneráló egységgel, és adatcache interface-szel rendelkezik.

VÉGREHAJTÓ EGYSÉG

MIKROKÓD ROMSZEKVENCIA

VEZÉRLÔ

LIMIT

EGYSÉG EGYSÉG EGYSÉG EGYSÉG

SZORZÓ ÖSSZEADÓ ELTOLÓ REG.

KÉSZLET

UTASÍTÁSDEKÓDER

UTASÍTÁS

SOR

VEZÉRLÉS

CÍMEKROM

BRANCH VEZÉRLÉS

VEZÉRLÉS

PIPELINE BELSÔ

ADATBUSZ

BYTE MUX. ÉSADATBUSZMEMÓRIA

I/O REGISZTEREK

MEMÓRIAMANAGER

1.3. ábra: A PIPELINE-ok belső felépítésének blokkvázlata

15

Page 14: Otodik Generacios Processzorok_pentium

Konkurens ötödik generációs architektúrák

1.2.1.2. Cache-ek, memória kezelés Az előbb említett cache egységek 8 kByte kapacitásúak, és az egyik csak adatokat, a másik csak utasításokat tárol. Az előbb említett cache-ek kétutas csoport-asszociatív szervezésűek és támogatják a direct-map eljárást. A csoport-asszociatív szervezés a cache-felépítés olyan formája, mely egy adattömb helyét a főmemóriában leszűkíti ugyan, de ennek helye a cache-ben nincs teljes mértékben meghatározva. A csoport-asszociatív felépítés a közvetlen leképezést megvalósító felépítés

elyben a főmemória egy adott címének csak egyetlen hely felelhet meg cache-ben), és a teljes mértékben asszociatív felépítés (mely az adatot a

melyik részéből a cache bármelyik részébe helyezheti) közt ké rom n z e l i, hogy főmemória a ott címéről az adat n helyen legyen cache-elve, mely bárhol lehet a cache-ben. A cache-vonalak 32 Byte-os (256 bit) szervezésűek, így a cache áramköröknek elég csak 2* 32 Byte-os vonalon keresni adatot a teljes cache helyet. Ezen 32 Byte-os vonalak (a 486DX-ben csak 16 Byte-os vonalak vannak) segítségével épül fel a Pe cesszor 6 bit széles bus a.

proces ak adat-, utasítástárolásra van szüksége és a c teljesen fel van töltve, akkor a legrégebben használt

elhagyja, és az így teremtett üres helyet az aktuális inform cióval írja fel l. Az adatcach -nek két van - m degyik pipe z eg og ikl t k űvelet is feltudja használni ugyanazt az adatot. Ha az adat már éppen kikerül az adatcache-ből (és csak akkor), a processzor visszaírja az adatot a fő memóriába. Ez a technika WRITE-BACK cache kezelés

n

p oáltal cache-elt adatot próbál elérni.

(mafőmemória bár

pez komp isszumot. Egy "n-szerese csoport-ass ociatív" cachehetővé tesz a d

ntium pro

Ha a ache már

információkat

4 z

szorn vagy

á ü e interface-ey egy órac

inuson belül kéline-ho

ülönböző my-egy, amely azt biztosítja, h

néven ismert. Abban az esetben ha a processzor az adatot egyidejűleg a főmemóriába és a cache-be is beírja (a Pentium processzor dinamikusan támogatja a Write-Through cache kezelést), WRITE-THROUGH cache kezelésről beszélhetünk. A fent említett eljárások biztosítják a főmemória s a cache konzisztenciáját. (A konzisztencia különöseé

multiprocesszoros rendszerekben fontos, és azt biztosítja hogy a r cesszor ne helytelen értéket kapjon meg, amikor egy másik processzor

Ha a cache-elt adatot megváltoztatja,

16

Page 15: Otodik Generacios Processzorok_pentium

Az INTEL Pentium processzora

akkfelh koll

ESI szabványként ismert. (MESI= Modified, Exclusive, Shared,

vonalaproempro Ca

á

or mindegyik másik processzornak a megváltoztatott adatokat kell asználnia.) Az előbbiekben tárgyalt cache-konzisztencia proto

MInvalid). A szabvány 4 állapotot definiál, amelyek mindegyike a cache

alaihoz van rendelve, a CPU által ezen a vonalon végrehajtott művelet pján. Multiprocesszoros rendszerekben sokszor előfordul, hogy több cesszornak egyidőben van szüksége ugyanarra az adatra. Ha a fent lített protokoll szabályait betartjuk a multiprocesszoros konzisztencia blémát is megoldottnak tekinthetjük.

che-vonal llapota

M módosított

E kizárólagos

S megosztott

I érvénytelen

Ezvonal igen igen

igen

nem

a cache-

érvényes ? Az adat

másolata ...

nem aktuális

érvényes

érvényes

-- Az adat

megtalálható

egy m

ásik processzor

cache-ében ?

nem nem talán talán

Írás a

vonalra ...

nem megy ki

a buszra

nem megy ki

a buszra

kimegy a buszra és frissíti a cache-t

közvetlenül kimegy a

buszra

1.4. ábra: Cache-vonal állapotai a MESI protokoll szerint

nnak meghatározására, hogy egy írásművelet soráA n mikor kell a memóriát felfrissítse, a cache egy adott 'frissítési stratégiát' kell

hatással az olvasásműveletekre.) ssítési stratégiák a következők:

− Átírás (write-through) - A cache-vonalba való írásigény esetén mind a cache-memória, mind a főmemória frissítésére sor kerül. Az átírás

főhasználjon. (A frissítés stratégiája nincs A Pentium processzor által támogatott fri

17

Page 16: Otodik Generacios Processzorok_pentium

Konkurens ötödik generációs architektúrák

has

zaírás (write-back) - A cache-vonalba való írásigény csak a cache-memóriát frissíti fel. A visszaírás-stratégia csökkenti a busz

che konzisztenciáját fenntartó mechanizmusok is kiválthatják.

A külön adat- és utasításcache előnye, hogy kizárja az tasításbetöltés és az adatelérés konfliktusának létrejöttét. Az említett onfliktus akkor jöhet létre, ha pl. az egyik pipeline prefetch állapotban

ache-ből - egy adathoz szeretne hozzájutni és ugyanazokat a chevonalakat egyidőben akarják használni. A különbontott cache-ek

znos például a grafikus pufferek esetében, ahol ahhoz hogy az adat a grafikus képernyőn megjelenjen, frissíteni kell a főmemóriát is.

− Viss

forgalmát, a szükségtelen memória-írások kiküszöbölése által. A cache-vonalakba való írások nem továbbítódnak azonnal a főmemóriába, hanem a cache-ben gyűlnek össze. A megváltoztatott cache-vonalak később, a visszaírási művelet végrehajtásakor kerülnek a főmemóriába. A visszaírási műveleteket általában a cache-vonalak felszabadításának szükségessége váltja ki, például amikor a már teljesen betelt cache-ben szükség van egy új vonal lefoglalására. A visszaíró műveleteket a ca

A processzor lehetővé teszi, hogy bármely memóriaterület bármelyik stratégia segítségével kezelhető legyen. Mind a software, mind a hardware kézben tarthatja a vezérlést a használt stratégia felett; a software a laptáblázatok bejegyzéseinek PWT bitje, míg a hardware a WB/WT# jel segítségével. A Pentium processzor belső cache-ei együtt használhatók a külső cache-ekkel, melyek működhetnek átíró, visszaíró vagy mindkét módban. ukvan és utasítást tölt be a cache-ből, miközben a másik pipeline - szintén a ccabiztosítják a két hozzáférési művelet párhuzamosságát. 1.2.1.3. Programág előrejelzés

18

Page 17: Otodik Generacios Processzorok_pentium

Az INTEL Pentium processzora

A cache egységBTB-t sem. (Branch Tcache, amely a dinamiktárolja. Az utasítás-előinformációk segítségévsebességgel lehet hasznkeresztül lehet igazán mciklus végetérésekor meghatározza, hogy avéget a ciklus), vagy végzett a ciklus végrehajtásával, és a következő utasítással kell a programot folytatni. A fentiekben v ük programágnak (Branch). Az utasítás előrejelzés pedig megjósolja, melyik programágat fogja váágválasztások statisztiktalál, a BTB "megjegyBTB információi alapjmelyik programágát kehelyes, ezzel az eljáráEllenkező esetben a feidőveszteséget nem oklenne. 1 l

az INTEGER egység ipeline-jaiban kezdődik, és az első néhány integer pipeline-szint után

ek felsorolásánál azonban nem hagyhatjuk ki a arget Buffer = programág-tároló) Ez egy aprócska us utasítás-előrejelzés (Branch Prediction) adatait

rejelzés az a technika, amely által szolgáltatott el a pipeline-okat teljes feltöltöttséggel, azaz teljes álni. A koncepciót egy tipikus alkalmazási példán egérteni: az utasítás-előrejelzés minden software-elvégez egy feltételes vizsgálatot, amely

ciklus elejét kell-e ismét végrehajtani (nem ért

ázolt két lehetőséget vagy "útvonalat" nevezz

lasztani a software, a már előzőleg megtett ái alapján. Amikor a processzor egy elágazást zi" az utasítást, és a programág ugrási címét. A án születik meg a "jóslat" arról, hogy az elágazás ll majd a következőkben felhasználni. Ha a jóslat ssal az ágcím betöltési időt meg lehet takarítani. lhasználandó ág címét be kell tölteni, ami külön oz, mert erre a műveletre egyébként is szükség

ebegőpontos egység A 486DX processzorokhoz képest egy teljesen újratervezett matematikai processzor került a Pentiumok lapkáira. Az újítás gyümölcse egy 8 szintű pipeline-nal felépülő meglehetősen gyors lebegőpontos egység, amely órajelenként egy, néhány esetben két (ha a második utasítás egy "Exchange") lebegőpontos számítást képes elvégezni. A lebegőpontos utasítások végrehajtása

.2.1.4. Beépített

p

19

Page 18: Otodik Generacios Processzorok_pentium

Konkurens ötödik generációs architektúrák

kerül át a lebegőpontos pipeline-ba. Az FPU pipeline-jának első négy szintje megegyezik az INTEGER egység pipeline-jában megtalálható

őpontos végrehajtó egység, kerekítő és regiszterbe író egység, hibajelző egység. Az

FPU olyan új hardware-ben tt algoritmusokat használ, amelyek a

űveletekben (pl.: összeadás, szorzás, áromszosára növelik a műveleti

cesszor ?

ppent fel a

endellenesség nem katasztrofális, és csak a 1995 jan. 1. előtt vásárolt Pentium

eltérés az gyszeres, kétszeres, és négyszeres pontosságú lebegőpontos osztási

a bekövetkezésének valószínűsége ismert: <1:9000000. A "renitens" szám a normál alakban felírt eredmény tizedespont utáni negyedik, és tizenkilencedik helyiértéke között fordulhat elő.

Utasításdekódolás

PREFETCH

első négy szinttel. Az utolsó négy szintet pedig következő egységek alkotják: 2 szintes lebeg

áttervezett tomegvalósíCím

generálás közös mosztás), hsebességet.

Szám konverzió

80 bit

1.2.1.5. "Bogaras" a koproV rehajtás 1ég

->

Végr

A szaksajtóban meglehetősen sok hír röehajtás 2

Pentiumok " hibás " lebegőpontos társprocesszoráról. Megnyugtathatom a kedves olvasót, a r

KeRegis

rekítészterbe írás

processzorokban található meg. Sem a hiba nagysága, sem az általános számítási műveletekre vonatkoztatott gyakorisága nem számottevő. (A gyártó 3 év garanciát vállal a processzorokra, és - bizonyos kereteken belül - ki is cseréli a "bogaras" példányokat.) A hiba az eredmény pontosságának csökkenése. Az

Hibadetektálás

1.5. ábra:

Az FPU pipeline-ja

eműveletekben (FDIV) fedezhető fel, az input operandusok bizonyos kombinációja esetén, a kerekítési módtól függetlenül. Az eredmény pontosságának csökkenése akkor következik be, amikor osztó utasítás ismétlőciklusának használnia kell a szétválogató táblát. A hibát okozó számpárok karakterizálása egyáltalán nem egyszerű, de a hib

20

Page 19: Otodik Generacios Processzorok_pentium

Az INTEL Pentium processzora

1.2.1.6. Sebességnövelő technikák a Pentium osztályú zámítógépeknél

kintsük át miben különbözik egy ötödik generációs Pentium

lár architektúra lasztott cache-ek

Write-Back cache kezelés − újra tervezett 64 bit széles külső adatbusz a memóriák felé (a maximális sebesség

a memóriára vonatkozóan 528 MByte/s - a 486DX50-nél 160MB/s) c

s szükséges a nagyobb alkalmazásoknál (hagyományos 4 kByte-os lapok és növelt 4

esség ?

Első megoldásként számításba jöhet a Pentium osztályú alaplapo-on alkalmazott Pipelined Burst SRAM. Ez a másodszintű cache-elérési

modell változtatásán l kiderül, hogy ez a ódszer milyen arányú sebességnövekedést eredményez. A táblázat

datai Pentium processzorra vonatkoznak, óraciklus számban értendők.

s Előszöris teprocesszor az "elődöktől"? − szuperska− szétvá −

, gyorsabb FPU −

− ache kezelés burst módban (nagy 256bit-es adagok tölthetők adatcache-ből egyetlen egyszerű buszciklus alatt)

− a MOV, és néhány ALU utasítás harware-es megvalósítású, ezért gyorsabb működést, nagyobb teljesítményt tesz lehetővé

− támogatja a növelt lapméreteket így kevesebb lapozá

MByte-os is választhatók) Ha egy az eddigieknél gyorsabb számítógépet szeretnénk létrehozni, akkor meg kell, hogy vizsgáljuk melyek azok a részegységek, amelyekre a többi részegységnek várnia kell. Ha a várakozásokat "kihagyjuk" a rendszer gyorsulni fog. Napjainkban a processzorok olyan műveleti sebességet értek el, hogy örökké várniuk kell, a perifériákra vagy memóriára, legyen az akár HDD, a főmemória, vagy cache-memória. Hogyan növelhető a memória elérési seb

kak módszere. Az alábbi táblázatbó

ma

21

Page 20: Otodik Generacios Processzorok_pentium

Konkurens ötödik generációs architektúrák

PipA ciklus típusa Aszinkron SRAM

elined Burst SRAM

Burst Read 3-2-2-2 3-1-1-1 Burst Write (Write back) 4-3-3-3 3-1-1-1 Single Read 3 3 Single Write 4 3 Back-to -back Burst Read

3-2-2-2-2

3-1-1-1-1

1.6. ábra: Cache kezelési modellek

Pl. a 3-1-1-1 adat az első adat beolvasásánál 3 óraciklust kell várni az érvényes adatra, a második azonban már egy ciklus alatt beolvasható, és így tovább. Például négy egymást követő adat beolvasása kilenc óraciklus helyett, csak hatot igényel. Pipelined Burst SRAM-mal

atátviteli sebesség maximuma 300 MByte/s fölött van. ad A második megoldást keressük a DRAM-ok tájékán. A normál Page-mode DRAM-oknál az adat a CAS# jel felfutóélénél érvényes. Erre "gyógyszer" EDO DRAM (Extended Data Output) használata. (Az EDO DRAM csak 72pin-es SIMM modulként kerül forgalomba. Fizikai méretkülönbség nincs a Page mode DRAM és az EDO DRAM között.) Ha EDO DRAM-ot használunk, az adat a CAS# ciklus teljes időtartama alatt érvényes. Ezzel a megoldással a (fő)memória elérési sebesség

00MB/s -ról 200MB/s fölé emelkedik. A két időzí1 tés közötti ülönbséget az alábbi ábrán vehetjük szemügyre. k

22

Page 21: Otodik Generacios Processzorok_pentium

Az INTEL Pentium processzora

P

érvényes érvényes érvényesDATA (out)

érvényes érvényes érvényes

EDO DRAM idôdiagram:

CAS#

DATA (out)

age mode DRAM idôdiagram:

iesésével kell számolnunk. A Bus Master IDE egoldás két legyet üt egy csapásra: egyrészről a vezérléssel nem a

processzornak kell vesződnie, (másik hardware elem teszi meg helyette) és kialakítható egy új adatátviteli megoldás a már meglévő IDE buszon. E megoldás: az enhanced IDE controller. Ez a kontroller két dedikált DMA csatornát használ. (az adatok közvetlenül a memóriába kerülhetnek, és nem szükséges a processzor közreműködése). Az adatátvitel PIO mode 3, és mode 4 IDE névre hallgat. A mode 3-mal az IDE adatátviteli

CAS#

1.7. ábra: DRAM idődiagramok

Ha a fizikai memórián nem csak a memória chip-eket értjük, hanem a merevlemez kapacitásának egy részét is, - pl.: MS-Windows swap területe (lásd: a szegmentált memóriamodellről szóló fejezetet, lapozás) - akkor a HDD adatátviteli sebességének növelésével szintén hatásosan növelhetjük a teljes rendszer teljesítményét. A tradícionális PIO (Programozható I/O) IDE a CPU közreműködését igényli, tehát a processzornak sokat kell várni a lassú mechanikai alkatrészekre. Minél gyorsabb processzorunk van, annál nagyobb teljesítmény km

23

Page 22: Otodik Generacios Processzorok_pentium

Konkurens ötödik generációs architektúrák

sebességének maximuma 11 MByte/s, a mode 4-gyel 17 MByte/s, és ha mode 4 mellé még a DMA mode 2-t is kiválasztjuk 22 MByte/s-os bességet is elérhetünk (Az adatok PCI IDE controllerre vonatkoznak,

helyett nagyobb, 4 MByte-os pokat is kezelhetünk. A nagyobb lapméret előnye, hogy csökken a pcserélési frekvencia, és növekszik a lapokra vonatkoztatott találati

kat lehet végrehajtani.

1.2.1.7. Multiprocesszoros rendszerek A 90-100MHz-es Pentium processzorok lapkái tartalmaznak egy multiprocesszoros vezérlő áramkört is. Ez a vezérlő két részre oszlik: a programozható interrupt vezérlőre (APIC= Advanced Programmable Interrupt Controller), és az arbitrátorra. Ezen vezérlő segítségével olyan nagy teljesítményű és viszonylagosan kis költségű Server architektúrák is megvalósíthatók, amelyek 256 (!) processzort tartalmaznak, mindegyiket saját cache-sel. 1.2.1.8. Adatvédelem

zám eg a tervezők, amely kifejezetten az paritásvizsgálat a külső lábakon, és a lapkára integrált memória stuktúrákon (cache, bufferek, mikrokód ROM). Akad azonban olyan szituáció amikor az adatok integritása különösen fontos. Ezekben az esetekben használható ki a Pentium által támogatott funkcionális redundancia ellenőrzés. [Functional Redundancy Checking (FRC)]. Az FRC két Pentium chip-et igényel: az egyik Master, a másik Checker. A chip-ek párhuzamosan futnak, és a Checker

aseés a HDD-nek "ismernie" kell a fentiekben említett protokollt). A negyedik megoldást maga a Pentium processzor kínálja nekünk: a hagyományos 4 kByte-os lapméretek lalaarány. A lapcserélgetés helyett hasznos utasításo

omplex grafikai eljárások, keret pufferek, operációs rendszer kernelek kesetében jelentős sebességnövekedés érhető el. A megoldás másik előnye, hogy transzparens (átlátszó) az alkalmazások szempontjából.

S os olyan technikát valósítottak m

adatok védelmét szolgálja. A hibadetektálás kétszintű: a

24

Page 23: Otodik Generacios Processzorok_pentium

Az INTEL Pentium processzora

összehasonlítja az általa kapott eredményeket a Master eredményeivel, hogy egészen biztosan hibamentesek legyenek az eredmények. Az FRC alkalmazásával a hibadetektálás hatásfoka 99% feletti. A processzor tartalmaz néhány teszt lehetőséget a chip megbízhatóságára vonatkozóan. Az önteszt minden RESET esetén lefut, és a processzor 70%-át ellenőrzi az IEEE 1149.1 szabvány szerint. Ez segít a gyártóknak a chip külső kapcsolatainak vizsgálatában, és láthatóvá teszi a regisztereket, a processzor állapotainak pontos detektálhatósága érdekében. Ezenkívül a rendszer tartalmaz rendszerprogramozók számára egy lehetőséget a cache-ek találati arányának mérésére. Ezzel a "sebesség monitorozó" üzemmóddal felderíthetők azok az esetek, amikor a processzor hosszú ideig vár a külső buszra, és ez a funkció segít a külső memória optimalizálásában is. A Pentium processzor rendelkezik egy a 386SL-nél megismert System Management Mode-dal is, amely a teljesítmény management-ben és a biztonsági feladatok megoldásában lehet hasznos segítség.

25

Page 24: Otodik Generacios Processzorok_pentium

Konkurens ötödik generációs architektúrák

1.2.2. A Cyrix M1-es processzor családja Nézzük meg, mi rejtőzik az M1-es processzor belsejében. Ha a felépítést tekintjük számos új megoldást találunk. Hogy a különbségeket megértsük, nézzük a processzor szívét, az INTEGER egységet, amelyben

egközelítőleg az összes művelet zajlik.

.2.2.1. Pipeline vagy szuperpipeline ?

m 1 Az M1-es belsejében is megtaláljuk az ötödik generációs processzoroknál már megszokott pipeline egységet.

Az M1 szuperpipeline INTEGER egysége A PENTIUM pipeline INTEGER egysége

= Pipeline szint = utasítás

1.8. ábra: Az M1- es és a Pentium processzorok pipelinejainak összehasonlítása

26

Page 25: Otodik Generacios Processzorok_pentium

A Cyrix M1-es processzor családja

27

Page 26: Otodik Generacios Processzorok_pentium

Konkurens ötödik generációs architektúrák

A pipeline az az egység, amelynek belsejében az adatok és az tasítások végrehajtódnak. A Pentium chip mindegyik pipeline-ja öt égrehajtási szintre osztódik nt

összehasonlítjuk a két procPentium pipeline adatfeldolgohogy az utasítás végrehajtása két pipeline szorosabb egyprocesszort különlegesen magteszi alkalmassá a 0,5 mikrono 1.2.2.2. 32 regiszter job Ha a processzor más r32 általános felhasználású chipekkel, amelyek csak 8 ilmennyiségű regiszter flexibregiszterek a működéshez szezek több adatot tudnak tárol dolgozhat, hogy ritkábban kell várnia, hogy az adat előkerüljön a memóriából. A 32 regiszter miattadattal, ami magasabb sebesséaz ugrási címen található anélkül, hogy tönkretenné vaaktuális Pentium regiszter lekközül a jóslat (Branch Prediction) figyelembe vételével a legoptimálisabbat választhatja ki. Egy másik felépítésbeli különbség található a cache egységben is. Az Intel Pentium chipek elsőszintű cache-e 8 kByte adat, és 8 kByte utas intű cache egysége egy 16 kByte-os duál-portos definiálatlan cache-ből (a cache tárolhat utasításokat és adatokat is vegyesen), és egy 256 Byte-os

tasításvonal cache-ből épül e

uv - mi ahogyan már a 80486-ban is. Ha

esszort az M1-es szuperpipeline, míg a zási technológiát alkalmaz. Ez azt jelenti, hét szintre tagozódik, az M1-es esetében a üttműködése érdekében. Ez az M1-es

as, 100 MHz fölötti órajelek alkalmazására s technológiával .

b mint 8 !

észeibe tekintünk bele, akkor az M1-es-ben regisztert találhatunk, szemben az x86 yen regiszterrel rendelkeznek. A nagyobb ilisebb felhasználást tesz lehetővé. A ükséges részeredményeket tárolják, és ha ni, akkor a processzor úgy

az M1-es processzor mindig tele lehet get eredményez. A feltételes ugrások során

utasításokat feltételesen is végrehajthatja lódi Pentium regiszterkészlet tartalmát. Az épezéséhez pedig a többszörös regiszterek

ítás cache-re osztódik. Az M1-es elsősz

u f l.

28

Page 27: Otodik Generacios Processzorok_pentium

A Cyrix M1-es processzor családja

Utasítás adat

Utasítás vonalCACHE

Adat rendezõ

Definiálatlan CACHE

0. készlet

1. készlet2. készlet

3. készlet

CACHE Címzés

FPU

Adat busz

Busz InterfészEgység

Utasítás vonal CACHEhiányzó adat

Módosított X, Yfizikai címek

1.9. ábra: Az M1-es definiálatlan CACHE-e bármilyen arányban tartalmazhat adatot és utasítást. Az utasításvonal CACHE pedig az

INTEGER egység által leginkább használt utasításokat tárolja. Nézzünk egy példát: egy adatintenzív programszegmens túlterheli a kisebb méretű adatcache-t ( a Pentium esetében 8 kByte), és a chip lassabban fog dolgozni, mert a többi adatot a külső memóriából kell beolvasnia. Az M1-es esetében ugyanez az adatintenzív programszegmens egy nagyobb (16 kByte) definiálatlan cache-ben lelassulás nélkül hajtódhat végre, mivel a processzornak kevésbé kell a külső memóriára támaszkodnia. Az M1-es sebességi előnyének egy részét a tervezők a cache nagy sebességével érték el, egyetlen óraciklus alatt

29

Page 28: Otodik Generacios Processzorok_pentium

Konkurens ötödik generációs architektúrák

képes elérni az adatot. Ez a gyártó szerint kétszer gyorsabb a Pentium datelérésénél.

ég erre a várakozásra, mert ind a

elyik megállna.

a 1.2.2.3. Csökkentett függőség - nagyobb sebesség Amikor két utasítás fut párhuzamosan egy szuperskalár processzoron előtérbe kerül a két utasítás közötti függőség problémája. Ez a függés azt okozza, hogy az egyik utasításnak meg kell állnia, hogy megvárja a másik végrehajtását. Ez pl. akkor fordulhat elő ha mind a kettő ugyanazt a regisztert egyidőben szeretné használni, így az egyiknek

rnia kell. Az M1-es esetében nincs szüksvám 32 regiszter mindkét pipeline felől elérhető, ezért mindegyik utasítás megkaphatja a másolatát erről a regiszterről és egyiknek sem kell várakoznia. Egy másik problémát vet fel a szuperskalár processzorokban amikor a két párhuzamos pipeline-ban valamelyik utasításnak szüksége van a másik utasítás eredményére. Az M1-es olyan adathívási technikát használ, amely biztosítja mindkét pipeline-ban végrehajtódó utasítás redményének szimultán elérését anélkül, hogy valame

Azzal, hogy az egyik utasítás eredményét nem kell kiírni a memóriába és a másik utasítás ezt az eredményt mégis el tudja érni a processzor időt takarít meg, csökkennek a memória elérési ciklusok.

30

Page 29: Otodik Generacios Processzorok_pentium

A Cyrix M1-es processzor családja

1.2.2.4. Kiegyénített terhelés -gyorsabb programfutás

Ha a pipeline kiegyenlí-tetlenségekkel terhelt, akkor az egyik pipeline sokkal telítettebb mint a másik ezért a másiknak meg kell állnia, hogy megmaradjon a program komplexitása, ez szintén lassulást eredményez. Az M1-es tervezői ezt a kiegyenlítetlenséget úgy szüntették meg, hogy az aktuális utasítást mindig a kevésbé terhelt pipeline-on hajtatják végre, és az utasítások át tudnak kelni a két pipeline között. Az M1-es rendelkezik a becslés képességével, ez azt jelenti, hogy meg tudja jósolni, hogy melyik programág utasítását kell betölteni egy bizonyos pipeline-ba ahhoz, hogy időt takarítson meg. (Ezt a funkciót nevezzük utasítás előrejelzésnek.) Ha az aktuális utasítás már fuvalamely pipeline-on mielőtt még a pontos jóslat ismeretes lenne, már időt takarít

r mág

UtasításFetch

Utasítás dekódolás 1

Utasításdekódolás 2

Utasításdekódolás 2

Címszámítás 1

Címszámítás 1

Cím Címszámítás 2 számítás 2

t

meg. Ha a jóslat rossznak bizonyult, akkonem vesztettünk időt, mivel a prograugrási címének betöltésére egyébként isszükség lenne.

Végrehajtás Végrehajtás

Write-BackWrite-Back

1.2.2.5. Kiugrás lehetősége a végrehajtási sorrendből Abban az esetben ha az egyik pipeline-ban lévő utasítás gyorsabb mint az őt megelőző másik utasítás, akkor kiléphet a pipeline sorrendből, és betöltődhet a másik pipeline-ba - anélkül, hogy a

X YPipeline Pipeline

1.10. ábra: Az M1-es

processzor szuperpipeline-okból felépített INTEGER

egysége

31

Page 30: Otodik Generacios Processzorok_pentium

Konkurens ötödik generációs architektúrák

programfutás felfüggesztődne - így nem kell processzoridőt fecsérelni a lassúbb utasítás végrehajtásának kivárására.

1.11. ábra: Kiugrás a végrehajtási sorrendből. Az M1-es processzorban az egyik pipeline végrehajtási sorában lévő utasításnak nem kell

megvárnia a másik pipeline lassúbb utasítását. Kiugorva a végrehajtási sorból, időt lehet megtakarítani a vérehajtás során, a program futásának

megszakítása nélkül.

32

Page 31: Otodik Generacios Processzorok_pentium

A NexGen Nx 586-os processzor családja

1.2.3. A NexGen Nx 586-os processzor családja 1.2.3.1. Hogyan lehet RISC processzorból CISC avagy fából vaskarika ?

A NexGen kutatásainak gyümölcse egy olyan nagy sebességű 8 ől

me áb ko m chi Ennek ellenére a Microsoft kijelentette, hogy az Nx586 Windows kompatibilis. A processzor joggal viselheti a Novell "YES It run with NetWare" logóját is. A kompatibilitási teszteket a független XXCAL laboratórium végezte el. A legnépszerűbb software-k ciklusainak trillióival tesztelték több operációs rendszer, és hálózati protokoll alatt. Az eredmény megdöbbentő: "Platinium Certification " Ezen sorok láttán azt hiszem sokakban felmerül a gondolat: Az INTEL és a Pentium egy újabb, méltó ellenfelére akadt. No de nézzük, mit takar a tokozás.

X 6-os processzor család, amely a 486-os és Pentiumos rendszerekt

glehetősen különböző részekből épül föl. A chip nem "lmpatibilis" sem a 60-66MHz-es, sem a 75-90-100MHz-es Pentiupekkel, tehát speciális alaplap kell hozzá.

33

Page 32: Otodik Generacios Processzorok_pentium

Konkurens ötödik generációs architektúrák

Nx 586Processzor

Nx 587Koprocesszor

SRAML2 CACHE

A chip-től elválasztva találhatjuk meg a lebegőpontos egységet (FPU) mint ahogyan a 386 - 387 -es rendszerekben. Ezzel szemben

integrálásra került a másodszintű (L2, vagy külső) cache vezérlője, a leprocesszorlapkán. Az Nx586-ban egy-egy külön-külön 64 bit széles busz áll rendelkezésre a matematikai processzorral, és a külső SRAM-okkal való társalgásra. A harmadik 64 bit széles busz a rendszer többi tagjával történő kapcsolattartást biztosítja. A külön cache-busz csökkenti a memória, és az I/O ciklusok közötti konfliktusokat. Előny az is, hogy a

SIMM

DRAMRendszer

logikamodulok

16-bites ISA busz (8MHz)32-bites PCI vagy VESA busz (30-33MHz)

64 bit

64 bit 64 bit

64 bit Rendszer

interface

1.12. ábra: Nx586 alapú IBM PC kompatibilis számítógép felépítése NxVL vagy NxPCI rendszerinterface chip felhasználásával. A

atematikai processzor külön tokban helyezkedik el, míg a másodszintű mcache vezérlője a processzorlapkán kapott helyet.

34

Page 33: Otodik Generacios Processzorok_pentium

A NexGen Nx 586-os processzor családja

cache-busz sebessége megegyezhet a CPU órajel frekvenciájával, amíg a

.2.3.2. x86 - RISC86

omplex Instruction Set Computer), amely összetett tasításokat tartalmaz, különböző modellek szerint. Egy példa a CISC

sen és nem software-ből mulálva, mint ahogyan a Motorola PowrePC 603, vagy az Alpha

tjai a normál ISC utasításkészletnek, úgy, hogy közben "örökölték" az x86-os rchitektúra sajátosságait. A RISC név mégis megilleti ezeket az

ódként alkalmazhatóak.

86 feltételezett eredménnyel hajtja végre a ltételes ugrásokat, és az ugrási feltételek kiértékelése után aktualizálja

rendszer-busz tetszőleges sebességgel dolgozhat. Az interface-ek elválasztásának a kivezetések száma és a tokozás gazdaságossága szab határt, ugyanis az Nx586 tokozási költsége (463 lábú PGA tok) már így is kétszerese egy Pentiuménak (296 lábú PGA tok). 1 A RISC (Reduced Instruction Set Computer), egy olyan processzortípust jellemez, amely csak kevés, a fordítók által gyakran igényelt (redukált) utasítást tartalmaz hatékonyabb implementációban. Ellentéte a CISC (Cuprocesszoroknál használható modellek közül: a Pentium Load & Store modellje. Egy Nx586-os processzor teljes mértékben implementálja az X86-os utasításkészletet. Ez az implementáció a RISC86-os architektúrával történik, valós időben, dinamikusan. Hardware-eeprocesszorok teszik, aminek hatalmas teljesítménycsökkenés a következménye. Ezek az utasítások közvetlen leszármazotRautasításokat, mert egyszerű mikrok Az x86-os architektúra egyik szűk keresztmetszete a korlátozott regiszterkészlet: csak 8 általános felhasználású regisztere van. Itt segít fordítás, és a RISC processzorokban már hagyományos 32 regiszter. Az Nx586, az x86 8 regiszterét 22 fizikai regiszterre képezi le. Ezt az eljárást nevezzük regiszter átnevezésnek. Mire jó a regiszter átnevezés? A pipeline-ok elakadásának elkerülése érdekében az Nx5feazokat. Ez a nem optimalizált programok esetén is fennáll.

35

Page 34: Otodik Generacios Processzorok_pentium

Konkurens ötödik generációs architektúrák

A 32 regiszter többszörösen lefedi a Pentium regiszterkészletét. A pipeline folyamatos adatáramlása biztosítható a regiszterek gyors átnevezésével, így a számítási eredmények több fázisa hozzáférhető az adatok újrabetöltése nélkül, tehát a pipeline-ok nem akadnak el a lassú adatbetöltés miatt.

X86 -os utasítások

Utasítás fordító, és ütemezô

Címzô egység

Sok X86-os utasítás egyszerűen konvertálható RISC86-os utasítássá. Vannak azonban olyan X86-os utasítások is, - amelyek a betölt-eltárol modellt használják, például a memória kezelési ciklusok- amelyek csak két, vagy három RISC86-os utasítást igényelnek.

RISC86-os utasítások

Végrehajtóegység

Végrehajtóegység

RISC86-os utasítások

Végrehajtóegység

RISC86-os utasítások

1.13

. ábra: A NexGen szabadalmaztatott RISC86-os architektúrája dinamikusan fordítja az összetett X86-os (CISC) utasításokat

RISC86-os utasításokká, így tehát kihasználhatja a RISC utasítások sebességi előnyeit.

36

Page 35: Otodik Generacios Processzorok_pentium

A NexGen Nx 586-os processzor családja

1.2.3.3. Szuperskalár végrehajtás-javuló hatásfok Azt már tudjuk, hogy egy X86-os utasítás, fordítás után ciklusonként két vagy több RISC86 utasításként is megjelenhet, minden funkcionális egységnél. A funkcionális egységeket úgy tervezték, hogy párhuzamosan több RISC86-os utasítást is végrehajthassanak. A NexGen szuperskalár elnevezése RISC86-os szempontból értendő. A RISC86-os utasítások párhuzamosságának jobb kihasználhatósága érdekében, minden egyes funkcionális egység 14 belépési ponttal rendelkező végrehajtási sorral rendelkezik. Az Nx586-os mikroprocesszor - ahogyan a Pentiumok is - két INTEGER egységgel rendelkezik. A szokatlan azonban az, hogy ez az egység az Nx586-ban egyáltalán nem szimmetrikus. Az egyik INTEGER egység végzi a RISC86 integer utasításokat, beleértve a szorzást és osztást is, míg a másik INTEGER egység az egyszerű egyciklusos utasításokat hajtja végre. A dekóder egység rendelkezik egy "betöltés kiegyenlítő" algoritmussal, és ennek segítségével irányítja az utasításokat valamelyik INTEGER egységre. A RISC86 betöltő és tároló utasítások a CÍM-egységbe kerülnek, amely kiszámítja a cél címet, és gondoskodik az X86-os szabványról szerinti fordításról. Mivel a chip csak egy egyszerű CÍM-egységet tartalmaz, ciklusonként csak egy betöltő, vagy tároló utasítás hajtódhat végre. 1.2.3.4. Az utasítás-előrejelzési CACHE (BPC) Az Nx586 alkalmazza az elméleti futtatás és az utasítás előrejelzés technikáját is. Ha a processzor találkozik egy programággal, először megbecsüli a végrehajtáshoz szükséges időt, és majd később kezdi el az utasítások végrehajtását. Ezt a módszert nevezzük elméleti végrehajtásnak. Az

37

Page 36: Otodik Generacios Processzorok_pentium

Konkurens ötödik generációs architektúrák

Nx586 ke legtöbb setben a észül el, mikor a harmadik programág vizsgálata elkezdődik.

nél. Ez a koncepció hasonlít az AMD

ust használ a

hívás esetén. Az Nx586 tartalmaz egy VISSZATÉRÉSI

.2.3.5. Cache hierarchia

n négyutas csoport asszociatív cache-t alkalmaz a találati rány növelése érdekében. A Pentiummal összehasonlítva mindkét

lag indexelt, és címkézett cache-ek vannak, de a tasak.

ttőnél több programág elméleti futtatására is képes. Az első programág jóslata abban az időpillanatban ke

a A NexGen utasítás-előrejelzési cache-e 5 ciklusos ágbüntetéseket alkalmaz. A BPC 96 belépési ponttal rendelkezik, és az első 24 utasítás

yte-ot tartalmazza minden célcímB29000 ÁGCÉL CACHE-ében alkalmazottra, de különbözik a Pentiumétól, mert a Pentiumé csak a célcímeket tartalmazza (256 elemű célcím puffer).

Az Nx586 két bites "Smith and Lee" algoritm programág jóslatok létrehozásához. Minden egyes BPC adat 2 előrejelzés bitet tartalmaz. Ha egy ág késik, a BPC újabb 2048 adattal bővül, a processzor ellenőrzi a 2 bit széles "ágtörténet" táblázatot, és növeli a jóslási pontosságot. Ez a két struktúra pontosan megjósolja az ágfeltételeket, de nem segít, ha a kód RET utasítást tartalmaz. Ennek oka az, hogy ezek a programágak nehezen kezelhetőek, mert a célcímek változhatnak minden gyes szubrutin e

CÍM VERMET, - hasonlatosan az Alpha architektúrájára - ami 1-8 egymásba ágyazott szubrutin hívást tud kezelni. E a három struktúra kombinációja biztosítja azt, hogy a legtöbb kód esetében a sikeres előrejelzések aránya 90% fölött van. 1 Azzal, hogy a lebegőpontos egység lekerült a processzor lapkájáról, elegendő hely maradt nagyobb cache-ek felépítésére. Az Nx586 16 kByte utasítás-, és 16 kByte adatcache-t tartalmaz. Ezek a memóriák éppen kétszer nagyobbak a Pentium adat- és utasításcache-énél. A NexGeaprocesszorban fizikai

entium esetében kétuP

38

Page 37: Otodik Generacios Processzorok_pentium

A NexGen Nx 586-os processzor családja

ég: a 0.5 mi echnológia 66M ében minde s alatt egy elé délyez, ezért ké lérés zajlik ciklus alatt. 6 egyetlen cím ggel re , hogy má che elérés csak intű (L2) cache, vagy a rendszerbusz elérésére használható. Sok processzorban felf tás végreha or a fent említ nyek bekövetkeznek, de az Nx586 az utasítás végrehajtásának lelassulása nélkül képes kezelni ezeket az esem dszintű cache-kontroller normál SRAM-okból felép re csatlakoz lső cache-nek azonban csak kétféle konfigurációját támogatja: 256k vagy 1M. A máso ache egységes, utasításokat és adatokat is tartalmazhat, és akárcsak az első tas csoport tív. A külsőcache elérésére a más rlő két ciklust alkalmaz, ezért 66MHz-es órajelnél mi M-ok szü k.

Elérési sebess kronos t Hz esetgyik félperiódu rést enge t cache-ele egyetlen óra Az Nx58 ző egysé

a m dszndelkezik, ebből adódik sodik ca áso

üggesztődik az utasí jtás amik ett esemé

ényeket.

A beépített másoített külső cache- ik. A kü

dszintű c

s uzintű cache, négydszintű cache-vez

asszociao éimálisan 15ns-os SRn A kségese

166 MHz

1660 1 15

sns00000= =

ása ugyanabb p-ben történik, ah datok tárolása, ezért az alkalmazható ad ria 6%-kal csökken. Minden cím iklust igény ahogyan a 8 B avak (quadword-ök) is. A felhasznált adatelérési minta 4-2-2-2. Címkék soro beolvasásáho nálható a csopor ciatív cache Mivel a pon port detektált, a be asás az adato atokban történ Az Nx586-os egy kicsivel hosszabb adatelérési mintákat használ mint egy 66MHz-es Pentium, amelyik ugyanazokkal a 15ns-os SRAM-okkal tipikusan 3-2-2-2 -es mintákkal dolgozik. A NexGen-féle csoport asszociatív módszer nagyobb találati arányt biztosít. A fentiekben vázolt implementáció előnye, hogy azonos cache-elérési minták esetén nagyobb frekvenciákat alkalmaz, mivel a cache-busz sebessége független lehet a rendszerbuszétól. Egy 100MHz-es Nx586-os 4-2-2-2 -es cache elérési mintával 10ns-os SRAM-okat igényelne. A 100MHz-es Pentium

A címkék tárol an a chi ol az aatmemó

ke beolvasása két c el, mint yte-os sz

zatokban történő z hasz t-asszo implementáció. tos cso olvkkal együtt soroz ik.

39

Page 38: Otodik Generacios Processzorok_pentium

Konkurens ötödik generációs architektúrák

rendszerbusza 66MHz-en "ketyeg", és 5-3-3-3 -as modellt használ. A Pentiumnak kisebb sebessége ellenére előnyére szól, hogy megtarthatjuk a kevésbé költséges 15ns-os SRAM-jainkat. A lapkára integrált cache-k WRITE-THROUGH protokollt használnak, míg a külső cache-ek esetében a tervezők a WRITE-BACK módszert alkalmazták a rendszerbusz forgalmának csökkentése érdekében. Az adat- és utasításcache-ek támogatják az önmódosító kódokat.

40

Page 39: Otodik Generacios Processzorok_pentium

Landmark 2.0

2. fejezet: Processzor erőforrások

an a Pentium sségének ponto tése céljából összevetettük néhány gyártó 32, vagy 64 bites X86-os archi-tektúrájú processzorát. Byte külső felhasználásáva Az e ön közöljü lső cache méretprocesszoroknál különböző lehet, a különbségekre - típusjelzés szerint - az e elése során k . ents SLC jelzésű processzorai esetében, egy vala fixen beforrasztott processzor állta a sarat a tesztek ny ek követke , hogy különböz lső cache-sel, és esetleg FPU nélkül történtek meg a mérések. Az SLC33-as pr alaplap 64 kByte, az SLC2-66 128 kByte külső ca z SLC2-5 aplap nem rendelkezett külső cache-foglalattal. Az ezektől eltérő ben 256 kByte 1 he-t h 486-os p rok minden gyártó esetében tarta pontos egységet. A táblázatokban a "+FPU" jelzés küls jelent. Ha az 486SX - 486SLC típusoknál nem jelöl r jelenlétét, ények ntos egység nélkül értékelendőek. Az Nx 586-os processzort fogadó alaplap NxVL rendszervezérlő chip-pel épült fel, és nem rendelkezett koprocesszor foglalattal. lt processzor minden esetben léteznek az aktuális típusjelzés alatt, csak a jobb összehasonlíthatóság érdekében

övettük el őket". Ezek fizikailag az előírtnál magasabb órajellel m ghajtott "tuningolt" de kifogástalanul működő példányok, pl.: az Am486DX4-120 valójában egy AmDX4-100, 120MHz-es órajel frekvenciával. Landmark 2.00

Az alábbiakb ok sebe s érzékelte

A tesztek 256 k -cache l készültek.ttől eltérő eseteket kül k. A be különböző TI

redmények kiérték itérünk

A Texas Intrummilyen alaplapba

úzópróbái során. Enn zménye ő méretű kü

oc óesszort tartalmazche-t tartalmazott. A 0-es al

esetek 5ns-os cacasználtunk fel.

A DX jelzésű rocesszolmazzák a lebegőő koprocesszort tük koprocesszo a mérési eredm lebegőpo

A *-gal jelö ok nem

"ke

41

Page 40: Otodik Generacios Processzorok_pentium

Processzor erőforrások

Processor Típus: CPU (MHz) FPU (MHz) PENTIUM 90 519,47 1743,79 PENTIUM 66 385,85 1299,15 PENTIUM 60 346,74 1169,92

NEXGEN Nx586 P90 527.15 -- Am 486DX4-120 * 401,59 1059,28

INTEL 486DX4-100 359,53 882,57 Am 486DX4-100 334,15 856,64

Am 486DX2-100 * 334,62 882,79 INTEL 486DX2-80 * 267,70 706,05

Am 486DX2-80 267,70 704,11 Cyrix 486DX2-V80 264,45 770,57 INTEL 486DX2-66 222,96 587,49

Am 486DX2-66 222,91 588,02 Cyrix 486DX2-V66 219,94 640,87

TI 486SLC2-66+FPU 152,76 162,07 INTEL 486SX2-50 167,30 14,10

TI 486SLC2-50+FPU 115,15 116,70 Am 486DX-40 133,84 353,06

TI 486SXLC-40 129,81 10,66 TI 486SLC-40 129,90 6,45

INTEL 486DX-33 110,37 291,15 TI 486SLC-33 107,98 7,42

INTEL 486SX-25 83,67 7,04 Am 386 DX-40 62,40 -- Am 386SX-40 52,19 --

42

Page 41: Otodik Generacios Processzorok_pentium

Landmark 2.00

PENTIUM 90

PENTIUM 66

PENTIUM 60

NE

IN

T

XGEN Nx586 P90

Am 486DX4-120 *

TEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Cyrix 486DX2-V80

INTEL 486DX2-66

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

I 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40 52.1962.4

83.67107.98110.37

129.9129.81133.84

115.15167.3

152.76219.94222.91222.96

264.45267.7267.7

334.62334.15

359.53401.59

527.15346.74

385.85519.47

0 100 200 500 60

La k 2 se g )

300 400 0

ndmar .0 CPU bessé ek (MHz

PENTIUM 90

PENTIUM 66

NE

IN

T

PENTIUM 60

XGEN Nx586 P90

Am 486DX4-120 *

TEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Cyrix 486DX2-V80

INTEL 486DX2-66

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

I 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40

43

Page 42: Otodik Generacios Processzorok_pentium

Processzor erőforrások

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Cyrix 486DX2-V80

INTEL 486DX2-66

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40

7.047.42

291.156.4510.66

353.06116.7

14.1162.07

640.87588.02587.49

770.57704.11706.05

882.79856.64882.57

1059.28

1169.921299.15

1743.79

0 200 400 600 800 1000 1200 1400 1600 1800 2000

Landmark 2.0 FPU sebességek (MHz)

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Cyrix 486DX2-V80

INTEL 486DX2-66

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40

44

Page 43: Otodik Generacios Processzorok_pentium

CHECKIT 3.0

CHECKIT 3.0

Processor Type: Dhrystones Whetstones PENTIUM 90 70577 25940900 PENTIUM 66 52749 21665700 PENTIUM 60 47474 19360100

NEXGEN Nx586 P90 59343 1015400 Am 486DX4-120 * 55852 20808800

INTEL 486DX4-100 43158 14893800 Am 486DX4-100 39211 12872800

Am 486DX2-100 * 47474 17337700 INTEL 486DX2-80 * 39211 13109500

Am 486DX2-80 39211 13109500 Cyrix 486DX2-V80 39211 13876500 INTEL 486DX2-66 33609 11419900

Am 486DX2-66 33609 11419900 Cyrix 486DX2-V66 33609 11561800

TI 486SLC2-66+FPU 29759 3705600 INTEL 486SX2-50 24348 461000

TI 486SLC2-50+FPU 21427 2605100 Am 486DX-40 19303 6880100

TI 486SXLC-40 16999 334800 TI 486SLC-40 9749 201600

INTEL 486DX-33 15785 5703700 TI 486SLC-33 11236 224000

INTEL 486SX-25 12054 226600 Am 386 DX-40 11631 312200 Am 386SX-40 7206 114600

45

Page 44: Otodik Generacios Processzorok_pentium

Processzor erőforrások

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Cyrix 486DX2-V80

INTEL 486DX2-66

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40 72061163112054

1123615785

974916999

1930321427

2434829759

336093360933609

392113921139211

4747439211

4315855852

5934347474

5274970577

0 10000 20000 30000 40000 50000 60000 70000 80000

Checkit 3.0: CPU összehanonlítás Dhrystone-okalapján

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Cyrix 486DX2-V80

INTEL 486DX2-66

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40

46

Page 45: Otodik Generacios Processzorok_pentium

CHECKIT 3.0

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Cyrix 486DX2-V80

INTEL 486DX2-66

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40 114600312200226600224000

5703700201600334800

68801002605100

4610003705600

115618001141990011419900

138765001310950013109500

1733770012872800

1489380020808800

101540019360100

2166570025940900

0 10000000 20000000 30000000

Checkit 3.0: FPU összehasonlítás Whetstones-okalapján

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Cyrix 486DX2-V80

INTEL 486DX2-66

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40

47

Page 46: Otodik Generacios Processzorok_pentium

Processzor erőforrások

MIPS 1.20: (MIPS)

Processzor Típus: General Inst.

Integer Inst.

Mem. -mem.

Reg. -reg.

Reg. -mem.

átlagos:

(MIPS)

PENTIUM 90 13,34 23,48 17,19 29,59 28,21 22,36 PENTIUM 66 9,84 17,39 13,10 21,91 21,44 16,73 PENTIUM 60 8,88 15,66 11,79 19,74 19,30 15,07

NEXGEN Nx586 P90 7,73 27,54 4,44 31,52 13,86 16,94 Am 486DX4-120 * 11,96 27,99 16,05 34,24 25,55 23,16

INTEL 486DX4-100 10,04 27,17 13,36 34,40 21,27 21,25 Am 486DX4-100 9,9 23,30 13,21 28.50 21,18 19,22

Am 486DX2-100 * 10,01 23,32 13,37 28,53 21,33 19,31 INTEL 486DX2-80 * 8,05 18,66 10,70 22,82 17,06 15,46

Am 486DX2-80 7,97 18,66 10,70 22,82 17,06 15,44 Cyrix 486DX2-V80 9,70 22,90 14,09 29,62 19,80 19,23 INTEL 486DX2-66 6,66 15,54 8,91 19,01 14,21 12,86

Am 486DX2-66 6,68 15,53 8,91 19,00 14,20 12,86 Cyrix 486DX2-V66 8,08 19,05 11,72 24,64 16,47 15,99

TI 486SLC2-66+FPU 7,29 13,59 10,73 15,31 14,81 12,34 INTEL 486SX2-50 5,00 11,66 6,68 14,26 10,68 9,66

TI 486SLC2-50+FPU 5,66 10,24 8,01 11,54 11,08 9,31 Am 486DX-40 4,03 9,32 5,35 11,41 8,55 7,73

TI 486SXLC-40 4,77 11,13 6,95 14,13 9,36 9,33 TI 486SLC-40 4,77 11,13 6,70 14,42 9,36 9,28

INTEL 486DX-33 3,31 7,69 4,41 9,41 7,05 6,37 TI 486SLC-33 3,96 9,27 5,69 12,01 7,77 7,74

INTEL 486SX-25 2,51 5,83 3,34 7,13 5,33 4,83 Am 386 DX-40 3,14 6,08 4,00 8,86 5,65 5,71 Am 386SX-40 2,60 5,82 3,61 8,42 4,76 5,04

48

Page 47: Otodik Generacios Processzorok_pentium

MIPS 1.20

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40

PENTIUM 90

PENTIUM 66

Cyri

INTEL 486DX2-66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

x 486DX2-V80

0 20 40 60 80 100 120

MIPS 1.2 (MIPS)

PENTIUM 90

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40 Regiszter-memóriamozgatásRegiszter-regisztermozgatásMemória-memóriamozgatásInteger utasításokGeneral utasítások

PENTIUM 66

Cyri

INTEL 486DX2-66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

x 486DX2-V80

49

Page 48: Otodik Generacios Processzorok_pentium

Processzor erőforrások

CPUTEST 1.1 (MIPS)

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

Am 486DX4-100

INTEL 486DX2-66

Am 486DX2-66

Cyrix 48

TI 486SLC2-66+FPU

INTEL 486SX2-50

INTEL 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Cyrix 486DX2-V80

6DX2-V66

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40

25.18219.419

17.48622.803

28.43220.31

17.88923.66

18.93618.938

20.66615.78115.867

17.19313.57

13.2269.934

10.8168.913

8.3058.943

5.8656.571

7.2395.652

0 5 10 15 20 25 30 35

CPUTEST 1.1: Átlagos mûveleti sebesség (MIPS)

PENTIUM 90

Am 486DX4-120 *

Am 486DX4-100

INTEL 486DX2-66

Am 486DX2-66

Cyrix 48

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

INTEL 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Cyrix 486DX2-V80

6DX2-V66

50

Page 49: Otodik Generacios Processzorok_pentium

CPUTEST 1.1

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

C

0

Cyrix 486DX2-V80

INTEL 486DX2-66

Am 486DX2-66

yrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-4

52.32438.766

34.90967.448

56.49647.0447.03647.073

37.65837.658

34.44531.36731.357

28.6527.937

23.53523.588

18.82819.97819.978

15.52610.87511.773

19.76417.164

0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75

CPUTEST1.1: Regiszter - regiszter (MIPS)

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

C

0

Cyrix 486DX2-V80

INTEL 486DX2-66

Am 486DX2-66

yrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-4

51

Page 50: Otodik Generacios Processzorok_pentium

Processzor erőforrások

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Cyrix 486DX2-V80

INTEL 486DX2-66

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40

39.32429.174

26.27225.787

35.48119.477

14.52629.563

23.6523.65

28.66919.69919.692

23.84619.1919.456

13.73315.139

11.60910.969

12.4855.515

9.3416.37

3.7

0 5 10 15 20 25 30 35 40 45

CPUTEST1.1: Regiszter - memória (MIPS)

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Cyrix 486DX2-V80

INTEL 486DX2-66

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40

52

Page 51: Otodik Generacios Processzorok_pentium

CPUTEST 1.1

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

486DX2-V80Cyrix

INTEL 486DX2-66

INTE

TI 486SLC2-50+FPU

TI

Am 386SX-40

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

L 486SX2-50

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

486SLC-33

INTEL 486SX-25

Am 386 DX-40

38.97935.627

32.08127.389

15.1959.126

6.45112.09

9.6719.671

17.5218.056

9.14914.573

8.2459.482

4.7669.027

2.7133.761

7.8676.339

3.9649.807

5.041

PENTIUM 90

Cyrix

INTEL 486DX2-66

INTE

TI 486SLC2-50+FPU

TI

Am 386SX-40

INTEL 486SX-25

Am 386 DX-40

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

486SLC-33

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

L 486SX2-50

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

486DX2-V80

0 5 10 15 20 25 30 35 40 45

CPUTEST1.1: Memória - memória (MIPS)

53

Page 52: Otodik Generacios Processzorok_pentium

Processzor erőforrások

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

486DX4-100Am

Am

Cyrix 486DX2-V66

INT

TI 486SLC-33

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Cyrix 486DX2-V80

INTEL 486DX2-66

486DX2-66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

EL 486DX-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40

10.8478.036

7.2378.818

6.313.935

3.0585.314

4.2514.251

5.5793.5413.54

4.643.61

3.3852.327

3.1632.2432.243

2.651.7771.911.813

1.617

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40

0 2 4 6 8 10 12

CPUTEST1.1: Stack mûveletek (MIPS)

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

486DX4-100Am

Am

Cyrix 486DX2-V66

INT

TI 486SLC-33

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

EL 486DX-33

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Cyrix 486DX2-V80

INTEL 486DX2-66

486DX2-66

54

Page 53: Otodik Generacios Processzorok_pentium

CPUTEST 1.1

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

A

Am 386 DX-40

Am 386SX-40

m 486DX4-100

m 486DX2-100 *A

INT

486DX2-80

TI

INTEL 486SX-25

EL 486DX2-80 *

Am

Cyrix 486DX2-V80

INTEL 486DX2-66

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

486SLC-33

0.383

0.4

0.355

0.602

0.496

0.273

0.259

0.553

0.519

0.535

0.569

0.503

0.226

0.503

0.642

0.495

0.634

0.479

0.48

0.48

0.143

0.473

0.529

0.579

0.27

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7

CPUTEST1.1: I/O mûveletek (MIPS)

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

A

INT

486DX2-80

TI

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

486SLC-33

Am

Cyrix 486DX2-V80

INTEL 486DX2-66

EL 486DX2-80 *

Am 486DX4-100

m 486DX2-100 *

55

Page 54: Otodik Generacios Processzorok_pentium

Processzor erőforrások

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

86DX4-120 *

6DX4-100

Am 4

INTEL 48

INTEL 486DX2-80 *

C

IN

TI 486SLC-40

I

INTEL 486SX-25

Am 486DX4-100

Am 486DX2-100 *

Am 486DX2-80

yrix 486DX2-V80

TEL 486DX2-66

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

NTEL 486DX-33

TI 486SLC-33

Am 386 DX-40

Am 386SX-40

6.87

5.09

4.583

8.362

8.874

9.023

7.388

7.394

5.915

5.915

8.049

4.927

4.925

6.695

4.954

3.697

3.734

2.957

4.086

4.086

2.439

3.279

1.849

3.053

1.864

0 1 2 3 4 5 6 7 8 9 10

CPUTEST 1.1: Matematikai mûveletek FPU nélkül (MIPS)

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

86DX4-120 *

6DX4-100

Am 386 DX-40

Am 386SX-40

Am 4

INTEL 48

INTEL 486DX2-80 *

C

IN

TI 486SLC-40

I

INTEL 486SX-25

NTEL 486DX-33

TI 486SLC-33

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

Am 486DX2-80

yrix 486DX2-V80

TEL 486DX2-66

Am 486DX2-66

Am 486DX4-100

Am 486DX2-100 *

56

Page 55: Otodik Generacios Processzorok_pentium

CPUTEST 1.1

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

486DX2-80Am

Am 486DX2-66

Cyrix 486DX2-V66

Am

Am

Cyrix 486DX2-V80

INTEL 486DX2-66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

386 DX-40

386SX-40

25.223

18.687

16.828

20.224

26.057

16.631

13.441

21.765

17.412

17.412

20.11

14.503

14.498

16.727

14.035

13.478

9.569

11.057

8.852

6.672

9.118

6.376

6.831

4.793

3.525

PEN

Am

Am 486DX2-66

Cyrix 486DX2-V66

Am

Am

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

386 DX-40

386SX-40

Cyrix 486DX2-V80

INTEL 486DX2-66

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

486DX2-80

TIUM 90

0 5 10 15 20 25 30

CPUTEST 1.1: Logikai mûveletek (MIPS)

57

Page 56: Otodik Generacios Processzorok_pentium

Processzor erőforrások

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Cyrix 486DX2-V80

INTEL 486DX2-66

Am 486DX2-66

486DX2-V66Cyrix

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI

INTEL 486SX-25

86 DX-40

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

486SLC-33

Am 3

Am 386SX-40

52.595

38.967

35.09

39.115

56.128

34.951

26.242

46.921

37.456

37.456

55.208

31.2

31.188

45.92

29.434

24.68

20.433

19.744

22.785

19.085

16.282

18.148

12.344

13.04

11.41

0 5 10 15 20 25 30 35 40 45 50 55 60 65

CPUTEST 1.1: Adatforgatás (Bit/s)

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Cyrix

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI

INTEL 486SX-25

86 DX-40Am 3

Am 386SX-40

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

486SLC-33

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Cyrix 486DX2-V80

INTEL 486DX2-66

Am 486DX2-66

486DX2-V66

58

Page 57: Otodik Generacios Processzorok_pentium

CPUTEST 1.1

PENTIUM 90

PENTIUM 66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Cyrix 486DX2-V80

INTEL 486DX2-66

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40

0.041

0.022

0.018

7.486

50.846

42.338

42.332

42.365

33.892

33.892

15.844

28.23

28.222

13.179

14.081

21.101

10.614

16.945

7.471

7.47

13.973

1.185

10.596

5.929

3.85

0 10 20 30 40 50 60

CPUTEST 1.1: JMP/CALL utasítások (MIPS)

PENTIUM 90

PENTIUM 66

Am 486DX2-66

Cyrix 486DX2-V66

TI 486SLC2-66+FPU

INTEL 486SX2-50

TI 486SLC2-50+FPU

Am 486DX-40

TI 486SXLC-40

TI 486SLC-40

INTEL 486DX-33

TI 486SLC-33

INTEL 486SX-25

Am 386 DX-40

Am 386SX-40

ennyi

Cyrix 486DX2-V80

INTEL 486DX2-66

PENTIUM 60

NEXGEN Nx586 P90

Am 486DX4-120 *

INTEL 486DX4-100

Am 486DX4-100

Am 486DX2-100 *

INTEL 486DX2-80 *

Am 486DX2-80

Ha azt szeretnénk megtudni, hogy az egyes 486-os architektúrák m ben hasonlítanak, vagy térnek el egymástól, elég a mérési adatok között vizsgálódnunk. Az ugrások (JMP/CALL), matematikai műveletek -koprocesszorral és anélkül - sebességi különbségéből kitűnik, hogy a

59

Page 58: Otodik Generacios Processzorok_pentium

Processzor erőforrások

Cyrix processzorok felépítése lényegesen különbözik az INTEL és az AMD által használt struktúráktól. Egy gyorsabb koprocesszort, és kicsivel

yorsabb, az INTEL-től különböző CPU-t takar a tokozás. Az INTEL és z AMD DX2-66 -os processzora esetében az is kitűnik, hogy az INTEL

r belülről teljesen egegyezik! Mindegyik tesztprogram a teljesen azonos eredményeket

ez a helyzet. Ebben a ategóriában a Cyrix viszi a pálmát. A tesztprogramok mérő-algoritmus

párosméremért méréazonparamesetében az eredmény szintén nagymértékben függ a cache méretétől. A

IPS és a CPUTEST esetében azonban a helyzet sokkal jobb.

PentimérübelsőmaguCALismeutasíJMP-CALL utasítások vérehajtásáról készült táblázat/

művePentimindfejeztechnszereoknaprocerends

ganem alaptalanul perlekedett: a két processzommutatott. A DX2-80 -asok esetében szintén khosszait is érdemes megfigyelni. Az áruló a Texas SCL40 - SXLC40

a, ugyanis különbség a két típus között csak a belső-cache tében van. Az SLC40-ben 1 kByte (!), az SXLC40-ben 8 kByte. A adatokból kiderült, Landmark CPU sebesség mérése nem, FPU

se pedig nagymértékben függ a belsőcache mérettől, egyébként os teljesítményű processzorok esetén. (Sokszor sajnos nem csak azt a

étert mérjük amelyiket szeretnénk!) A Dhrystone-ok Whetstone-ok

M

Az ugrásokat összehasonlítva sokakat meglep a tény, hogy a umok, és az Nx586 esetében is meglehetősen alacsony értékeket nk. Csodák ebben a műfajban nincsenek. A processzorok a külső, és cache-ek feltöltésével, és az utasítás előrejelzéssel foglalják el kat, pipeline-ok pedig az ugrás után nem lehetnek tele utasítással. (A L utasítás esetében a helyzet még rosszabb: az előbbiekben rtetett procedúrák kétszer - egyszer a CALL, és egyszer a RET tás eredményeként - hajtódnak végre.) /lásd: CPUTEST 1.1

Érdekes dolgokra bukkanhatunk, ha az Nx586 regiszter

leteinek sebességét vetjük össze az azonos súlycsoportba tartozó uméval: a kizárólag regiszterek között végrehajtott műveletekben ig az Nx586 vezetett. Ennek magyarázata - az Nx586-ról szóló etben már tárgyalt - 32 regiszter, és a regiszter átnevezési ológia. Sajnos az Nx586 a memória műveletek méréseinél nem pelt túl fényesen, ezt az alaplapra integrált 12ns-os CACHE-RAM -k tulajdonítjuk. (A Nexgen 10ns-os cache-RAM -okat ír elő a P90-es sszorához.) A másik összetevő, hogy PCI-buszra épülő zervezérlő chippel (pl.: NxPCI rendszer vezérlő) ugyanazon

60

Page 59: Otodik Generacios Processzorok_pentium

CPUTEST 1.1

proce(90M

Számunkra meglepetést okozott a Cyrix, és a DX4-es

zó utasítások (FP) a kétszeres ontosságú alakok használatát feltételezik.

UTASÍTÁS NEXGEN INTEL IBM

sszorral egy nyúlfarknyival nagyobb sebesség érhető el. Hz-nél kb.: 2,5-3%)

processzorok a Pentiumokhoz viszonyított meglehetősen magas INTEGER műveleti sebessége. Most nézzük milyen különbségek vannak az utasítások végrehajtásának ütemezésében néhány konkurens ötödik generációs processzorban. Kiemeltünk néhány matematikai utasítást a teljesség igénye nélkül. A táblázat az utasítás végrehajtásának idejét a végrehajtáshoz szükséges órajel ciklusok számával adja meg. A matematikai processzorra vonatkop

Nx586 Pentium PowerPC 601

FP ADD késés: 2 3 4 eredmény: 2 1 1

FP MUL késés: 2 3 4 eredmény: 2 2 2

FP DIV késés: 40 39 31 eredmény: 40 39 29

MUL (integer) késés: 8 10 9 DIV (integer) késés: 39 41 36

Érdekességként nézzük meg a Pentium processzor és konkurensei r alatt mért INTEGER, és Floating Point ISC processzorként hardware-sen (pl.: Nx586),

ások (pl.: PowerPC, R4400, Alpha) software-b

UNIX operációs rendszeteljesítményeit. Egyesek Rm ől emulálva valósítják meg az x86-os architektúrát.

61

Page 60: Otodik Generacios Processzorok_pentium

Processzor erőforrások

Processzor típus

Belső órajel frekvencia

SPECint92

SPECfp92

Belső-cache méret

Pentium 60 60MHz 58.3 52.2 16 kByte Pentium 66 66MHz 64.5 56.9 16 kByte Pentium 75 75MHz 83.8 60.8 16 kByte Pentium 90 90MHz 100.9 73.5 16 kByte Pentium 100 100MHz 112.7 81.8 16 kByte

SPARC+ 50MHz 65.2 83 36 kByte PowerPC601 66MHz 75 91 32 kByte PowerPC603 66MHz 55 65 16 kByte PowerPC604 100MHz 140 145 32 kByte

HP7100 99MHz 80 150 -- Alpha21064 150MHz 84.4 127.7 16 kByte

MIPS R4400SC 150MHz 61.7 63.4 16 kByte Cyrix M1 100MHz 130 nincs adat 16 kByte

Gyártók: Pentium -INTEL PowerPC -IBM K5 -AMD M1 -CYRIX HP7100 -HEWLET-PACKARD R4400 -MIPS Alpha21064 -DEC Nx586 -NEXGEN

62

Page 61: Otodik Generacios Processzorok_pentium

UNIX SPECint SPECfp tesztek

Pentium 60

Pentium 66

Pentium 75

Pentium 90

Pentium 100

SPARC+

erPC601

PowerPC603

rPC604

HP7100

ha21064

4400SC

Cyrix M1

Pow

Powe

Alp

MIPS R

0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150

Pentium 60

Pentium 66

Pentium 75

ntium 90

Pentium 100

SPARC+

erPC601

PowerPC603

rPC604

HP7100

ha21064

4400SC

Cyrix M1

UNIX SPE

Pe

Pow

Powe

Alp

MIPS R

Cint92

MIPS R4400SC

Cyrix M1

Pentium 60

Pentium 66

Pentium 75

Pentium 90

Powe

HP7100

Alpha21064

Pentium 100

SPARC+

rPC601

PowerPC603

PowerPC604

0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150

MIPS R4400SC

Cyrix M1

UNIX SPECfp92

Pentium 90

Powe

HP7100

Alpha21064

PowerPC603

PowerPC604

Pentium 100

SPARC+

rPC601

Pentium 75

Pentium 60

Pentium 66

63

Page 62: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3. Fejezet: Általános CPU programozási információk

3.1. A memória felépítése

emór

echanizmus, mely több, független kevesebb RAM-ot és

ő nagy mtart

gző hardware a logikai címet a emszegmentált címtartomány címzéséhez szükséges lineáris címmé, a

programok és rendszerek egbízhatóságának növelése érdekében. Például megelőzhető az, hogy

program ensbe

A Pentium processzor buszára kapcsolt memória neve fizikai memória, mely 8 bites Byte-okból álló sorozatnak tekinthető. Minden Byte-nak megfelel egy és csakis egy, fizikai címnek nevezett cím, amelynek érteke 0-tól maximum 232-1-ig (4 GByte) terjedhet. A memória kezelését a megbízható és hatékony működés érdekében a hardware végzi. A memóriakezelés használata esetében a

rogramok nem érik el közvetlenül a fizikai memóriát, hanem egy pm iamodellt címeznek, melynek virtuális memória a neve. A memória kezelése szegmentálásból és lapozásból áll. A

egmentálás egy olyan mszcímtartományt biztosít. A lapozás mechanizmusagy bizonyos mennyiségű lemeztároló kapacitást igényle

cí ományú modelljét támogatja. Használható mindkét vagy csak az egyik módszer a kettő közül. Egy program által használt címek logikai címek. A szegmentálást vénlapozást végző hardware pedíg a lineáris címeket fizikai címekké alakítja át. A memória tekinthető egyetlen "lapos" címtartományként is, mint amilyen a fizikai memória; tekinthető azonban egy vagy több, egymástól független memóriarésznek is, melyek neve szegmens. Egy program legtöbb 16383 különböző fajta és méretű szegmenst használhat. A szegmensek felhasználhatók a megy program verme, túllépve a neki szánt területet, felülírja a

ódját képező utasításokat; ez a kód és a verem két külön szegmkvaló helyezésével érhető el. Így mindegyik szegmens meghatároz egy modult.

64

Page 63: Otodik Generacios Processzorok_pentium

A memória felépítése

Mindkét, a lapos és a szegmentált modell is biztosítja a memória

édelmét. E két modell közt elhelyezkedő modellek szintén

címet képez.

k. Az lkalmazásfejlesztők számára a lapozás nem érzékelhető, részletek ezzel

a lapos modell. Bár nincs olyan zemmódbit vagy vezérlőregiszter amelyik a szegmentáló mechanizmust

zegmensnek ugyanarra a neáris címre való leképezésével. Ennek következtében minden emór

hardware védelmet nyújt a software hibák ellen. Ha egy logikai cím egy

vkiválaszthatók. Egy memóriamodell kiválasztásának szempontjait és azt, ahogyan a rendszerprogramozók egy modellt megvalósítanak, az alkalmazási terület határozza meg. Függetlenül attól, hogy több szegmens van használatban vagy sem, a logikai címek lineáris címekké való átalakítása a címeket egy szegmensen belüli ofszetnek értelmezve történik. Minden szegmensnek van egy szegmensdeszkriptora, mely tartalmazza a szegmens báziscímét és mérethatárát. Ha az ofszet nem haladja meg ezt a határt, és nincs más feltétel, mely megakadályozná a szegmenshez való hozzáférést, az ofszet és a báziscím összeadódik és a lineáris Ha a CR0 regiszter 31. bitje törölve van (a CR0 regisztert lásd később), a szegmentálásból adódó lineáris cím fizikai címként lesz felhasználva. Ez a regiszterbit határozza meg hogy használatban van-e lapozás vagy sem. Ha a bit 1-re van állítva, a lineáris cím fizikai címmé való átalakítását a lapozó hardware végzi. Ha több szegmens van használatban, ezek részei az alkalmazásfejlesztő által használt programozási környezetneakapcsolatban később. 3.1.1. Nemszegmentált vagy "lapos" modell A legegyszerűbb memóriamodellükikapcsolná, ugyanez a hatás érhető el minden slim iaművelet ugyanarra a memóriatartományra fog vonatkozni. A lapos modellben a szegmensek lefedhetik a fizikai címek egész skáláját vagy csupán azokat a részeket, melyek a fizikai memóriába vannak leképezve. A kisebb címtartomány előnye, hogy egy minimális

65

Page 64: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

nemlétező címet (melyhez nem tartozik memória) jelöl, akkor egy kivétel keletkezik (kivételeket lásd később).

.1.2. Szegmentált modell

mutatásra kerülő címátalakító mechanizmus segítségével épezi le. A programozóknak ezt a leképezést nem kell figyelembe

fszetek és minden egyes szegmenshez való hozzáférés külön llenőrizhető.

- a szegmensen belüli 32 bites cím.

3 A memória felépítésének szegmentált modellje a logikai címek tartományát 16383, egyenként maximum 4 GByte méretű szegmensre osztja, melyek nagysága összesen 246 Byte (64 TByte). Ezt a 64 TByte logikai címtartományt a fizikai címtartományra a processzor a későbbiekben bekvenniük. A szegmentált modell előnye az, hogy a címtartományokon belüli oe Egy, a szegmentált címtartományt címző pointer két részből áll (lásd a 3.1 ábrát). 1. Szegmensszelektor - a szegmenst azonosító 16 bites mező. 2. Ofszet

3.1. ábra: Szegmentált címzés

66

Page 65: Otodik Generacios Processzorok_pentium

Regiszterek

3.2. Regiszterek A processzornak tizenhat, a programozók által használható regisztere van. Amint azt a 3.2. ábra is mutatja. Ezek a következőképpen soportosíthatók:

nyolc darab 32 bites regisztert a programozó szabadon használhatja.

é teszik annak megváltoztatását.

.2.1. Általános regiszterek

is (kivéve az ESP gisztert, mely nem használható indexoperandusként). A felsorolt

X, CX, DX, BP, SP, SI, DI ltalános regisztereinek neveiből származnak. Ahogy a 3.2. ábra is utatja

lsó Byte-ok).

c 1. Általános regiszterek. Ezt a

2. Szegmensregiszterek. Ezek a regiszterek a különböző memóriahozzáférési módokhoz hozzárendelt szegmensszelektorokat tartalmazzák. A kód- és veremterülethez való hozzáférés például külön szegmensregiszterek segítségével történik. Ez a hat regiszter a pillanatnyilag hozzáférhető memóriaszegmenseket határozza meg. 3. Állapot- és vezérlőregiszterek. Ezek a regiszterek a processzor

állapotáról adnak tájékoztatást és lehetőv

3 Az általános regiszterek az EAX, EBX, ECX, EDX, EBP, ESP, ESI, EDI 32 bites regiszterek. Ezek a regiszterek a programozó által szabadon választott értékeket tartalmazhatnak (logikai, aritmetikai műveletek operandusait, eredményét stb). Ezenkívül tartalmazhatják még a címszámításokhoz szükséges operandusokatreregiszterek nevei a 8086 processzor AX, Bám , ezekkel a nevekkel lehet hivatkozni a 32 bites regiszterek alsó 16 bitjére. Az AX, BX, CX és DX 16 bites regiszterek mindkét Byte-jának saját neve is van. A Byte-regiszterek elnevezése a következő: AH, BH, CH és DH (felső Byte-ok) illetve AL, BL, CL és DL (a

67

Page 66: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

Általános regiszterek

AH AL AX

1516

Szegmens regiszterek

Státusz és vezérlõ regiszterek

DH DL

CS

EFLAGS

DXEAXEDX

16-BIT 32-BIT

ESP

07831

giszter rendelkezésre áll, gyes utasítások azonban operandusaik tárolására csak bizonyos

operandusként az CX (ciklusszámláló), ESI (forrásindex) és EDI (célindex) regisztereket

BH BLCH CL

BPSIDISP

BXCX

EBXECX

EBPESIEDI

SSDSESFSGS

EIP

3.2. ábra: Alkalmazások számára elérhető regiszterkészlet A címszámítások és legtöbb aritmetikai illetve logikai művelet eredményei számára minden általános célú reeregisztereket használnak fel. Például a füzérutasítások Ehasználják. Ezen műveletekhez specifikus regisztereket hozzárendelve az utasításkészlet tömörebben kódolható. A specifikus regisztereket használó

68

Page 67: Otodik Generacios Processzorok_pentium

Regiszterek

utasítások a következők: duplapontosságú szorzás és osztás-, I/O-, füzér-, transzlatáló, ciklus-, különböző eltoló- és forgató-, valamint veremműveletek. 3.2.2. Szegmensregiszterek A szegmentáció a rendszertervezők számára rugalmasságot nyújt a különböző memóriafelépítési modellek közti választásban. A szegmensregiszterek a 16 bites szegmensszelektorokat tartalmazzák, melyek egy, a memóriában elhelyezkedő táblázatot indexelnek. Ez a

blázat tartalmazza a szegmensek báziscímét, valamint a ntált modell

inden egyes szegmens ugyanarra a fizikai memóriatartományra való

áll ndelkezésre, ezeknek szelektorait a CS, DS, SS, ES, FS és GS egmensregiszterek tartalmazzák. Minden regiszterhez egy külön emóriaelérési mód tartozik (kód, adat, vagy verem); mindegyik

ak közül (lásd a 3.3 brát). Más szegmensek is használhatók, ezek szegmensszelektorát be

telek és a vezérlést egmensek közt átadó utasítások (például CALL, RET vagy JMP)

p autómatikusan égzi).

támemóriahozzáférést illető információkat. Nem szegmemleképezésével valósítható meg. A memóriában egy adott pillanatban hat szegmensreszmregiszter egy szegmenst jelöl, a program által használtákell tölteni a megfelelő szegmensregiszterbe. Kódszegmens a neve annak a szegmensnek, mely a végrehajtandó utasításokat tartalmazza. Ennek szegmensszelektorát a CS regiszter tartalmazza. A processzor a kódszegmensben levő utasításokat olvassa be, a szegmensen belüli ofszetként az EIP regiszter tartalmát felhasználva. A CS regiszter feltöltése a megszakítások, kivészvégrehajtása eredményeképpen történik (a számítógév Egy eljárás meghívása előtt szükséges egy memóriarész kijelölése a verem számára. A verem tartalmazza a visszatérési címet, a hívórutin által átadott paramétereket, valamint az eljárás által igényelt ideiglenes változókat. A veremszegmens azonosítására minden veremművelet az SS

69

Page 68: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

regisztert használja, mely a CS regiszterrel ellentétben külső módon feltölthető; így az alkalmazás saját maga építhet fel vermeket. A DS, ES, FS és GS regiszterek lehetővé teszik, hogy egyszerre

égy adatszegmens álljon rendelkezésre. A négy adatszegmens biztosítja onságos

ozzáférést. Például külön-külön adatszegmens hozható létre az aktuális odul

. Ha egy programhiba következtében a program futása sszezavarodik, a szegmentáló mechanizmus a hiba által okozott kárt a

nsek elérése érdekében a DS, ES, FS és GS regiszterek az

en is feltölthetők. Az egyetlen teendő a

megtörténne.

s szegmens báziscíme tárolva van. Egy

s címzése egy regiszterben vagy maga az utasítás testében egadott ofszet segítségével történik. Azt, hogy melyik

na különböző típusú adatstruktúrákhoz való hatékony és bizthm adatstruktúrái, a magasabb szintű modulból exportált adatok, egy dinamikusan létrehozott adatstruktúra és a más programokkal megosztott adatok számáraöprogram által foglalt szegmensekre korlátozza.

Az adatok szerkezetétől függően (vagyis hogyan vannak az adatok szegmensekre osztva) a program több szegmenshez is igényelhet hozzáférést. A további

Kód szegmens

Stack szegmens

CS

SSszegme

1. adatszegmens

3. adatszegmens

S

S

alkalmazói program futása közb

megfelelő szegmensregiszter feltöltése, még mielőtt az illető szegmens adataihoz való hozzáférés

Minden egye

szegmensen belüli adat megcímzéséhez a 32 bites ofszetet

hozzá kell adni a szegmens báziscíméhez. A szegmens kiválasztása (a szegmensszelektornak a szegmensregiszterbe való betöltése által) után az utasításnak csak az ofszetet kell megadnia. Az adatszegmensen belüli operandum

2. adatszegmensE

FS

4. adatszegmensGS

D

3.3. ábra: Szegmentált memória

70

Page 69: Otodik Generacios Processzorok_pentium

Regiszterek

szegmensregiszter használandó akkor, amikor csak egy ofszet van egadv

utató (EIP) regiszter az aktuális kódszegmensben vő következő végrehajtandó utasítás ofszetjét tartalmazza. Az

utasítások (ugrások, hívások, stb.), egszakítások és kivételek végzik.

.2.4. A verem felépítése és használata

giszter támogatja:

e csak egy verem állhat rendelkezésre. Az, amelynek

asználja.

V

tartalmazza. A veremmutatót a PUSH és POP utasítások, szubrutinhívások és visszatérések, kivételek, valamint

.4. ábra) a processzor csökkenti az ESP regisztert, majd beírja az

m a, egyszerű szabályok határozzák meg. 3.2.3. Utasításmutató Az utasításmleutasításmutató nem áll közvetlenül a programozó rendelkezésére, kezelését a vezérlésátadó m Az EIP regiszter egyik utasítás kezdőcíméről a következőére ugrik. Az utasítások előbetöltése miatt az EIP az utasításokat a processzorba betöltő busz aktivitásáról csak egy hozzávetőleges tájékoztatást ad. Az utasítások előbetöltésének részletes leírása egy későbbi fejezetben található. 3 A veremműveleteket három re 1. Veremszegmens (SS) regiszter. A verem a memóriában helyezkedik

el. Egy rendszerben a vermek számát a használható szegmensek maximális száma korlátozza. A verem nagysága maximálisan 4 GByte lehet, vagyis egyenlő egy szegmens maximális méretével. Egyszerrszelektorát az SS regiszter tartalmazza. Ez az aktuális verem. A processzor minden veremművelethez automatikusan az SS regisztert h

2. eremmutató (ESP) regiszter. Az ESP regiszter a verem tetejét

(TOS - Top-Of-Stack) az aktuális veremszegmensen belüli aktuális ofszetet

megszakítások használják. Egy adat veremre való ráhelyezésekor (3

71

Page 70: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

adatot az új TOS-ba. Amikor egy adatot kivesz a veremből, a pr

a memóriában a verem lefele nő, a kisebb címek irányába.

. Veremkeret-bázismutató (EBP) regiszter. Az EBP regiszter je

tinra, a verem a visszatérési címet és az illető szubrutinnak átadott adatstruktúrákat tartalmazza. A szubrutin megnöveli a

szü eképpen az ideiglenes változók veremből való ki- és behelyezése által a veremmutató nő illetve csökken. Ha a

tt valami is a verembe került volna, akkor a bázismutató felhasználható a rögzített ofszetű adatstruktúrák elérésére. Ha ez nem így történt,

zet az időszakos változók által elfoglalt hely függvényében változni fog.

3.2.5. Flagregiszter Az feltételkódokat (azaz átvitel, előjel, túlcsordulás) és állapotbiteket, (gyüjtőnevükön: flageket), az EFLAGS nevű 32 bites regiszter tartalmazza. A flagek elrendezését a regiszteren belül a 3.5. ábra mutatja be. Az flagek a Pentium processzor állapotáról adnak tájékoztatást, ezenkívül egyes műveletek végrehajtását irányítják. Az állapot- és vezérlő flagbiteken kívül a flagregiszter még rendszerflageket is tartalmaz.

ocesszor kimásolja azt a TOS-ból, majd növeli az ESP regisztert. Másképpen fogalmazva

3

llemző felhasználási módja a vermen keresztül átadott paraméterekhez való hozzáférés. Amikor a vezérlés átadódik egy szubru

vermet, amennyiben ideiglenes lokális változói számára helyre van ksége. Ennek eredmény

veremmutató értéke azelőtt volt a bázismutatóba másolva, mielő

akkor egy adatstruktúrát azonosító ofs

Az EBP regiszter által történő memóriacímzés az aktuális veremszegmenst (SS regiszter) használja. Mivel a veremszegmenst nem kell külön megadni, az utasításkód tömörebb. Az EBP regiszter más szegmensek címzésére is használható, de ekkor a szegmenst külön meg kell adni (MOV AX,GS:[EBP]). Az olyan utasítások, mint az ENTER és LEAVE, a változókhoz való könnyebb hozzáférés érdekében az EBP regisztert automatikusan beállítják.

72

Page 71: Otodik Generacios Processzorok_pentium

Regiszterek

SS

ESP Az utoljára behelyezett adat

SS

ESP Új behelyezett adatÚj

Régi

3.4. ábra: A verem működése 3.2.5.1. Állapotbitek Az EFLAGS regiszter állapotbitjei az olyan aritmetikai utasítások eredményének jellegéről adnak számot, mint az ADD, SUB, MUL vagy DIV. A MOV utasítás nincs hatással ezekre az állapotbitekre. A feltételes ugrások és szubrutinhívások lehetővé teszik, hogy a program érzékelni tudja az flagek állapotát és ezektől függően cselekedjen. Amikor egy ciklusszámláló értéke a csökkentések során elérte a nullát, a ZF bit állapota 1 lesz, e változás miatt a ciklus elejére való ugrást megvalósító feltételes ugróutasítás nem hajtódik végre, és a ciklus megszakad. Az állapotbiteket a 3.6. ábra mutatja be külön.

73

Page 72: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

EFLAGS3130292827

000

2625242322212019

00000IDVIPVIF

X ID FLAGX LÁTSZÓLAGOS MEGSZAKÍTÁS-FELFÜGGESZTÉSX LÁTSZÓLAGOS MEGSZAK

1817

14

7

00

ACVM

NT

SF

ÍTÁS FLAGX ILLESZKEDÉS ELLENÖRZŐX 8086 VIRTUÁLIS MÓD

ATÁST JELZŐ FLAG

X BEÁGYAZOTT TASZK

S ELŐJEL FLAG

C - VEZÉRLŐ FLAGX - RENDSZER FLAG

1,0 - NEM HASZN

1615

RF0

X FOLYT

13121110

98

IOPL

OFDFIFTF

X I/O PRIVILÉGIUM SZINT

S TÚLCSORDULÁS FLAGC IRÁNY FLAGX MEGSZAKÍTÁS ENGEDÉLYEZŐ FLAGX CSAPDA FLAG

56

43210

ZF

AF0

0

PF1CF

S ZERO FLAG

S FÉL-ÁTVITEL FLAG

S PARITÁS FLAG

S ÁTVITEL FLAG

S - STÁTUSZ FLAG

ÁLT, INTEL ÁLLTAL FENNTARTVA

ter

3.5. ábra: Az EFLAGS regisz

74

Page 73: Otodik Generacios Processzorok_pentium

Regiszterek

Név Szándék Kialakulási feltétel OF Túlcsordulás Az eredmény meghaladta a pozitív vagy

negatív határt SF Előjel Az eredmény negatív ZF Zero Az eredmény nulla AF Félátvitel Átvitel történt a 3. biten (BCD-nél

használatos) PF Paritás Az eredmény alsó Byte-jában páros számú 1

bitek vannak CF Átvitel A legfelső bitről átvitel történt

3.6. ábra: Állapotbitek

Az EFLAGS regiszter DF vezérlőbitje a füzérutasítások irányát vezérli. (10. bit) A DF bit beállítása a füzérutasítások csökkenő memóriatartomány felé történő végrehajtását eredményezi, vagyis a füzérek feldolgozása a magasabb címek felől az alacsonyabb címek irányába tart. A DF bit törlése fordított irányú feldolgozást eredményez. 3.2.6 Rendszer-regiszterek A rendszerprogramozóknak szánt regisztereket a következő kategóriákba sorolhatjuk: - EFLAGS regiszter - memóriaszervező regiszterek (memory management ) - vezérlő regiszterek (control) - nyomkövető regiszterek (debug) A rendszer-regiszterek vezérlik a felhasználói programok végrehajtó környezetét. Az operációs rendszerek többsége a felhasználói programok számára korlátozza ezen lehetőségeket. (Mindamellett

75

Page 74: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

szerkeszthetünk olyan operációs rendszereket is, amelyprogram a legprivilegizáltabb szinten fut, ez esetben a felhasználói

rogramoknak me

ekben minden

gengedett e lehetőségekbe való beavatkozás.)

A 0-val illetve 1-el jelölt bitpozíciók az Intel által fenntartottak. asználatuk nem ajánlott. Mindíg a megelőző kiolvasáskor kapott

- (Id

ultita

egszakítás bit (19. bit)

p 3.2.6.1. Rendszer-flagek Az EFLAGS regiszter rendszer-flagjei vezérlik az I/O műveleteket, a maszkolható megszakításokat, a nyomkövetést, a taszkcserét, illetve a virtuális 8086-os üzemmódot. Egy felhasználói programnak ezeket a flageket nem kell figyelembe vennie, és tilos számára az állapotuk megváltoztatását megkísérelni. Egyes operációs rendszerekben egy rendszerflag állapotának megváltoztatását célzó kísérlet kivételt idéz elő. A fent említett flageket a 3.5. ábra szemlélteti. Hértékekre állítandók. ID entification Flag) azonosító flag, (21. bit) Ha egy program képes arra, hogy az ID flaget magasra, illetve alacsonyra állítsa, azt jelenti, hogy a processzor támogatja a CPUID utasítást. Lásd cpu azonosítása. VIP - (Virtual Interrupt Pending Flag) virtuális megszakításfelfüggesztés bit (20. bit)

Ez a flag a VIF flaggel együtt lehetővé teszi minden egyes, m szkos környezetben futó felhasználói program számára, hogy a rendszer IF flagjének egy virtuális verzióját használhassa. Részletes útmutató ezen flagek virtuális 8086-os, illetve védett üzemmódú használatáról a függelékben található.

IF - (Virtual Interrupt Flag) virtuális mV A VIF flag egy virtuális képe az IF (Interrupt Flag) megszakítás flagnek, a VIP-el együtt használatos.

76

Page 75: Otodik Generacios Processzorok_pentium

Regiszterek

AC - (Alignment Check Mode) illeszkedés-ellenőrzés (18. bit) Az AC flag és a CR0 regiszterbeli AM bit magasra állításával

ET) lehetővé válik a memóriahivatkozások illeszkedésének ellenőrzése. atkozás, mint

éldául egy páratlan címen elhelyezkedő 16 bites szóra, vagy egy néggyel o

még abban az esetben sem, ha ezt egy felhasználói ódbeli memóriahivatkozás okozná.

lyes leszkedését, mint például az i860-as. Az illeszkedési kivételt az rtelme

ás, mint a 8086-os processzor rogramozási környezetének emulálása.

F - (Resume Flag) folytatás jelző bit (16. bit)

Az RF bit ideiglenesen letiltja a nyomkövetési hibákat (debug

ults), annak érdekében, hogy egy debug fault után újra folytatni lehessen egy utasítást, anélkül, hogy közvetlenül egy újabb nyomkövetési hibát okozna. A hibakereső (debugger) az IRETD utasítással állítja magasra ezt a bitet, a megszakított programba való visszatérés

(SValahányszor egy illeszkedési hibás operandusra kerül hivpnem sztható címen levő doublewordra, egy illeszkedési kivétel jelentkezik. Az illeszkedési kivételek csak felhasználói módban (user-mode) (3. privilégium szinten) generálódnak. Azok a memóriahivatkozások, amelyek alapértelmezése a 0. privilégium szint, mint például a szegmensdeszkriptorok betöltése, nem okozzák a fenntemlített kivételtm Az illeszkedési kivételt fel lehet használni az adatok illeszkedésének ellenőrzésére. Ez akkor lehet hasznos, ha egy olyan processzorral cserélünk adatokat, amely megköveteli minden adat heilé zőprogramok (interpreters) arra is felhasználhatják, hogy bizonyos mutatókat (pointereket) speciálisan megjelöljenek hibás illesztéssel. Ezáltal elkerülhetők a mutatók egyenkénti ellenőrzésének költségei, és így az alkalmazás pillanatában csak a speciális mutatókat kezelik. VM - (Virtual-8086 Mode) virtuális 8086-os üzemmódjelző bit (17. bit) Magasra állítva a VM flaget a processzort virtuális 8086-os üzemmódba hozzuk, amely nem mp

R

fa

77

Page 76: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

pillanatában. A POPF, POPFD, vagy IRET utasítások nem befolyásolják az RF flaget. NT - (Nested Task) egymásba ágyazott taszkokat jelző bit (14. bit) A processzor beállítja, illetve teszteli az NT flaget, hogy vezérelje a megszakított és meghívott taszkok egymásba láncolását. Az NT flag befolyásolja az IRET utasítás végrehajtását, ugyanakkor a POPF, POPFD, és IRET utasítások befolyásolják az NT flaget. Ezen flag értékének helytelen megváltoztatása váratlan kivételeket generálhat a felhasználói programokban. IOPL - (I/O Privilege Level) I/O privilegizált szintet jelző bitek (12. és 13. bit) Az I/O privilegizálási szintet a védelmi mechanizmus az I/O címtartományhoz való hozzáférés ellenőrzésére használja. Az aktuálisan végrehajtás alatt álló szegmens privilégiumszintje (CPL) és az IOPL értéke határozzák meg azt, hogy a POPF, POPFD, és IRET utasítások módosíthatják-e ezen mező értékét. További információk a második kötetben.

- (Interrupt-Enable Flag) megszakítás-engedélyezést jelző bit (9. bit) Ha IF magas logikai szintre van állítva, a processzor válaszol a maszkolható megszakítás kérésekre (INTR megszakítások). Alacsonyra állítva ezt a bitet letiltjuk ezeket a megszakításokat. Az IF flag nincs hatással sem a kivételekre, sem a nemmaszkolható megszakításokra (NMI megszakítások). A CPL illetve IOPL határozzák meg, hogy a CLI, STI, POPF, és IRET utasítások változtathatnak-e ezen a biten. TF - (Trap Flag) csapda bit (8. bit) A TF flag magasra állítása a processzort - a hibakeresés érdekében - lépésenkénti végrehajtás üzemmódba helyezi. Ebben az üzemmódban a processzor minden egyes utasítást követően egy hibakereső kivételt (debug excepcion) generál, ezáltal lehetővé téve egy program ellenőrzését, miközben az egyenként hajtja végre az utasításokat. A

IF

78

Page 77: Otodik Generacios Processzorok_pentium

Regiszterek

lépésenkénti végrehajtás csak egy a processzor által kínált számos hibakereső lehetőség közül. Ha egy felhasználói program a POPF, POPFD, vagy IRET utasítások egyikével magasra állítja a TF flaget, egy hibakereső kivétel (debug exception) generálódik. 3.2.6.2. Vezérlőregiszterek

.7. ábra a CR0 3 É vezérlőregiszterek formátumát mutatja be. Az operációs rendszerek túlnyomó része

ja a felhasznál t abban, h regisztereket thessék (habár ez élküli ren engedett). A ználói programok olvashatják ezeket a regisztereket, példának

kedvéért a CR0-t olvasva meghatározhatják, hogy a numerikus koprocesszor jelen van-e. A MOV utasítás k ehetővé teszik, hogy ezeket a regisztereket feltölthess essük az általános regiszterekből, illetve regiszterekbe. P

V EAX, CR0

A CR0 regiszter rendszervezérlő bi amelyek üzemmódokat vezérelnek, vagy olyan állapotokat jeleznek, amelyek inkább általánosan a pr oznak taszkok végrehajtására. Egy pr a rezer elyikének

gk ált előző tt é lítan

PG - (Paging) lapozás bit ( CR0 31. bitje) Ha ez a bit magas, a lapozás mtiltott.

Ha a lapozás alatt kivétel generálódik, a CR2-es regiszterbe kerül 2 bites lineáris telt ézte. A lapozás alatt

ét lásd ké

A 3 , CR1, CR2, CR S CR4

meggátol ói programoka ogy a vezérlőfeltöl egy védelem n dszerben megfelhas

ülönböző formái lük vagy elmenthéldául:

MOMOV CR3, EBX

teket tartalmaz,

ocesszorra vonatk , mintsem egyediogramnak tilos vált bitek valam

megváltoztatását mekiolvasásukkor kapo

ísérelni. A rezervs ál

biteket mindig azrtékekre tanácso i.

egengedett, ha alacsony, a lapozás

az a 3 cím, amely a

skivé előid

létrejött kivételek (page faults) kezelé sőbb.

79

Page 78: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

10

23456789

101112131415161718192021

2425262728293031

2223

10

23456789

101112131415161718192021

242526272829

2223

3031

CR0CCCR4

0

000

000000

00000000

TARTVA

RTVA

E

LAP

B

PSEDE

PP

NE

Ha lapozást használunk, a CR3-as regiszter tartalmazza a címt

nálható címbitként. Az 386-os processzorral ellentétben, 486-os illetve a Pentium processzorok ezek közül két bitnek

D -

R1CR2R3

0MCE

00

000

00

FENN

FENNTA

LAPHIBA

LINEÁRIS

CÍM

CÍMTÁR

ÁZIS

TSDPVI

VME

CDWT

MPEMTSETNE

AM

WP

PGCDNW

A vezérlő regiszterek f3.7. ábra: elépítése

lap ár (a felső szintű laptáblázat) címének 20 legjelentékenyebb bitjét. A CR3-as regiszter a lapcímtár báziscím-regisztere (PDBR Page Directory Base Register) néven is ismert. Megjegyzendő, hogy a lapcímtárnak is lapkeret illeszkedésűnek kell lennie, ezért a regiszter alsó

2-bitje nem hasz1ajelentőséget tulajdonítanak. Ezek: PC (Page-Level Cache Disable) lapszinti cache-letiltás bit (CR3 4.

bitje) Ha a lapozás megengedett, a lapozást nem használó buszciklusok mint például a megszakítás elismerő ciklusok idején ennek a bitnek az

80

Page 79: Otodik Generacios Processzorok_pentium

Regiszterek

állapota megjelenik a processzor PCD vonalán. Ha a lapozás nem engedélyezett, ez az információ minden egyes buszciklus idején

egjelenik. A PCD vonalat (pin-t) egy külső cache-be történő pufferelés

álják.

D - (C

először invalidálni kell. A cache-elésre vonatkozó információkat sd később.

Ha ez a bit 0-ra van állítva, engedélyezi a cache átírást (write-, ha 1-re van állítva, letiltja a

ache-invalidáló ciklusokat és azokat az átírásokat, amelyek cache-

m(caching) ciklusonkénti vezérlésére használják. PWT - (Page-Level Writes Transparent) lapszinti átlátszó átírás bit (CR3

3. bitje) Ha a lapozás megengedett, a lapozást nem használó buszciklusok mint például a megszakítás elismerő ciklusok idején ennek a bitnek az állapota megjelenik a processzor PWT vonalán. Ha a lapozás nem engedélyezett, ez az információ minden egyes buszciklus idején megjelenik. A PWT vonalat (pin-t) egy külső cachen történő átírás (write-through) ciklusonkénti vezérlésére haszn C ache Disable) cache-letiltás bit (CR0 30. bitje) Ha ez a bit 0-ra van állítva, engedélyezi a cache feltöltő mechanizmust, ha 1-re, letiltja azt. Ha ez a bit 1-es, a cache-vesztések (cache misses) nem okoznak cache feltöltést. Megjegyzendő, hogy a cache-találatok nincsenek letiltva; ahhoz, hogy teljesen kiiktassuk a cache-t,lá NW - (Not Write-through) átírástiltás bit (CR0 29. bitje) through) és a cache-invalidáló ciklusokatctalálatosak. A cache-használatra vonatkozó információkért lásd később. AM - (Alignment Mask) illeszkedési maszk (CR0 18. bitje) Ha ez a bit 1-es, az illeszkedés ellenőrzés engedélyezett, ha 0, letiltott. Az illeszkedés ellenőrzésre csak abban az esetben kerül sor, ha az AM bit és az AC flag is 1-es, és a CPL értéke 3 (felhasználói mód).

81

Page 80: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

W Write Protect) írásvédelem bit (CR0 16. bitje) Ha 1-re van állítva, ez a bit levédi a felhasználói- szintű lapokat a felügyelőprogram-szinti írás ellen. Ha ez a bit értéke 0, a “csak olvasható”, felhasználói-szintű lapokra a felügyelőprogram írhat is. Ez a lehetőség hasznosnak bizonyul, ha az ún. "írás közbeni másolás" megoldást (copy-on-write) akarjuk megvalósítani ú

P - (

j, származtatott szkok (processes) létrehozására (forking), amely egyes operációs ndszerekben (például az UNIXban) használatos.

E - (Numeric Error) numerikus hiba bit (CR0 5. bitje)

onalakat külső logikával PC-típusú hibajelentések létrehozására asználják.

ővítés bit (CR0 4. bitje)

S - (Task Switched) taszkkapcsolás bit (CR0 3. bitje)

szkkapsolás alkalmával beállítja a

tare N Ha ez a bit magasra van állítva, a lebegőpontos numerikus hibák jelentésének standard mechanizmusa engedélyezett. Ha NE=0 és az IGNE# bemenet aktív, a numerikus hibákat a processzor nem veszi figyelembe. Abban az esetben, ha NE=0 és az IGNE# bemenet inaktív, a numerikus hibák arra késztetik a processzort, hogy megálljon, és egy megszakításra várjon. A megszakítás a FERR# vonal segítségével generálódik, amely a megszakítás kontroller egyik bemenetét hajtja meg (a FERR# vonal emulálja az 287-es és 387-es matematikai koprocesszorok ERROR# vonalát). Az NE bitet, az IGNE# és a FERR# vh

T - (Extension Type) koprocesszorral bE Ez a bit azt mutatja, hogy a processzor támogatja az 387 DX matematikai koprocesszor utasításkészletét (Pentium processzoroknál ez a bit fenntartott). T

A processzor minden egyes ta TS bitet, illetve teszteli azt, amikor a lebegőpontos numerikus utasításokat értelmezi. Ezzel a bittel lehetővé válik a numerikus kontextus mentésének illetve helyreállításának késleltetése mindaddig, amíg a numerikus adat

82

Page 81: Otodik Generacios Processzorok_pentium

Regiszterek

ténylegesen felhasználásra nem kerül. A CLTS utasítás 0-ra állítja (RESET) ezt a bitet. EM - (Emulation) numerikus koprocesszor emulálása (CR0 2. bitje) Mikor az EM bit magas logikai szintre van állítva (EM=1), egy numerikus utasítás végrehajtása "nem létező koprocesszor" kivételt generál. Ha a processzornak nincs lebegőpontos egysége, az EM bitet 1-re kell állítani. MP - (Monitor coProcessor) koprocesszor monitorozó bit. Az 286-os és 386 DX processzorokban az MP bit a WAIT -

oprocesszorral való szinkronizálásra használatos- utasítás működését esszorok

rogramjait futtatjuk 486-os vagy Pentium processzorok FPU-ján, ez a bit telez

ME - (Virtual-8086 Mode Extensions) virtuális 8086-os üzemmód

kvezérli. Abban az esetben, ha 286-os vagy 386 DX procpkö ően 1-re állítandó. Az MP bitet resetelni kell a 486 SX processzor estében. PE - (Protection Enable) védett üzemmód engedélyező bit (CR0 0. bitje) A PE bit magas állapota engedélyezi a szegmens-szintű védelmet. A védelemről további információk a védett üzemmódnál A CR4-es regiszterben bizonyos architektúrális kiterjesztéseket engedélyező bitek találhatók. Ez a regiszter a Pentium proceszszorban jelenik meg először Vkiterjesztések bit (CR4 0. bitje) Ez a bit magasra állítva támogatja egy virtuális megszakítás engedélyezést jelző flag virtuális 8086-os üzemmódbeli alkalmazását. Ezen "adottság" javítani képes a virtuális 8086-os üzemmódban futó alkalmazások teljesítményén, mégpedig úgy, hogy megszünteti a költségeit egy virtuális 8086-os monitorba való fault kivétellel történő- "kiugratásnak", bizonyos utasítások emulálásakor. Lásd a függelékben.

83

Page 82: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

PVI - (Protected-Mode Virtual Interrupts) védett üzemmódú virtuális megszakítások (CR4 1. bitje) Ez a bit magasra állítva támogatja egy virtuális megszakítás

Ennek a bitnek a magasra állítása engedélyezi az I/O

E - (

gről a függelékben lálhatók.

Enable) géptípus ellenőrzés engedélyezését jelző bit (CR4 6. bitje)

.2.6.3. Nyomkövető regiszterek

engedélyezést jelző flag védett üzemmódbeli alkalmazását. Ezen tulajdonság lehetővé teszi a 0. privilegizálási szintre tervezett programok számára, hogy a 3-as privilégiumszinten fussanak. További információk a függelékben. TSD - (Time Stamp Disable) time stamp-számláló olvasás tiltása (CR4 2. bitje) Ezt a bitet 1-re állítva az RDTSC utasítás (Read from Time Stamp Counter) privilegizált utasítássá válik. Részletek az RDTSC utasításról a 2. kötetben. DE - (Debugging Extensions) hibakeresés kiterjesztések bitje (CR4 3. bitje) töréspontokat. Lásd később. PS Page Size Extensions) lapméret kiterjesztések bitje (CR4 4. bitje) Ennek a bitnek a magasra állítása engedélyezi a 4 MByte-os lapméretet. További információk erről a lehetőséta MCE - (Machine Check

Magasra állítva ezt a bitet, engedélyezzük a géptípus ellenőrző kivételt. 3

84

Page 83: Otodik Generacios Processzorok_pentium

Regiszterek

A nyomkövető regiszterek fejlett hibakereső képességgel látják el a processzort, beleértve az adat töréspontokat és annak lehetőségét, hogy a kódszegmens módosítása nélkül az utasítások közé töréspontokat

reakpoints) szúrhassunk (hasznos lehet a ROM-ra alapozott software-ek

progegy haszn 3.8. ábra illusztrálja.

(bnyomkövetése esetén). Csak a legmagasabb privilégiumszinten futó

ramok képesek ezekhez a regiszterekhez hozzáférni. A későbbiekben teljeskörű leírást kaphatunk ezen regiszterek felépítéséről és álatáról. A nyomkövető regisztereket a

10

23456789

10

10

23456789

10111213141516171819202122232425262728293031

DR7 DR6 DR5 DR4 DR3 DR2 DR1 DR0LEN

R1

0

11121314

2223242526

31

15161718192021

27282930 3

LEN

LEN

R/W

R/W

3

2

2

/W1

LEN

R/W0

00

GD

00

1GELEG3L3G2L2G1L1G0L0

B3B2B1B0

BD

BTBS

1111111111

1

11111

FENNTARTVA FENNTARTVA LINEÁRISCÍME

LINEÁRISCÍME

LINEÁRISCÍME

SPONTLINEÁRIS

CÍME

TÖRÉSPONT3.

TÖRÉSPONT2.

TÖRÉSPONT1.

TÖRÉ0.

111111111

3.8. ábra: Nyomkövető regiszterek

85

Page 84: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.3. CPU üzemmódok 3.3.1. Valós üzem

mód ("valós mód")

Ez az üzemmód az Intel 8086 processzor programozási

llítja, melyből egyetlen utasítás gítségével átkapcsolható a védett módba.

támogatja. Minden új mikroprocesszorra (kezdve az 386 SL-től) jellemző az SMM, mely egy operációs rendszer- és alkalmazásfüggetlen, ezek számára transzparens mechanizmus. Ezen mechanizmus segítségével implementálhatók a rendszerteljesítményt menedzselő és OEM megkülönböztető funkciók. Az SMM-be való belépés egy külső megszakításvonal (az SMI#)

környezetét valósítja meg, biztosítva egy pár kiterjesztést (ilyen például az ebből a módból való kilépés lehetősége). A reszet általi inicializálás a processzort a valós üzemmódba áse 3.3.2. Védett üzemmód Ez a processzor natív állapota. Ebben az üzemmódban az összes utasítás és architekturális jellemző elérhető, biztosítva a legnagyobb teljesítményt és képességeket. Minden új alkalmazás és operációs rendszer számára ez az ajánlott üzemmód. A védett mód által nyújtott lehetőségek közé tartozik 8086-ra írt "valós módú" software multitaszking, védett módú környezetben történő közvetlen végrehajtása. Ennek a lehetőségnek a neve 8086-os virtuális mód (vagy "V86 mód"). A 8086-os virtuális mód valójában nem a processzornak egy üzemmódja, hanem egy attribútum, amelyet védett módban, megfelelő software segítségével, bármely taszk számára beállítható. 3.3.3.Rendszermenedzselő üzemmód A Pentium mikroprocesszor a rendszermenedzselő üzemmmódot (SMM - System Management Mode) is

86

Page 85: Otodik Generacios Processzorok_pentium

CPU üzemmódok

aktiválásával történik, mely a CPU-t egy különálló címtartományra apcsolja át, lementve a CPU teljes állapotát. Ennek következtében az k

SMM-specifikus kód végrehajtása transzparens. Az SMM-ból való visszatéréskor az előző műveletek fordítottja hajtódik végre.

87

Page 86: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.4. Inicializálás és az üzemmódok közötti tkapcsolás

e égrehajtását. Inicializáláskor a processzor a modell és revíziószámmal

hogy milyen hetőségek állnak a software rendelkezésére. Annak módját, ahogyan az

alkalmfeltérkérész a processzor kezdeti állapotáról nyújt információkat és tárgyalja a va s álásának követelményeit, a két üzemm en része az

icializáló folyamatnak. A védett üzemmódba való átkapcsolást egy

.4.

RESeghatározott állapotba kerülnek. Ezek a meghatározott állapotok, mint

éldául az EBvégrehajt ek után felépítheti a memóriá a rá nt például a GDT és IDT táblázatok, m a azói software-ek használnak. A RESE(TLB-k) és elágazás célpufferek (BTB-k) működése letiltódik.

álasza akkor is, ha jelzést kap a futás üg

ggel, hogy nem változtatja meg a

első cache-ek és modell specifikus regiszterek állapotát, valamint a

á A hardware reszetet követően a processzor egy jólmeghatározott alapállapotba kerül annak érdekében, hogy megkezdhesse a softwarvkapcsolatos információkat nyújt annak meghatározására, le

azások a rendelkezésükre álló lehetőségeket futásidőben pezik, egy későbbi fejezet tárgyalja, egy példa kíséretében. Ez a

ló és védett üzemmód konfiguród közti átkapcsolás folyamatát, mely normális esetb

inpéldaprogram mutatja be.

1. A processzor inicializálása 3 Az inicializálást a processzor RESET bemenete idézi elő. A

ET aktiválását követően a processzor egyes regiszterei egy jól mp P regiszter tartalma, elegendőek ahhoz, hogy a software

ása megkezdődjön. A software ezban z olyan adatstruk kat, mitú

lyeket a rendszer- és z alkalmeT aktiválásakor a belső cache-ek, fordítást gyorsító pufferek

A gép bekapcsolásakor a RESET jelet a hardware aktiválja. E jelet a hardware más esetekben is aktiválhatja; például a reszet általi inicializálás manuálisan is előidézhető, egy billentyűgomb segítségével. Reszetelés lehet a hardware vfelf gesztésére vagy a kikapcsolásra.

A Pentium processzornak egy INIT bemenete is van, mely a RESET-hez hasonlít, azzal a különbséb

88

Page 87: Otodik Generacios Processzorok_pentium

Inicializálás és az üzemmódok közötti átkapcsolás

leb őpontos állapotot. Az INIT leheg etőséget nyújt a védettből a valós zemmódba való átkapcsolásra úgy, hogy a cache-ek tartalma megmarad.

3.4. eszt-kérés

egvalósítása a hardware-tervező feladata, amennyiben az öntesztre

(Az us, ezért az Intel nntartja a jogot magának az órajelek pontos számának bejelentés nélküli gv

regiszter tartalma nulla lesz. Ha a teszt után az EAX regiszterben nullától ülönböző érték van, ez azt mutatja, hogy a processzor hibás. Ha nem olt önteszt kérve, inicializálás után az EAX regiszter tartalma nulla.

Inicializálás után az EDX regiszter a processzor azonosítóját és a

3H. Ezt a ámot az inicializáló software kiválasztására felhasználva a bináris rgykód kompatibilissé tehető más Intel processzorokkal is. A DL

nosítószámát tartalmazza. Reszetelés után az DX regiszter felső szava fenntartott.

üAz INIT aktiválásakor a TLB-k és a BTB letiltódnak.

1.1. A processzor állapota reszetelés után

Bekapcsoláskor öntesztelés kérhető; az öntmszükség van. Az önteszt elvégzése körülbelül 219 órajelnyi időt igényel.

órajelek előbb említett száma modell-specifikfeme áltoztatására.) A processzorteszt hibamentes lefolyását követően az EAX

kv revíziójának számát tartalmazza (3.9. ábra). A DH regiszter a 3, 4 vagy 5 értékeket tartalmazza, melyek a Intel386, Intel486 illetve a Pentium CPU-t azonosítják. E családok különböző alosztályainak esetében a DH-ban más értékek is lehetnek, például az Intel386 SX CPU esetében 2sztáregiszter a revízió egyedi azoE

DLDH31 15 7 0

DX

EDX

FENNTARTVA ESZKÖZAZONOSÍTÓ

EGYEDIAZONOSÍTÓ

89

Page 88: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.9. ábra: Az EDX regiszter tartalma reszetelés után

CR0 Reszetelés után31302928272625242322

18

1312

4

212019

17161514

AM

PGCDNW 1- Nem át-író tiltva

0 - Lapozás tiltva1 - Cache tiltva

0 - Illeszkedés ellenőrzés tiltv

FENNTARTVA

a

0 - Írásvédettség tiltvaWP

1110987

56

NE

32 EM

TS1

10 PE

MP

FENNTARTVA

0 - Külső FPU hiba

leteknél nincs c0 - Nincs taszk váltás0 - ESC műve0 - WAIT műveleteknél nincs c0 - Valós üzemmód

.10 után 3 . ábra: A CR0 regiszter tartalma reszetelés

90

Page 89: Otodik Generacios Processzorok_pentium

Inicializálás és az üzemmódok közötti átkapcsolás

Pen etően a CR0 reg apo llapot a processzort val ba állítja és kikapcsolja a lapozást. A flagek és egyé iszte 1. ábra mutatja be. Regi

A tium processzor üzembe helyezését köviszter áll tát a 3.10. ábra mutatja (60000010H). Ez az á

ós üzemmódb reg reknek az üzembehelyezés utáni állapotát a 3.1

szter RESET - BIST nélkül

INIT

EFLAG 00000002h 00000002h EIP 0000FFF0h 0000FFF0h CR0 6000001 A CD és NW

biteket nem cseréli, a 4. bitet 1-be állítja, az

0h

összes többit törli. CR2, CR3, CR4 00000000h 00000000h CS szelektor=0F000h

bázis=0FFF0000h szelektor=0F000h

határ=0FFFFh

hozzáférhrtő

bázis=0FFF0000h határ=0FFFFh

tó, hozzáférhető

elérési jogok vannak, írható, olvasható,

elérési jogok vannak, írható, olvasha

SS, DS, ES, FS, GS szelektor=0000h bázis=0000h határ=0FFFFh elérési jogok vannak, írható,

szelektor=0000h bázis=0000h határ=0FFFFh elérési jogok vannak, írható,

olvasható, hozzáférhető

olvasható, hozzáférhető

E 000005xxh 000005xxh DX EAX hibátlan önteszt

esetén nulla 0

EBX, ECX, ESI, EDI, EBP, ESP

00000000h 00000000h

91

Page 90: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

L szelektor=0000h bázis=00000000h határ=0FFFFh elérési jogok

szelektor=0000h bázis=00000000h határ=0FFFFh el

DTR

vannak, írható, olvasható

érési jogok vannak, írható, olvasható

GDTR, IDTR bázis=00000000h határ=0FFFFh

vannak, írható, olvasható

bázis=00000000h határ=0FFFFh

vannak, írható, olvasható

elérési jogok elérési jogok

DR0, DR1, DR2, DR3 00000000h DR6 FFFF0FF0h FFFF0FF0h DR7 00000400h 00000400h T Sime tamp számláló 0 Nem cseréli Vezérlkiválas

ő és esemény ztó

0 Nem cseréli

TR12 0 Nem cseréli Minden msp fi

ás modell eci kus regiszter

Nem definiált Nem cseréli

Adat éTLB-k

s kód Cache, Érvénytelen Érvénytelen

he zévannakszabad

.4.1 első v utas Egy cím ge a s iszter bázis része

ik a tén , kia a l Ez emmód yes, isc a

védett módban másképp történik, mint ódban. Egy utasítás

3.11. ábra: A processzor állapota a reszetelést követően

Az EFLAGS regiszter felső 10 bitjének állapota az üzembe lye st követően meghatározatlan. A meghatározatlan bitek fenn

tartva, a software végrehajtása egyik említett bit állapotától sem függjön.

3 .2. Az égrehajtott

nerálásához

ítás

zegmensregy hozzáadód

minden üzyleges címhez

érvénlakítva íg ineáris címet.

ím kiszámításaesetében habár a báza valós üzemm

92

Page 91: Otodik Generacios Processzorok_pentium

Inicializálás és az üzemmódok közötti átkapcsolás

beolvaés így a kettő e

sásához a CS er bázis része hozzáadódik az EIP tartalmához gyüt lin

Valós üzem a ak tartalma megváltozik, akkor a bázis rész is megváltozik, ennek az

ek a 16-szo Reszetelés után azonban a CS bázisrésze edik yen z l,

ehelyett a CS szeleCS szelektor értékének a reszetelés utáni első megváltoztatása a fenti szabályt fogja követni (bázis = szelektor*16). Ennek ere az

andócímről fog történni M-ban l inicializáló kell elhelyezkedjen. A cím a Pentium fizi emóriájának legnagyobb címe alatt 16 Byte-tal van. Biztosítani kell, hogy az inicializálás befejezés távoli ugrás és hívás ne hajtódjon végre. Ha az első távoli ugrás vagy hívás valós üzemmódban történik, az új érték a (16 bites) CS szelektorba kerül és a CS bázisának értékét csak 20 bitesre fogja beállítani, vagyis a célként szereplő cím a 0 és 1M közti tartományban lesz. Ajánlatos meggyőződni arról, hogy ebben a tartományban érvény és kód van-e.

adatszeg ára a ímtartomány ódik, ahol a várhatóa z

3.4.1.3. A cache engedélyezés

e en CR D jeinek törlésével történik t ) a cache-elést (átíró módban az Intel486 tium esetében) és a cache-letiltó ciklusokat. szet ást követően minden cache-vonal érvénytelen, a cache-elés engedélyezése előtt nincs szükség a cache érvénytelenítésére. A cache kezelésének részletes leírását, beleértve az átíró cache-stratégia Pen n

aló megvalósítását a laptáblázat-bejegyzés PWT bitjének felha

regisztt meghatározza a eáris címet.

szegmensregismódban, amikor zter szelektorán

értéknmásként viselk

rosára. , nem lesz eg lő 16-szor a s elektor értékéve

dményeképpen

ktor értéke 0F000H és a CS bázisé 0FFFF0000H. A

első végrehajt utasítás beolvasása a CS.bázis+EIP = 0FFFFFFF0H . Az EPRO evő

processzorkód ezen a címen kai m

e előtt semmilyen

es memória

Az aljára (0 cím) állít

mensek szám báziscím a fizn a RAM helye

e

ikai ckedik el.

A cach gedélyezése a

(a hardware resze0 regiszter C1-re állítja őket és visszaíró m Mivel a re

és NW bit. Ez engedélyeziódban a Penáltali inicializál

tium processzorov

sználásával, egy későbbi tartalmazza.

93

Page 92: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

Olyan körülmények közt, amikor a cache-vonalak esetleg

ngedélyezése előtt a cache-t le ell tiltani vagy ki kell üríteni. Ezt a software-inicializálás alkalmával a egbíz

sének modell specifikus részletei a 'Pentium M Processor Data Book' dokumentációban találhatók.

s üzemmódban

módja van. A végrehajtást a Pentium a patibilis üzemmódban kezdi, melynek valós

software elő kell szornak szüksége

lapvető rendszerfunkciók végrehajtásának céljából, mint zakítások kezelése. Ha a processzor továbbra is valós

e az adatstruktúrák felépítését a 8086-os ezze. Ha a processzor védett módban fog

s átu

lázatra. A ődik (amíg

nem változik), a megszakítások engedélyezése előtt fel kell

svektorok táblázatát és óriába, a reszet általi

követően lesz egy olyan időszak, amikor az NMI

érvényesnek vannak megjelölve, a cache ekm hatósági tesztet végző rutin segítségével oldható meg, mely a tesztregisztereket felhasználva, tesztmintákat futtat keresztül a cache memórián. A cache teszteléT 3.4.2. Software inicializálás való A processzornak több üzem

86 processzorral kom80üzemmód a neve. A reszet általi inicializálás után a

az adatstruktúrákat, melyekre a proceskészítse azokatvan az olyan apéldául a megsüzemmódban marad, a softwar

lakban kell elvégáltal használt aködnmű i, a software az adatstruktúrákat a védett módban használato

form mban kell felépítse, majd át kell kapcsoljon a védett üzemmódba. 3.4.2.1. Rendszertáblázatok Valós üzemmódban nincs szükség deszkriptor táb

eszkriptor táblázatot (IDT), mely a 0 címen kezdmegszakítás daz IDTR megtölteni a kivétel- és megszakítás-kezelőkre mutató pointerekkel. 3.4.2.2. Az NMI megszakítás Az NMI megszakítás mindig engedélyezve van (kivéve az

ásegym ba ágyazott NMI-ket). Mivel a megszakítázakítás-kezelőt be kell tölteni a memaz NMI megs

inicializálást

94

Page 93: Otodik Generacios Processzorok_pentium

Inicializálás és az üzemmódok közötti átkapcsolás

megszakítás nem kezelhető. A hardware-nek biztosítania kell egy olyan

ódban

modellek használatát, melyek az egyetlen, ytól (lapos modell) egészen a nagyon strukturált

rjednek, melyek több, minden taszk számára független és artományt biztosítanak (multiszegmentált modellek). tő a lapozás, mely olyan nagyméretű adatstruktúrákhoz

rmája olyan et az operációs rendszer épít fel és a

DT-mens kell és

ásik csoport s: a

módszert, mely megelőzi az NMI megszakítások generálását, amikor azokat a software még nem tudja kezelni. Például az IDT és NMI megszakításokat bele lehet tenni a ROM-ba, így lehetségessé válik az NMI megszakítás kezelése már rögtön az inicializálás után. Legtöbb rendszer az NMI engedélyezését/letiltását úgy végzi el, hogy az NMI jelet átvezeti egy ÉS kapun, melyet egy I/O port egyik bitje vezérel. A reszeteléskor a hardware törölheti ezt a bitet, majd a software újra beállíthatja, amikor már készen áll az NMI megszakítás kezelésére. A rendszer software-ek tervezőinek ismerniük kell a hardware által használt mechanizmust, mely a software-t a reszetelést követő NMI megszakításoktól védi. 3.4.3. Software inicializálása védett üzemm A védett módban szükséges adatstruktúrákat a felhasznált memóriakezelő funkciók határozzák meg. A processzor támogatja a különböző szegmentált

mtartománfolyamatos címodellekig tevédett címtEngedélyezheteszi lehetővé a hozzáférést, melyeknek részben a memóriában, részben pedig a lemezen találhatók. A címképzés mindkét foadatstruktúrákat igényel, melyekmemóriakezelő hardware használ. 3.4.3.1. Rendszertáblázatok A lapozást nem használó lapos modellnek legkevesebb egy G

atszegre van szüksége, melyben legalább egy kód- és egy addeszkriptor van. Az első GDT bejegyzés egy nulldeszkriptorttartalmazzon. Egy lapozást használó lapos modellnek kód-adatdeszkriptorokat biztosíthat a felügyelői mód és egy mkód- és adatdeszkriptort a felhasználói mód számára. (Megjegyzémásodszintű laptáblázat kiküszöbölhető, ha a lapcímtár egy önmagára

95

Page 94: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

mutató bejegyzést tartalm . Ez etben a lap tár éaz es cím s a laptáblázat ális

kség k h m utasítás me atá tt R szterbe.

ell az ációs rendszer se v ások számára T ks Az LDT-k

ig ne be yes operációs k le. ozási más.

ál az Egy ámú

ozott szer ényt

t, a egy kaput. Az

gítségével az IDT

Ha a áni állapota

elérhető processzor

ugyanazon a lapon helyezkedik el.) A verem helyezhető egy normírható/olvasható adatszegmensbe is, akkor a verem részére nincs szüdeszkriptorra. A verem csa azután asználható, iután a LDTR

regisegítségével a GDT báziscí és h ra betöltődö a GDT A multiszegmentált mod esetében operszámára további szegmen kre, alamint az alkalmazszegmensekre és LD -ra lehet szü ég. szegmensdeszkriptorokat ényel k a GDT- n. Egrendszerek szükség esetén újabb szegmenseket és LDT-ket foglalna

rogramEz maximális rugalmasságot biztosít az olyan dinamikus pkörnyezetek kezelésében, mint például egy tervezői munkaálloEnnek ellenére számos operációs rendszer egyetlen LDT-t hasznösszes folyamat számára és a GDT bejegyzéseket előre lefoglalja.beágyazott rendszer, mint például egy folyamatvezérlés, rögzített sz

eghatáralkalmazói program számára előre le kell foglaljon egy mszámú LDT-t. Ez egy egyszerű és hatékony mód egy olyan rend

teljesítmsoftware-környezetének struktúrálására, mely valós idejű igényel. 3.4.3.2. Megszakítások Ha a hardware megengedi a megszakítások generálásámegszakítás kezelő számára létre kell hozni egy IDT-t ésIDT csak azután használható, miután a LIDT utasítás se

báziscíme és határa betöltődött az IDTR regiszterbe. 3.4.3.3. Lapozás

ezérli. A szegmentációtól eltérően a lapozást egy módbit vCR0 regiszter PG bitje nulla (a reszet általi inicializálás utpontosan ez), akkor a programozó által architektúrából a lapozási mechanizmus teljes mértékben hiányozni fog.

96

Page 95: Otodik Generacios Processzorok_pentium

Inicializálás és az üzemmódok közötti átkapcsolás

Ha PG bit értéke 1, akkor engedélyezve van a lapozás. A bitet a vetkező

A os

módban nem esül, akkor a PG

-re állíthatók.

ának eket

utasítás után egy JMP utasítás kell

kiürítse az addig beolvasott és dekódolt

álható.

ikusan s címe

ett

i. A Pentium csak a 2. lépés elvégzését

MOV CR0 utasítással lehet beállítani. A bit beállítása előtt a köfeltételeknek kell teljesülniük: 1. A software létrehozott már legkevesebb két laptáblázatot, a

apok a eslapcímtárat és 4 kByte-os l használat etén legkevesebb egy másodszintű laptáblázatot. 4 MByte- lapokkal kapcsolatos

ációk a függelékben találhatók. inform 2. A PDBR regiszterbe (mely ugyanaz, mint a CR3) be van töltve a

lapcímtár báziscíme. 3. A processzor védett módban van (a lapozás valós üzem

áll rendelkezésre). Ha minden más megszorítás teljés PE bitek egyidejűleg 1

Úgy a lefelé, mint a felfelé való kompatibilitás fenntartás

PG bit (és a PE bit) beállításakor a következő irányelvérdekében akell követni:

lenül a PG bitet beállító 1. Közvetkövetkezzen. A MOV CR0 után következő JMP szerepe az, hogy a végrehajtás folyásának megváltoztatása által a 386 és 486

zorokból processutasításokat. A Pentium processzor az elágazások előrejelzésére egy elágazási célpuffert (BTB - Branch Target Buffer) használ, ezért szükségtelen az elő-beolvasási sor elágazási utasításokkal való kiürítése. A BTB-ről több információ a függelékben tal

2. A PG bitet beállító utasítástól a JMP-ig terjedő kód egy ident

leképezett lapon kell elhelyezkedjen (a lap JMP előtti lineárimegegyezik a lapozás engedélyezése utáni fizikai címével).

A 32 bites x86 architektúrák a lapozás engedélyezését és a véd

átkapcsolását különbözőképpen valósítják meg. A 386 módba valóesetében a fenti 1. vagy 2. lépés végrehajtása szükséges. A 486 esetében mindkét lépést el kell végezn

97

Page 96: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

igényli de a 386 és 486 oce rokkal a lefelé illetpr sszo ve felfelé való st elvégezni.

agyobb r nincs

l ára.

agasabb

foglaltnak megjelölni. Az LDT deszkriptorjaihoz hasonlóan a icializáló software TSS

regiszterbe. Ez

t végezné, alkalmával az aktuális

nálata után a zteren. Az

kriptorok létrehozására. A y a vezérlésnek magasabb

megszerezze a

kompatibilitás megtartása érdekében ajánlatos mindkét lépé 3.4.3.4. Taszkok Ha a multitaszking mechanizmus nincs használatban és a n

s nincs engedélyezve, akkoprivilégiumú szintekre való átváltászükség a TR regiszter inicia izás Ha a multitaszking mechanizmus használatban van és a nagyobb privilégiumszintekre való átváltás engedélyezve van (a mprivilégiumú SS és ESP értékei a TSS-ből kaphatók meg), az inicializáló software számára létre kell hozni a TSS-t és a TSS deszkriptort. A TSSdeszkriptor, létrehozásakor, nem lehet foglaltnak jelölve; a TSS deszkriptorokat a taszkátkapcsolások végrehajtásának mellékhatásaként a CPU szokta

eTSS d szkriptorjai is a GDT-ben vannak. Az indeszkriptorja az LDT utasítás segítségével töltődik a TR az utasítás a TSS deszkriptort foglaltként jelöli meg, de nem hajt végre

olást. Mielőtt a software az első taszkátkapcsolástaszkátkapcsbe kell tölteni a szelektort, mivel az átkapcsolástaszk bemásolódik a TSS-be. Az LTR utasítás hasztaszkátkapcsolás további műveleteket hajt végre a TR regisLDT szegmensekhez hasonlóan a TSS-ek és TSS deszkriptorok is szükség esetén lefoglalhatók, illetve előre lefoglalhatók. Ha a magasabb privilégiumszintekre való átváltás engedélyezve

deszvan, akkor szükség van a TSS-ek és TSS a TSS-t arra használja, hogprocesszor

privilégiumszintű szegmensekre való átadásakor torát és veremmutatóját. veremszegmens szelek

98

Page 97: Otodik Generacios Processzorok_pentium

Inicializálás és az üzemmódok közötti átkapcsolás

3.4.3.5. A TLB, BTB és cache tesztelése A védett módba való átkapcsolás folyamatának részeként a programozó ha úgy akarja, tesztelheti a TLB-t, a BTB-t és a cache-t. Részletes információkat a tesztelésről a függelék tartalmaz. 3.4.4. Üzemmódváltás A 32 bites címtartomány és utasításkészlet teljes kihasználása

valós üzemmódba. Ez a rész oftware el kell végezzen ahhoz, üzemmódba váltson át.

tt módba

egy minimális szekben tárgyaltak szerint inicializálni

gisztereket. E táblázatok létrehozása után a

a CR0 regiszter PE bitjének 1-re 0 utasítás használható. A PE bit

zokat az irányelveket kell követni, melyeket az ás engedélyezése kapcsán.

uk, ami a valós üzemmódban volt; a ell töltsön. A végrehajtás a

-lel kezdődik.

érdekében a processzort a natív valós üzemmódjából át kell kapcsolni védett üzemmódba. Egy rendszer szükségesnek tarthatja azt is, hogy egyes műveletek esetében visszaváltson a

éseket azonosítja, melyeket a sazokat a léphogy valósból védettbe és védettből valós

éde3.4.4.1. Átkapcsolás v A védett módba kapcsolás előtt létre kell hozni számú adatstruktúrát és az előző rékell a GDT, IDT és TR resoftware elvégezheti a védett módba való átkapcsolás lépéseit.

s A védett módba való belépéa MOV CRállításával történik; erre

beállítása során is ugyanargyalt a lapozelőző rész tá

dett módba való belépés után a szegmensregisztereknek A vé

továbbra is ugyanaz a tartalmsoftware minden szegmensregisztert újra fel kvédett módban nulla értékű CPL

99

Page 98: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.4.4.2. Visszakapcsolás valós üzemmódba

utasítással törli a CR0 regiszter PE . A valós üzemmódba képpen kell eljárjon:

őket végzi:

adja át (a zik a fizikai címmel). Biztosítja, hogy a GDT

elynek határa 64K enshatárt, melyre a

van. Biztosítja, hogy a GDT és az LDT a

i a valós kriptorok

zterek ptorok

b.

megszakításokat. A CLI utasítás letiltja az INTR vonalon áramkörök

R0 Ha a software egy MOV C

bitjét, a processzor visszatér a valós üzemmódbazővaló visszatérést lebonyolító procedúra a követke

1. Ha a lapozás engedélyezve van, a következ

entikusan leképezett lineáris címekre• A vezérlést idlineáris cím megegyeés az IDT is identikusan leképezett legyen.

• A CR0 regiszter PG bitjét törli. • Törli a TLB-t azáltal, hogy nullázza a CR3 regisztert.

2. A vezérlést egy olyan szegmensre adja át, m

(0FFFFH). Ez betölti a CS regiszterbe a szegmvalós módban szükség valós módban címezhető memóriában legyenek (0-1M).

3. Az SS, DS, ES, FS és GS szegmensregiszterekbe betölt

módnak megfelelő, a következő értékeket tartalmazó deszrjait: szelekto

• Szegmenshatár = 64K (0FFFFH) • Byte granularitás (G=0) • Kiterjesztés felfele (E=0)

) • Írható (W=1• Jelen van (P=1) • Bázis = bármilyen érték

Megjegyzendő, hogy ha nem történik meg a szegmensregis

ajtás a védett módban betöltött deszkriújrafeltöltése, akkor a végrehfelhasználásával folyik továb 4. Letiltja a

érkező megszakításokat; az NMI megszakítások külsősegítségével tilthatók le.

100

Page 99: Otodik Generacios Processzorok_pentium

Inicializálás és az üzemmódok közötti átkapcsolás

5. Törli a CR0 regiszter PE bitjét.

k. Így (a ssor és a erülnek. A

ésre nincs szükség, azonban a lefele alós üzemmódba való áttérés távoli JMP utasítást.

ásvektor-táblázat bázisának és utasítást használja.

zési mód által igényelt

d átkapcsolásra

izálásara és üzemmódváltásra olyan példát alható a felhasználó által írt alkalmazásba. tók a felhasznált Intel fejlesztőeszközökről,

vagy édett

6. A JMP utasítás segítségével a valós módú programra ugri

3 6 és 486 processzorok esetében) kiürül az utasítá hozzáférési jog bitjeibe k

8megfelelő értékek a CS regiszter

p ornál erre a lépPentium rocesszvaló kompatibilitás érdekében a v

tá atos elhelyezni egyfolyama ba ajánl

s címzési mód a megszakít7. A valóah tárának betöltésére a LIDT

8. Engedélyezi a megszakításokat. 9. A szegmensregiszterekbe betölti a valós cím

értékeket.

sra és üzemmó3.4.5. Példa inicializálá

inicial Ez a rész az mutat be, amelyik belefoglUgyanitt információk találhavagyis az ASM386/486 assemblerről és a BLD386 builder-ről. 3.4.5.1. A példa célja E példa célja az, hogy rögtön a reszet után az EPROM-ban flash-memóriában levő kódot felhasználva átkapcsolja a CPU-t v

szerű alkalmazást futtasson. üzemmódba, majd egy egy

101

Page 100: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

2.4.5.2. A memória elrendezése a reset-elést követően Az előbbiekben tárgyaltak és a 3.11. ábra alapján, a 3.12. áb

mutatja a processzor reszra a memória

etelését követően és e példa kezdeti elrendezésétpontján.

RESZET UTÁN0FFFF FFFFh

0FFFF 0000h

0FFFF FFF0h

64K

[CS.Bázis+EIP]

[SP, DS, SS, ES] 0

EIP=0000 FFF0CSbázis=0DSbázis=0ESbázis=0SSbázis=0SP=0

EPROM

rocesszor állapota a reszetet követően

i 3.1 utatja, a STARTUP.ASM

Meghatározás

12. ábra: A p3.

oritmus 3.4.5.3. Az alg A példa főbb lépése t a 3. ábra mforrásszöveg sorainak számozásával együtt. ASM sorok

157 Rövid ugrás az EPROM belépési pontjára 162-169 Felépít a RAM-ban egy ideig

bejegyzéssel: lenes GDT-t egy

0. null 1. irható/olvasható adat szegmens, Bázis=0 határ=4 GByte

102

Page 101: Otodik Generacios Processzorok_pentium

Inicializálás és az üzemmódok közötti átkapcsolás

171-172 A GDT pointerét a GDTR regiszterbe tőlti. 174-177 A CR0 regiszter védet üzemmód bitjének beállítása. 179-181 Közeli ugrás a valód módot törlő sorra. 184-186 DS és ES regiszterek feltöltése a GDT[1]

izikai memória deszkriptorral, most mindkettő a teljes fterületre mutat.

188-195 Végrehajt egy specifikus tábla inicializálg.

ást amire az új védett mód miatt van szüksé

196-218 Az alkalmazás GDT-jét a ROM-ból a RAM-ba másolja 220-238 Az alkalmazás IDT-jét a ROM-ból a RAM-ba másolja 241-243 Az alkalmazás GDTR regiszterének feltöltése 2 245 A alm IDTR regisz rének feltöltése 44- z alk azás te247-261 Az alkalmazás TSS-ét a ROM-ból a RAM-ba másolja 263-267 A TSS deszkriptor felfrissítése.

277 TR regiszter feltöltése (taszkválltás nélkül) 282-286 SS és ESP feltöltése az alkalmazásban talált TSS

értékekkel. 287 Az alkalmazás TSS-ében talált EFLAG elmentése 288 Az alkalmazás TSS-ében talált CS elmentése 289 Az alkalmazás TSS-ében talált EIP elmentése

290-293 DS és ES feltöltése az alkalmazásban talált TSS értékekkel.

296 Végrehajt egy IRET-et, visszatölti a fenti értékeket és belép az alkalmazás kódjába.

3.13. ábra: Az algoritmus és a forrásszöveg ezzel kapcsolatos sorainak

száma Megjegyzések: A védett módba való átkapcsoláskor (a távoli ugrás vagy távoli hívás által) a CS szelektor nem változik meg és az eredeti bázisérték megmarad (Ha a reszet után nem volt távoli ugrás, a bázis értéke 0FFFF0000H marad; itt található az EPROM).

103

Page 102: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

A reszet után a megszakítások le vannak tiltva és úgy is kell maradjanak, különben távoli ugrásokat okozhatnak. Az NMI nincs letiltva, de az inicializálás ideje alatt nem aktiválódhat. A TEMP_GDT használata megengedi a tömbök egyszerű mozgatását az EPROM-ból bárhova a RAM területén belül. Egy GDT bejegyzés úgy van felépítve, hogy a bázis a 0 címre mutasson és a határ 4GB legyen. Ha a DS és ES regiszterekbe betöltődik ez a deszkriptor, a TEMP_GDT-re nincs többé szükség és ennek helyét elfoglalhatja az alkalmazás GDT-je. Ez a kód egyetlen TSS-t (és egyetlen LDT-t sem) feltételez. Ha az alkalmazásnak több TSS-e van, ezeket a RAM-ba kell másolni. Ugyanígy kell eljárni az alkalmazás LDT-jeivel is.

Egyes implementálásoknál a korai 8086 processzorok szimulálása rdek a. A

védett meállítani, hogy

.4.

A példa az Intel software eszközeit (ASM386 és BLD386) használja. Az inicializáló kód generálására felhasznált ASM386 és BLD386 eszközei a következőket feltételezik:

• Az ASM 386 a kódszegmens attribútumának megfelelő, helyes operandusméretű opkódot fog generálni. Az attribútumot vagy az ASM386 segítségkérő vezérlője vagy a kódszegmens definíciója határozza meg.

• A kódszegmenset, mely valós üzemmódban fog futni, USE 16

attribútumúra kell állítani. Ha a szegmensben 32 bites operandusok (MOV EAX, EBX) kerülnek felhasználásra, egy automatikus operandusprefix fog generálódni, mely a processzort

é ében az A20-A31 címvonalak reszet után nincsenek dekódolv

ódba való átkapcsolás során ajánlatos a dekódereket úgy az összes címvonalat dekódolják. b

3 5.4. Eszközök használata

104

Page 103: Otodik Generacios Processzorok_pentium

Inicializálás és az üzemmódok közötti átkapcsolás

a 32 bites műveletekre kényszeríti annak ellenére, hogy az alapértelmezésben szereplő kódszegmens attribútum 16 bites.

• Az Intel ASM386 assemblere megengedi a specifikus 16 és 32

bites utasítások használatát, ilyen például a a LGDTW, LGDTD, IRETD. Egy általános utasítás (például LGDT) használata esetén a megfelelő opkód generálásához az assembler a alapértelmezésben szereplő szegmensattribútumot fogja felhasználni.

Téma ASM386 és

Startup.A58 BLD386

vezérlő és BLD file

Hatás

Bootstrap public startup startup:

bootstrap start(startup)

Közeli ugrás a 0FFFFFFF0h-nál a startra

GDT elhelyezkedés

public GDT_EPROM GDT_EPROM TABLE_REG <>

TABLE GDT(location= GDT_EPROM)

A GDT elhelyezkedése a DGT_EPROM pozícióra lesz programozva.

IDT elhelyezkedés

public IDT_EPROM IDT_EPROM TABLE_REG <>

TABLE IDT(location= IDT_EPROM)

Az IDT elhelyezkedése az IDT_EPROM pozícióra lesz programozva.

RAM

0...3FFFh) tábla mozgatásokhoz a ramot

kizárása az alkalmazás szegmens területéből.

kezdet RAM_START equ 400h

memory(reserv=

A RAM_START a

használja célnak Ezért szükséges egy terület

105

Page 104: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

Az alkalmazás TSS-ének elhelyezkedés

TSS_INDEX equ 10

ABLE GDT R 0:

Az alkalmazás TSS

e a

T(ENT Y=(1PROTECTED

))

deszkriptorát a

teszi. GDT-ben _

MODE_TASKGDT 10. pontjára

EPROM méret és elhelyezkedés

Az inicializáló kód mérete és

SEGMENT startup.c

elhelyezhedése. (base=0FFFF0000h) memory

legfeljebb 64K és a 4GB-os

ode Az inicializált kód mérete

tén

nie.

(RANGE( ROM_AREA

memória felső 64K-s terüle

= ROM(x..y)) kell elhelyezked

3.14. ábra: A BLD és az ASM forrásállomány közti összefüggés

3.4.5.5. A STARTUP.ASM listája

mmilyen opkód vagy ofszettel kapcsolatos nem tartalmaz.

tartup.a58 pw (132)

A CPU-t védett módba kapcsoló kód forrásszövegét a 3-1 példa

rtalmazza. Ez a lista setainformációt 3-1 példa: STARTUP.ASM OBJECT MODULE: startup.obj ASM386.EXE s Sor Forráskód 1 NAME STARTUP 2 ; 3 ; 4 ; 5 ;Előfeltételek: 6 ; 7 ;1. Az alsó 64K memória az RAM és a modul

106

Page 105: Otodik Generacios Processzorok_pentium

Inicializálás és az üzemmódok közötti átkapcsolás

8 ; haslétrehozásánál.

ználhatja azt átmeneti területek

dő szabadon ja amibe

ogy egyezzen

. EQU 0FFFF0000h

neáris címe, ami

;nyelv file-ban van megadva.

RT EQU 400h

;lineáris memória területen. A GDT, IDT és a ti TSS

egy kis

is címen. A RAM_START-l l ő 3 atok

;szabad Byte lineáris címét. Ez akkor os, ha memória

0 ;managert használunk. 31 ; 32 TSS_INDEX EQU 10 33 ; 34 ;A TSS index az indítás után elsőként futó taszk TSS-ének 35 ;indexe. 36 ; 37 ;

9 ; van elegen10 ;2. A rendszernek

11 ; szabadon használható RAM-bemásolható 12 ; a GDT, IDT, TSS kezdeti értékei13 ; 14 ; 15 ;Konfigurációs adat, meg kell ha build nyelv 16 ;file-al17 CS_BASE 18 ; 19 ;A CS_BASE a STARTUP_CODE lia build 2021 ; 22 RAM_STA23 ; 24 ;A RAM_START a szabadon használható RAM kezdete a 25 kezde26 ;ezen hely fölé másolódnak és

t is adatszegmens27 ;kihagy ezen a lineárná év 2 28 ;bites szó tartalmazza a lemásolt táblázfölötti első 29 haszn3

107

Page 106: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

38 ; 9 ; 340 ; 41 ;Szerkezet a rendszer adat számára 42 ; 3 ;TSS szerkezet 444

DW ? 0 ESP1 DD ?

DW ? ?

? DD ?

9 EAX_reg DD ? 0 ECX_reg DD ?

DD ? 2 EBX_reg DD ?

TASK_STATE STRUC 45 link DW ? 46 link_h DW ? 47 ESP0 DD ? 48 SS0 DW ? 49 SS0_h 551 SS1 DW ? 52 SS1_h DW ? 53 ESP2 DD ? 4 SS2 DW ? 555 SS2_h 56 CR3_reg DD 5 DD 7 EIP_reg 58 EFLAGS_REG 5661 EDX_reg 663 ESP_reg DD ? 64 EBP_reg DD ? 65 ESI_reg DD ? 66 EDI_reg DD ? 67 ES_reg DW ? 68 ES_h DW ? 69 CS_reg DW ? 70 CS_h DW ? 71 SS_reg DW ? 72 SS_h DW ? 73 DS_reg DW ? 74 DS_h DW ? 75 FS_reg DW ? 76 FS_h DW ? 77 GS_reg DW ? 78 GS_h DW ?

108

Page 107: Otodik Generacios Processzorok_pentium

Inicializálás és az üzemmódok közötti átkapcsolás

79 LDT_reg DW ? 80 LDT_h DW ? 81 TRAP_reg DW ? 82 IO_map_bas3 TASK_STATE ENDS

? 3 DESC ENDS 4 ;

és LIDT utasítások

.

-------------------------------------------------------------- 114 ;

e DW ? 884 ; 85 ;A deszkriptor elemi szerkezete 86 DESC STRUC 87 lim_0_15 DW ? 88 bas_0_15 DW ? 89 bas_16_23 DW ? 90 acces DB ? 91 gran DB ? 92 bas_24_31 DB 9995 ;Szerkezet az LGDT észére r96 ;TABLE_REG STRUC 97 table_lim DW ? 98 tabla_linear DD ? 99 TABLE_REG ENDS 100 ;A GDT és IDT deszkriptorok ofszetje a builder által generált 101 ;GDT-ben. 102 ;GDT_DESC_OFF EQU 1*SIZE (DESC) 103 ;IDT_DESC_OFF EQU 2*SIZE (DESC) 104 ; 105 ;Értékadások az átmeneti GTD felépítéséhez06 LINEAR_SEL EQU 2*SIZE 1(DESC) 107 LINEAR_PROTO_LO EQU 00000FFFFh 108 LINEAR_PROTO_HI EQU 000CF9200h 109 ; 110 ;Védett mód engedélyező bit a CR0-ban 111 PE_BIT EQU 1 112 ; 113 ;-----

109

Page 108: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

115 ;----------------------ADAT SZEGMENS----------------------- 116 ; 117 ;Kezdetben ez az adatszegmens a lineáris 0 címen 118 ;kezdődik a CPU bekapcsolási állapota miatt. 19 ; 1120 STARTUP_DATA SEGMENT RW

BEL DWORD

YTE 36 ;

47 ;

121 ; 122 free_mem_linear_base LA 123 TEMP_GDT LABEL BYTE 124 TEMP_GDT_NULL_DESC DESC <> 125 TEMP_GDT_LINEAR_DESC DESC <> 126 ; 127 ;Átmeneti terület az LGDT és a LIDT utasítások számára. 128 TEMP_GDT_SCRATCH TABLE_REG <> 129 APP_GDT_RAM TABLE_REG <> 130 APP_IDT_RAM TABLE_REG <> 131 ; 132 FILL DW 133 ; 134 ;Az utolsó dolog a szegmensben ami szükséges dword illeszkedéshez. 135 end_data LABEL B1137 STARTUP_DATA ENDS 138 ;---------------------------------------------------------- 139 ; 140 ; 141 ;---------------------------------------------------------- 142 STARTUP_CODE SEGMENT ER PUBLIC USE16 143 ; 144 ;A builder álltal feltöltve 145 PUBLIC GDT_EPROM 146 GDT_EPROM TABLE_REG <> 1

110

Page 109: Otodik Generacios Processzorok_pentium

Inicializálás és az üzemmódok közötti átkapcsolás

148 ;A builder álltal feltöltve PROM

<>

adódik át a vezérlés. nnek a lineáris memória felső 15 an lenn155 ; 156 PUBLIC STARTUP 157 STARTUP: 158 ; 159 ;DS és ES a lineáris memória alsó 64K-ját

160 ASSUME DS TA RTUP_161 ;Lásd a 3-15 br

;A GDTR regiszter feltöltése az átmeneti

EBX,TEMP_GDT ;Felépíti a TEMP_GDT-t az ban.

D PTR [ címecni

165 MOV DWORD PTR [ PTR [ LO PTR [ _HI

TEMP_GD sc BX 169 MOV TEMP_GDT_scratch.table_lim,15 170 ;

66h ;32 bites GDT

EMP_GDT_sc

éd R0

EBX,PE_ BX

179 ;Törli az utasít P CLEAR_L L

LABEL:

149 PUBLIC IDT_E50 IDT_EPROM TABLE_REG 1151 ; 152 ;Belépési pont a STARTUP kódba - a bootoláskor egy rövid ugrás 53 ;segítségével ide 1E4 ;64K-jáb kell ie.

címzi. :S á

RTUP_Dát.

ATA, ES:STA DATA

162 GDT-vel.163 LEA alsó memóriá164 MOV DWORtudjuk.

EBX],0 ;ahol

EBX]+4,0 166 MOV DWORD167 MOV DWORD

EBX]+8,LINEAR_PROTO_EBX]+12,LINEAR_PROTO

168 MOV T_ ratch.table_linear,E

171 DB Lvégrehajtás 172 LGDT T ratch 173 ; 174 ;Belépés v175 MOV EBX,C

ett módba. BIT176 OR

177 MOV CR0,E178 ;

ás előolvasó sort180 JM181 CLEAR_

ABE

111

Page 110: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

182 ; 183 ;Elkészíti a j t, a a 4G-s tartományt címzik.

CX,LINE SDS,CX S,CX

végzi a specifikus beállításokat

; ;

93 ; 94 ; 95 ;Lásd a

ROM GDT-t a RAM-ba másolja a TART+size(STARTUP_DATA) címre.

200 201 02 ADD ECX,OFFSET (GDT_EPROM)

204 05

208 209 MOV APP_GDT_ram[EBX].table_linear,EAX 210 ADD EAX,ECX 211 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI] 212 ; 213 ;A GDT bázicímének rögzítése a deszkriptorban. 214 MOV ECX,EDX 215 MOV [EDX[.bas_0_15+GDT_DESC_OFF,CX 216 ROR ECX,16 217 MOV [EDX[.bas_16_23+GDT_DESC_OFF,CL 218 MOV [EDX[.bas_24_31+GDT_DESC_OFF,CH 219 ;

z ú DS, ES regisztereke mik

184 MOV 185 MOV

AR_ EL

186 MOV E187 ; 188 ;El tábla .189 ; 190 191 192

; ......

111 3.16 ábrát. 196 ;Az EP197 ;RAM_S198 MOV EAX,RAM_START 199 ADD EAX,OFFSET (end_data)

MOV EBX,RAM_START MOV ECX,CS_BASE

2203 MOV SI,[ECX].table_linear

MOV EDI,EAX MOVZX ECX,[ECX].table_lim 2

206 MOV APP_GDT_RAM[EBX].table_lim,CX 207 INC EXC

MOV EDX,EAX

112

Page 111: Otodik Generacios Processzorok_pentium

Inicializálás és az üzemmódok közötti átkapcsolás

220 ;Az EPROM IDT RAM-ba másolása a 21 ;RAM_START+size(STARTUP_DATA)+SIZE címre. 2222 MOV ECX,CS_BASE 223 ADD ECX,OFFSET (IDT_EPROM) 224 MOV SI,[ECX].table_linear 225 MOV EDI,EAX 226 MOVZX ECX,[ECX].table_lim 227 MOV APP_IDT_RAM[EBX].table_lim,CX 228 INC EXC 229 MOV APP_IDT_ram[EBX].table_linear,EAX 230 MOV EBX,EAX 231 ADD EAX,EXC 232 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI] 233 ; 234 ;Az IDT mutató rögzítése a GDT-ben. 35 MOV [2 EDX[.bas_0_15+IDT_DESC_OFF,BX

38 24_31+IDT_DESC_OFF,BH 2324 TR regiszterek feltöltése 241 MOV EBX,RAM_START 2424242424242449 NDEX*SIZE(DESC)

257 LSL ECX,EBX 258 INC ECX 259 MOV EDX,EAX

236 ROR EBX,16 37 MOV [EDX[.bas_16_23+IDT_DESC_OFF,BL 22 MOV [EDX[.bas_9 ; 0 ;GDTR és ID

2 DB 66h 3 LGDT APP_GDT_ram[EBX] 4 DB 66h 5 LIDT APP_IDT_ram[EBX] 6 ;

ása 7 ;A TSS mozgat8 MOV EDI,EAX MOV EBX,TSS_I2

250 MOV ECX,GDT_DESC_OFF 251 MOV GS,CX 252 MOV DH,GS:[EBX].bas_24_31 253 MOV DL,GS:[EBX].bas_16_23 254 ROL EDX,16 255 MOV DX,GS:[EBX].bas_0_15 256 MOV ESI,EDX

113

Page 112: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

260 ADD EAX,ECX 261 REP MOVS BYTE PTR ES:[EDI], BYTE PTR

70 MOV free_mem_linear_base+RAM_START,EAX 271 ; 272 ;Feltételezzük, hogy a kezdeti taszkban nem használnak LDT-t - ha 273 ;szükséges, hozzáadhatunk egy LDT-t mozgató kódot, aminek 274 ;hasonlítania kell arra amit a TSS mozgatására használtunk. 275 ; 276 ;TR betöltése. 277 LTR BX ;Nincs taszkválltás, csak eszkriptor betöltés. 278 ;Lásd 79 ;A taszkválltás szimulálásához szükséges

AX,[EDX].SS_reg

V ESP,EDI 87 PUSH DWORD PTR [EDX].EFLAGS_reg 8

ES,BX

DS:[ESI] 262 ; 263 ;A TSS pointer rögzítése. 264 MOV GS:[EBX[.bas_0_15+IDT_DESC_OFF,DX 265 ROR EDX,16 266 MOV GS:[EBX[.bas_16_23+IDT_DESC_OFF,DL 267 MOV GS:[EBX[.bas_24_31+IDT_DESC_OFF,DH 268 ROL EDX,16 269 ;Elmenti a szabad memória kezdőcímét RAM_START helyzetben. 2

da 3.17 ábrát.

2regiszterek betöltése. 280 ; 281 ; 282 ; 83 MOV2284 MOV EDI,[EDX].ESP_reg 285 MOV SS,AX 286 MO228 PUSH DWORD PTR [EDX].CS_reg 289 PUSH DWORD PTR [EDX].EIP_reg 290 MOV AX,[EDX].DS_reg 291 MOV BX,[EDX].ES_reg 292 MOV DS,AX 293 MOV

114

Page 113: Otodik Generacios Processzorok_pentium

Inicializálás és az üzemmódok közötti átkapcsolás

294 ;

izálásához. 96 IRETD

definiálja az Ez a rész

SEGMENT RW dup (?)

;

0 nop 1 nop

6 END main_start, ds:data, ss:stack

295 ;Egy távoli ugrás szimulálása a taszk inicial2297 ; 298 STARTUP_CODE ENDS 299 ; 300 END STARTUP, DS:STARTUP_DATA, SS:STARTUP_DATA 3.4.5.6. A MAIN.ASM forráskódja A 3-2 példában bemutatott MAIN.ASM állomány dat- és veremszegmenseket az alkalmazás számára. a

helyettesíthető egy magasszintű nyelvben írt taszk fő moduljával, melyet a STARTUP.ASM-ban szereplő IRET utasítás hív meg. 3-2 példa: MAIN.ASM 1 NAME main_module DATA 23 DW 1000 4 DATA ENDS56 STACK STACKSEG 800 7 ; 8 CODE SEGMENT ER USE32 PUBLIC 9 main_start: 1112 nop 3 ; 114 CODE ENDS 15 ; 1

115

Page 114: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

0FFFF FFFFh

0FFFF 0000h

GDT_SCRATCH

START: [CSBASE+E

-Közeli ugrás a startra-TEMP_GDT felépítése-LGDT-Védett mód átkapcsolása

LIMIT

BASE

DS, ES=GDT[1] 4GB

IP]

TEMP_GDT

GDT [1]

GDT [0] 0

BASE=0, LIMIT=4G

3.15. ábra: A TEMP_GDT létrehozása és a védett módba való átkapcsolás (a forrásszöveg 162-172 sorai)

0FFFF FFFFh

0

GDT

TSS RAM

IDT RAM

TSS

IDT

-GDT, IDT, TSSROM-ból RAM-ba mozgatása

-Másolatok rögzítése-LTR

GDT RAMRAM_START

116

Page 115: Otodik Generacios Processzorok_pentium

Inicializálás és az üzemmódok közötti átkapcsolás

3.16. ábra: A GDT, IDT és TSS ROM-ból RAM-ba másolása (a forrásszöveg 196-261 sorai)

SS=TSS.SSESP=TSS.ESPPUSH TSS.EFLAGPUSH TSS.CSPUSH TSS.EIPES=TSS.ESDS=TSS.DSIRET

EIP

EFLAGS

ESP

ES

CS

SS

DS

TSS RAM

IDT RAM

GDT RAMRAM_START

GDT

IDT ALIAS

GDT ALIAS

0

3.17. ábra: Átkapcsolás a taszkra (a forrásszöveg 282 296 sorai) 3.4.5.7. Állományok támogatása A STARTUP.ASM és MAIN.ASM forráskód állományok lefordítását és a végső alkalmazás létrehozását 3-3 példában mutatott parancsköteg állomány segítségével lehet elvégezni.

117

Page 116: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

ASM386 STARTUP.ASM ASM386 MAIN.ASM BLD386 STARTUP.OBJ, MAIN.OBJ buildfile (EPROM.BLD) bootstrap (STARTUP) Bootload 3-3 példa: Az alkalmazás lefordítására és felépítésére szolgáló parancsköteg-állomány E példában a BLD386-nak több szerepe is van: • A szegmensek és táblázatok számára fizikai memóriát foglal le. • A bemeneti állományok és a felépítés módjának leírását tartalmazó

(úgynevezett "build") állomány alapján felépíti a táblázatokat. • Linkeli a tárgy állományokat és rendezi a referenciákat.

Bootolható és EPROM-ba programozható állományt generál. • A 3-4 példa a felépítés módjának leírását tartalmazó állományt mutatja be, melynek alapján a BLD386 a fentebb felsorolt műveletek végzi el. 3-4 példa: Build-állomány INIT_BLD_EXAMPLE; EGMENT S *SEGMENTS (DPL=0) , startup.startup_code (BASE=0FFFF0000h) ; TASK BOOT_TASK (OBJECT=startup, INITIAL, DPL=0, NOT INTENABLED) , PROTECTED_MODE_TASK (OBJECT=main_module, DPL=0,

118

Page 117: Otodik Generacios Processzorok_pentium

Inicializálás és az üzemmódok közötti átkapcsolás

NOT INTENABLED) ; TABLE GDT (

LACATION=GDT_EPROM

, main_module.stack )

OM

, ENTRY=( 10: (PROTECTED_MODE_TASK , startup.startup_code , startup.startup_data , main_module.data , main_module.code ), IDT ( LOCATION=IDT_EPROM ); MEMORY ( RESERVE=(0..3FFFH -- terület a romból másolt IDT, GDT, TSS számára. R , 60000h..0FFFEFFFFH) , RANGE=(ROM_AREA=ROM (0FFFF0000h..0FFFFFFFFh)) -- Eprom méret 64K , RANGE=(ROM_AREA=RAM (4000h..5FFFFh)) ); END

119

Page 118: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.5. A valós üzemmód felépítése, működése A Pentium processzor valós üzemmódban képes futtatni a 8086-os, 8088-as, 80186-os és a 80188-as processzorokra, illetve az Intel 286,

tel 386, Intel 486-os processzorok valós üzemmódjaira írt programokat.

megközelítőleg zonos a 8086, 8088, illetve 80188-as processzorokéval. A programozó ámár

melyek az operációs rendszer programozók valós üzemmódról lkotott képét hivatottak kibővíteni, mint például :

k lefordítása

lra forgatva képezi a 20 ites báziscímet. Az effektív (ofszet) cím négy 0-s bittel egészítődik ki a lső helyértékű bitek fölött, és a báziscímmel összeadódva alkotja a

t a 3.18. ábra szemlélteti. Minthogy fenn áll az tvitel (carry) lehetősége, a keletkezett lineáris címeknek 21 szignifiáns

In Ebben az üzemmódban a processzor felépítése asz a a valós üzemmódban dolgozó 32 bites proceszszor egy gyors 8086-os, vagy egy valós üzemmódú, bővített utasításkészletű Intel 286-os processzornak tűnhet. Ebben a részben bizonyos kiegészítő fogalmakról esik majd említés, aa • címek képzése • megszakítások és kivételek kezelése • valós üzemmódú kivételek. 3.5.1. Címe Valós üzemmódban a processzor a szelektorokat nem deszkriptorok mutatójaként értelmezi, hanem lineáris címeket állít elő, akárcsak egy 8086-os. A szelektort négy bittel babfelineáris címet, ahogyan azábitje lehet. Egy 8086-ra írt program a 0-tól 10FFEFh-ig terjedő (1 MByte és megközelítőleg 64 kByte-nyi) lineáris címtartomány bármely lineáris címét előállíthatja. ( Ugyanakkor megjegyzendő, hogy az Intel 486-os illetve Pentium processzorok esetében az A20M# jel valós üzemmódban felhasználható az A20-as címvonal maszkolására, utánozva ezáltal a 8086-os processzor 20 bitet átfogó viselkedését). Minthogy a lapozás valós üzemmódban nem megengedett, a lineáris cím fizikai címként kerül felhasználásra.

120

Page 119: Otodik Generacios Processzorok_pentium

A valós üzemmód felépítése, működése

0 0 0 00420

00000420

420

BÁZIS

OFSZET

+

=

16 bites Szegmens szelektor

16 bites effektív cím

0XXXX XXXX XXXX XXXX XXXXLINEÁRIS CÍM

3.18. ábra: Címek lefordítása

zakítások) jelentkeznek, ha egy effektív cím a 0-tól 5535-ig terjedő tartományon kívül esik.

3.5.2. Regiszterek é A valós üzemmódban érvényes regiszter szett magába foglalja az összes 8086-os processzor esetében definiált regisztert és ezenfelül, a 386-os processzornál és 387-es koproceszszornál bevezetett új regisztereket: FS, GS, nyomkövető regiszterek, kontroll regiszterek, teszt regiszterek és a lebegőpontos egység (NDP) regiszterei. Új utasítások jelentek meg, amelyek expliciten az FS illetve GS szegmensregiszterekkel hivatottak műveleteket végezni, ezenkívül használhatók az új szegmens-fölülíró prefixek is annak érdekében, hogy a címek kiszámításához az utasításokat késztetni lehessen az FS és GS regiszterek használatára.

Ellentétben a 8086-os és 286-os processzorokkal, akárcsak a 386-os illetve 486-os processzorok, a Pentium képes 32 bites effektív címek előállítására egy cím-fölülíró prefix segítségével. Ugyanakkor valós üzemmódban a 32 bites címek értéke nem haladhatja meg a 65535-öt anélkül, hogy egy kivételt ne okozna. A 286-os valós üzemmódjával való teljes kompatibilitás érdekében pszeudo védelmi hibák (12-es vagy 13-as, hibakód nélküli megs6

s utasítások

121

Page 120: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

Érvénytelen utasítás (invalid-opcode) kivételt előidéző utasítás ódok közé azon védett üzemmódú utasítások tartoznak, amelyek védett emm

e.

akítás agy kivétel azonosítóját, hogy megkapja a megfelelő indexet a

gsza

kódokat.

Az elsődleges különbség a valós üzemmódú 32 bites processzorok és a 8086-os megszakításkezelése között az, hogy a megszakításvektorok táblázatának helye és mérete az IDTR regiszter tartalmától függ.

küz ódú szegmens szelektorokat illetve szegmens deszkriptorokat mozgatnak vagy tesztelnek, mint például: a VERR, VERW, LAR, LSL, LTR, STR, LLDT, és az SLDT utasítások. A valós üzemmódban futó programok képesek kihasználni azon új, alkalmazás-orientált utasítások előnyeit, amelyek a 8086-os, 80186-os, 80188-as, 286-os, 386-os, 486-os illetve Pentium processzorok bevezetésével egészítették ki az architektúrát. Ellentétben a 8086-os és 286-os processzorokkal, hasonlóan a 386-os illetve 486-os processzorokhoz, a Pentium felkínálja egy operandus hossz fölülíró prefix használatának lehetőségét, amely lehetővé teszi 32 bites operandusok hozzáférését. Ennek ellenére ezen prefix használatától óvakodjunk, ha célunk a 8086-os vagy 286-os processzorokkal való kompatibilitás megőrzés 2.5.3. Megszakítás és kivétel kiszolgálás Valós üzemmódban a megszakítások és kivételek nagyjából úgy működnek, mint egy 8086-os processzoron. A megszakítások és kivételek megszakítás kezelő rutinokat hívnak meg egy megszakításvektor táblázaton keresztül. A processzor néggyel beszorozza a megszvme kításvektorok táblázatában. A megszakításvektorok táblázatának bejegyzései "far" (távoli) típusú mutatók a megszakítást vagy kivételt kiszolgáló procedúrák bemenőpontjaira. Egy megszakítás megjelenésekor a processzor eltárolja a CS, illetve IP regiszterek aktuális értékét a verembe (push), letiltja a megszakításokat, törli a TF flaget és átadja a vezérlést a megszakítás-vektorok táblázatából kiolvasott címre. A kiszolgáló rutin végén egy RET utasítás visszapörgeti az előbbi lépéseket, mielőtt a megszakított eljárásnak visszaadná a vezérlést. A kivételek valós üzemmódban nem szolgáltatnak hiba

122

Page 121: Otodik Generacios Processzorok_pentium

A valós üzemmód felépítése, működése

Általános esetben ez nem nyilvánvaló a programozó számára, mert egy reset inicializálást követően az IDTR regiszterben a bázis cím 0 és a határ értéke 3FF, ami kompatibilis a 8086-os processzorral. Ugyanakkor, valós üzemmódban a LIDT utasítást használhatjuk az IDTR regiszterbeli báziscím illetve határ (limit) értékeinek megváltoztatására. További részleteket az IDTR regiszterről, valamint a LIDT és SIDT utasításokról az előbbi rész szolgáltat. Ha egy befutó megszakítás táblázatbeli bemenőpontja meghaladja az IDTR regiszter által tárolt határ értékét, egy kettős hiba kivételt (double-fault exception) eredményez. 3.5.4. Valós üzemmódú kivételek

A processzor jelez attól függően, ogy valós vagy védezemmódú kizárásokat részletezi.

Meghatározás Vekto A kivétel forrása Hiba-

némely kivételt eltérő módon

tt üzemmódban dolgozik-e. A 3.19. ábra a valós hü

r mutató pointer vissza-térés után

Osztási hiba 0 DIV és IDIV utasítások van Nyomkövetés 1 Akármi (1.megj) NMI 2 Nem maszkolható megszakítás van Töréspont 3 INT utasítás nincs Túlcsordulás 4 INTO utasítás nincs Határ ellenörzés 5 BOUND utasítás van Hibás műveleti kód 6 Fenntartott műveletkódok és van

helytelen LOCK prefix használat

Eszköz nem elérhető 7 ESC vagy WAIT utasítások van Dupla hiba 8 Interrupt tábla túl kicsi, hiba

előfordulása egy másik hiba kezelése közben

van

Fenntartva 9

123

Page 122: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

Érvénytelen TSS (3.megjegyzés)

10 JMP, CALL, IRET utasítások, megszakításik és kivételek

van

Szegmens nincs 11 Akármilyen művelet, amelyik jelen (3.megjegyzés) cseréli a szegmenseket

van

Stack kivétel 12 Stack ofszet túl nagy van CS, DS, ES, FG, GS szegmens túlfutás

13 Ofszet túlnyúlik a 64K-s határon, kód végrehajtási kísérlet a CS határán túl

van

Laphiba (3.megjegyzés)

14 Akármilyen művelet, amelyik hivatkozik a memóriára

van

Fenntartva 15 van Lebegőpontos hiba 16 ESC vagy WAIT utasítások van

(2.megj) Illeszkedés ellenörzés (3.megjegyzés)

17 Akármilyen adat hivatkozás nincs

Fenntartva 18-31 Software megszakítás

0-255 INT n utasítások nincs

Maszkolható megszakítás

32-255 van

3.19. ábra: Kivételek és megszakítások

Megjegyzések: 1. Egyes nyomkövető kivételek a hibát okozó utasításra mutatnak,

mások az azt követő utasításra. A kivétel kezelő tesztelheti a DR6-os regiszter tartalmát, hogy megállapítsa, melyik helyzet áll fennt.

2. A lebegőpontos hibákat az első olyan ESC illetve WAIT utasítás

alatt jelenti, amely a kivételt előidéző ESC utasítást követi. 3. A 10-es, 11-es, 14-es és 17-es kivételek valós üzemmódban nem

jelentkeznek, viszont virtuális 8086-os módban előfordulhatnak.

124

Page 123: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

3.6. A Védett üzemmód felépítése, működése

t inkább a későbbi, védett zemmódról és rendszer-programozásról szóló információk előrevetítése.

A processzor architektúrális tulajdonságainak jelentős hányadát kizárólag rendszer programozók veszik igénybe. Ebben a részben ezen tulajdonságok áttekintésére kerül sor. A felhasználói programok írói számára szükségesnek bizonyulhat e fejezet átolvasása, csakúgy mint az ezt követő fejezeteké, amelyekben a fenntemlített tulajdonságok felhasználási módjai kerülnek bemutatásra, annak érdekében, hogy megérthessék a rendszer programozók rendelkezésére álló hardware kínálta lehetőségeket, amelyekkel az alkalmazói programok számára megbízható és biztonságos környezeteket (environment) hozhatnak létre. Ezenkívül, a rendszerszinti architektúra hatékony hibaelhárító (debugging) lehetőségeket is támogat, amelyeket az alkalmazói programírók valószínűleg szívesen beépítenének fejlesztés alatt álló programjaikba. Az architektúra rendszerszinti lehetőségei közé tartoznak a következők:

memóriaszervezés • védelem • multitaszking • kivételek és megszakítások • ki- és beviteli műveletek (Input/Output) • inicializálás és üzemmódváltás • a lebegőpontos egység (FPU) menedzsmentje • hibaelhárítás, nyomkövetés • cache szervezés • multiprocesszálás

A felsorolt tulajdonságokat regiszterek és utasítások támogatják, ezek sorra bemutatásra kerülnek a következő részben. A jelen rész célja nem annyira a részletes bemutatásuk, minüValahányszor egy regiszterről illetve utasításról kerül említés, azt vagy magyarázat kíséri, vagy utalás egy későbbi fejezetre.

125

Page 124: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.6.1. Memóriaszervező regiszterek. A processzor négy regisztere határozza meg azon adatstruktúrák helyét, amelyek a szegmentált memória szervezését szabályozzák, amint azt a 3.20. ábra mutatja. Speciális utasítások állnak rendelkezésre ezen regiszterek feltöltésére és elmentésére. A GDTR és IDTR regiszterek feltölthetők bizonyos utasításokkal, amelyek a memóriából egy 6-Byte hosszúságú adatblokkot vesznek ki. AZ LDTR és TR regisztereket olyan

tasításokkal tölthetjük fel, amelyek operandusai 16 bites szegmens uszelektorok. A regiszterek fennmaradó Byte-jait a processzor automatikusan feltölti az operandus által kijelölt deszkriptorokból.

SZELEKTOR

SZELEKTORLDTR

TR015

RENDSZER SZEGMENSREGISZTEREK DESZKRIPTOR REGISZTEREK (A

GDTR

IDTR

0151647 32 BIT LINEÁRIS BÁZISCÍM

RENDSZER C

32 BIT LINEÁRIS BÁZISCÍM 32 BIT SZEGMENS HATÁR JELLEMZŐK

UTÓMATIKUSAN TÖLTÕDNEK)

ÍMZÕ REGISZTEREK

3.20. ábra: Memória kezelő regiszterek Az operációs rendszerek többsége levédi a felhasználói program elől azokat az utasításokat, amelyek a memóriaszervező regisztereket töltik fel (bár elképzelhető olyan rendszer is, amelyben egyáltalán nincs védelem). GDTR Global Descriptor Table Register - globális deszkriptortáblázat regiszter A GDTR regiszter tartalmazza a globális deszkriptortáblázat (GDT) 32 bites báziscímét és a 16 bites határt (limit). Valahányszor hivatkozás történik egy memóriában levő adatra, egy szegmensszelektort használunk egy GDT- vagy LDT-beli szegmensdeszkriptor megkeresésére. A szegmensdeszkriptor a szegmens báziscímét

rtalmazza. ta

126

Page 125: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

DTR

T) 32 ites báziscímét, a 32 bites szegmens határt, a deszkriptor attribútumokat

és a 16 bites szegmensszelektorát. Az LDT-t tartalmazó szegmensnek van gy szegmensdeszkriptora a GDT-ben. A GDT-nek nincs

szegmensszelektora. Valahányszor hivatkozás történik egy memóriában vő adatra, egy szegmensszelektort használunk egy GDT- vagy LDT-beli egmensdeszkriptor megkeresésére. A szegmensdeszkriptor a szegmens

TR I

R Task Register - taszkregiszter Ez a regiszter tartalmazza az éppenbites báziscímét, a 32 bites szegmens hatáés a 16 bites szegmensszelektorát. Egy Gdeszkriptorra (TSS) mutat. Lásd: multitaszk 3.6.2. Rendszer utasítások

re ióka

2. deszkriptortáblázatok címzése 3. multitaszking 4. lebegőpontos műveletek

L Local Descriptor Table Register - helyi deszkriptortáblázat regiszter Ez a regiszter tartalmazza a helyi deszriptortáblázat (LDb

e

leszbáziscímét tartalmazza. ID nterrupt Descriptor Table Register - megsz.-dt. reg. Az IDTR regiszter tartalmazza a megszakítás deszkriptortáblázat (IDT) 32 bites báziscímét és a 16 bites határát (limit). Valahányszor befut egy megszakítás, a megszakításvektor e táblázaton belüli indexként meghatároz egy kapudeszkriptort. A kapudeszkriptor egy mutatót tartalmaz, amelyet a megszakítás kiszolgáló rutin elindítására alkalmaznak. T

végrehajtás alatt álló taszk 32 rt, a deszkriptor attribútumokat DT-beli taszk-állapotszegmens ing.

A dszer utasítások a következő funkc t látják el:

1. mutatók paraméterellenőrzése

127

Page 126: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

5. ki- és beviteli műveletek 6. megszakítás-vezérlés 7. nyomkövetés, hibakeresés 8. cache-szervezés 9.

anakkor nem asználható fel a PE bit törlésére sem.

leállítja a processzort, amíg egy ngedélyezett megszakítás vagy egy RESET jel nem érkezik be.

ardware halt üzemmódbeli válaszával.

iztonságos ommunikáció érdekében.

Minden egyes utasításról részletes információt kaphatunk a könyv

második kötetéböl.

rendszervezérlés Az SMSW és az LMSW utasításokat a 16 bites 286-os proceszszorral való kompatibilitás érdekében vezették be. A 32 bites processzorokra, mint például a Pentiumra írt programokban nem ajánlott a használatuk. Helyette inkább a vezérlőregiszterekhez kell a MOV utasítás különböző formáival hozzáférni. Az LMSW utasítás nem befolyásolja a PG, CD, NW, AM, WP, NE vagy ET biteket, ugyh A HLT utasítás mindaddige(jegyezzük meg, hogy az NMI illetve SMI megszakítások mindíg engedélyezettek.) A processzor egy speciális buszciklust generál a halt üzemmódra való váltás jelzésére. A hardware sokféleképpen válaszolhat erre a jelre. A gép elülső paneljén például bekapcsolhat egy fényjelzést, esetleg generálhat egy diagnosztizáló NMI-t, vagy akár inicializálást (reset) is kezdeményezhet. A software íróknak tisztában kell lenniük a h A LOCK utasításprefix célja, hogy lehetővé tegye egy védett olvasás-módosítás-írás művelet kezdeményezését egy memóriában lévő operandus értékének módosításakor. A LOCK# jel aktiválódik, és a processzor a levédett ("lezárt") utasítás alatt nem válaszol a buszvezérlés átadását célzó kérésekre. Ezt a mechanizmust multiprocesszoros rendszerekben használják a proceszszorok közti bk

128

Page 127: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

3.6

A memóriaszervezés egy olyan hardware mechanizmus, amely

kör z esetben, ha több program fut párhuzamosan, mindegyiknek független

címellea tö szeegyköregy jedt ímtartományok szimulálhatók. Az operációs rendszerek tervezői

típusait tasítás elérése, veremre vonatkozó push vagy pop, olvasási vagy írási űvele

kben kihasználjuk, ugyanis

.3. Védett üzemmódú memóriaszervezés

lehetővé teszi az operációs rendszerek számára, hogy egy leegyszerűsített

nyezetet hozzanak létre a futtatott programok részére. Például abbanacímtartományt kell biztosítani. Ha mindannyian ugyanazon

tartományon osztoznának, egyenként kéne nehézkes és időpazarló nőrző műveleteket elvégezniük, hogy elkerülhessük az összeütközést bbi programmal.

A memóriaszervezés szegmentálásból illetve lapozásból áll. A gmentálás célja, hogy minden egyes program részére számos, mástól független és védett címtartományt biztosítson. A lapozás olyan nyezetek kialakítását támogatja, amelyekben egy kis méretű RAM és bizonyos mennyiségű lemezterületet felhasználásával kiter

cválaszthatnak a két mechanizmus közül. Ha egyszerre több program is szalad, az említett két eljárás közül bármelyiket felhasználhatjuk arra, hogy egy programot megvédjünk más programok beavatkozásától. A szegmentálás megengedi a teljesen strukturálatlan, egyszerű memória modellek (mint amilyen a 8 bites processzoroké), vagy az erőteljesen strukturált, címfordításos illetve védelemmel ellátott modellek használatát. A memóriaszervezés a "szegmenseknek" nevezett egységekre vonatkozik. Minden egyes szegmens egy önálló, védelemmel ellátott címtartomány. A szegmensekhez való hozzáférést olyan adatok vezérlik, amelyek meghatározzák a szegmens hosszát, a hozzáféréshez szükséges privilégiumszintet, a szegmensre történő memóriahivatkozások (um tek, stb.), illetve azt, hogy a szegmens a memóriában található-e. A szegmentálást a memória hozzáférések ellenőrzésére használják, ami a fejlesztés alatt álló program hibáinak felderítésében és a "végtermék" megbízhatóságának növelésében igencsak hasznosnak bizonyulhat. A tárgynyelvi modulok összekapcsolásának (link) leegyszerűsítésére is használatos. Nincs értelme helyfüggetlen kódot írni, ha a szegmentáló mechanizmust teljes mérté

129

Page 128: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

minden egyes memóriahivatkozást a modul kód, illetve datszegmensének báziscíméhez viszonyíthatunk. A szegmentálást

are modulok létrehozására is lhasználhatjuk, amelyekben a fix címek (abban az értelemben fixek,

int például a 8080-as processzor, amelynél a logikai ím egyben fizikai cím is. A 32 bites processzorok védett üzemmódban is

működtethetők ezzel a memória modellel, ha a szegmenseket ugyanabba a címtartományba képezzük le (mapping), a lapozást pedig letiltjuk. A software-ek meghibásodásának igen gyakori oka az, hogy a verem "belenő" az utasításkódba vagy a program adataiba. Ennek megelőzésére biztos módszer a szegmentálás. A vermet a kód vagy adat részére fenntartott címtartományon kívül eső tartományba tehetjük. Így a verem címek mindíg a veremszegmensbeli, az adatcímek pedig az adatszegmensbeli memóriarészre vonatkoznának. A verem-szegmensnek hardware által meghatározott maximális hossza van. Bármely olyan próbálkozás, amely a verem maximális méretének túlhaladását célozná, kivételt generálna. Egy komplex programrendszer teljes mértékben kihasználhatja a szegmentálást. Például egy olyan operációs rendszer, amelyben a

rogramok valós időben osztják meg az adatokat, precízen ellenőrizheti a ozzáférést ezekhe k" (bugs), mint a rogram által végrehajtott szabálytalan hozzáféréssel generált kivételek

min egylap rdítja a lineáris címet

augyanakkor ROM-ra alapuló softwfehogy nem lehet őket megváltoztatni) egy szegmens báziscíméhez viszonyított ofszetek. Különböző rendszereknek eltérő fizikai címen lehetnek a ROM-moduljai, mivelhogy a szegmentáló mechanizmus minden egyes memóriahivatkozást a megfelelő helyre irányít. Egy egyszerű memória felépítés esetén minden cím ugyanarra a címtartományra hivatkozik. Ezt a memória modellt használják a 8 bites mikroprocesszorok, mc

ph z az adatokhoz. A "program-gubancopjelentkeznek. Ez hasznos lehet a programírás stádiumában, mint hibakereső segédlet, illetve a végfelhasználónak leszállított rendszerben,

t a hiba helyreállító procedúrák vezérlője.

A szegmentáló hardware egy szegmentált (logikai) címet fordít le folytonos, nem szegmentált címtartományra ún. "lineáris" címre. Ha a ozás megengedett, a lapozó mechanizmus lefo

130

Page 129: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

fizikai címre. Ha a lapozás nem engedélyezett, a lineáris cím fizikai

címlap méméLaphozőke

alklapme ezett kivétel

isszaállítja a processzor regisztereinek tartalmát olyan értékekre, amvégrehajtását. Ez a speciális eljárás megengedi az utasítás újraindítását, azaz képesíti az operációs rendszert arra, hogy kiolvassa a lapot a lemleképezéseit, és újraindítsa a programot. A program számára ez a

lyamat áttetsző.

n lapozható (demand-paged) irtuális memóriát, engedélyezett a lapozás. A felhasználói software

alk

címként kerül felhasználásra. A fizikai cím a processzorból kijövő buszra kerül, engedélyezett lapozás esetén esetleg a háttértárolóról

ozódik be.

A lapozás mechanizmust arra használható, hogy egy jelentős retű, nem szegmentált címtartományt lehessen szimulálni egy kis retű, fragmentált címtartomány és némi lemezterület segítségével. ozással a szabad memóriaterületnél nagyobb adatstruktúrákhoz lehet záférni, azáltal, hogy részint a memóriaban, részint a lemezen tároljuk t.

A lapozást 4 kByte-os, lapoknak nevezett egységekre

almazzák. Ha egy program megpróbál hozzáférni egy lemezen levő hoz, különleges eljárással szakítódik meg. Más kivételekkel és gszakításokkal ellentétben, a címek lefordításakor keletk

velyek lehetővé teszik a kivételt előidéző utasítás megismételt

ezről, felfrissítse a lap lineáris címeinek fizikai címekre való

fo A lapozás opcionális. Ha egy operációs rendszer soha nem engedélyezi a lapozás mechanizmusát, a lineáris címek fizikai címekként kerülnek felhasználásra. Ez akkor volna lehetséges, ha egy 16 bites processzorra írt alkalmazást 32 bites processzorra adaptálunk. Egy 16 bites processzorra írt operációs rendszer nem alkalmaz lapozást, mivel a címtartománya annyira rövid (64 kByte), hogy sokkal inkább gazdaságosabb egész szegmenseket átcserélni (swap) a RAM és a lemez között, mint egyedi lapokat. Az olyan operációs rendszerekben mint az UNIX, amelyek támogatják az igényeknek megfelelőevrészére a lapozás áttetsző, tehát a 16 bites processzorokra írt

almazásokat támogató operációs rendszer képes futtatni azokat a

131

Page 130: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

lapnem moknak. Szegmentálást használó

rogramokat azokkal a szegmensekkel kötelező futtatni, amelyek

3.6 telj ritériuma alapján választják meg. Például, ha egy operációs

ndszerben több program osztja meg valós időben adatait, maximális telja memszüksé A másik oldalról viszont, egy olyan operációs rendszer, amely csaszegmeszegmemegnő ivel a

egmensregiszterek tartalmát nem kell többé elmenteni vagy

Pélpro 3.6 sze zve. Egy

egmensen belüli ofszet vonatkozhat úgy kód, mint adat területre. Ez a

ozás engedélyezése mellett is. A lapozással elletétben, a szegmentálás áttetsző a felhasználói progra

phasználatára eredetileg meg voltak tervezve.

.3.1 A szegmentálási modell kiválasztása

A memória szegmentálásának modelljét a megbízhatóság és esítmény k

reesítményt egy olyan modell nyújthatna, amely hardware-ileg ellenőrzi

ória hivatkozásokat. Ehhez egy multiszegmens modellre lenne g.

k egyetlen programot futtat, magasabb teljesítményt érne el egy ntálás nélküli, ún. "sík" modellel. A "far" típusú mutatók és a ns-felülíró prefixek kiküszöbölésével lecsökken a kód hossza és

a végrehajtás sebessége. A kontextusváltás is gyorsabb, mszvisszaállítani.

A szegmentálás egyes előnyeit a lapozás is képes biztosítani. dául az adatok megoszthatók (share), ugyanazon lapok minden egyes gram címtartományba való betérképezésével.

.3.1.1. A sík modell

A legegyszerűbb modell a sík modell. Ebben a modellben minden gmens a teljes fizikai címtartományra van rátérképe

szmodell a lehető legtökéletesebben eltörli a szegmentálás mechanizmusát, akár a rendszerprogramozó, akár a felhasználói programiró szemszögéből látott architektúrából. E megoldás lehetséges volna egy olyan programozási környezet esetében, mint az UNIX, amely támogatja a lapozást, ellenben a szegmentálást nem.

132

Page 131: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

Egy szegmenst egy szegmensdeszkriptor határoz meg. A sík modellben legalább két szegmensdeszkriptort kell létrehozni: egyet a kód hivatkozásoknak, egy másikat pedig az adat hivatkozásoknak. Mindkét deszkriptornak ugyanaz kell legyen a báziscíme. Valahányszor memóriahozzáférés történik, a szegmens regiszterek egyikét a szegmensdeszkriptor kiválasztására használják. A szegmens deszkriptor szolgáltatja a szegmens báziscímét és a határ (limit) értékét, valamint a hozzáférést ellenörző információkat. (Lásd a 3.21 ábrát) Általában a ROM-ot a fizikai címtartomány tetejére helyezik, mivel a processzor az FFFF_FFF0H címen kezdi végrehajtani az utasításokat. A RAM a címtartomány alján foglal helyet, ugyanis a reset után a DS adatszegmens báziscíme 0. A sík modellben minden deszkriptor báziscíme 0, és a szegmenshatár értéke 4 GByte. A szegmenshatárt 4 GByte-ra állítva a szegmentáló mechanizmust meggátoljuk abban, hogy kivételt generáljon a szegmenshatáron kívülre eső memória hivatkozásokkor. Ugyanakkor még fennáll annak lehetősége, hogy a lapozó illetve szegmentáló védelmi mechanizmusok kivételeket generáljanak, de ezeket is ki lehet iktatni a memória modellből.

CS

SS

DS

ES

FS

GS

HOZZÁFÉRÉS HATÁR

BÁZISCÍM

EPROM

DRAM

4G

0

FIZIKAIKÓD ÉS ADATSZEGMENSDESZKRIPTOR

SZEGMENSREGISZTEREK MEMÓRIA

3.21. ábra: Sík modell

133

Page 132: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.6.3.1.2. Védett sík modell

A vé t dell ít az egyszerű sík modellre, azzal a kü bsé el ho szeg atár akkorára vannak be tva m k tulaj pen gy általános védelm ib kivét erálne implem á ória területhez hozzáférni. Ez a lehetőség olyan op ciós r d ere en nálha a lapozás mechanizmu v k csolv E modellben a szegm har at ab , h y e l ző m arek en rekeszek cím h ségének következm Például, ha roc sz ho ne a RE szciklus tudomásulvételezésére és befejezésére használatos), a buszciklus nem fej dik be, és a program vé ása

B e n ro volna ezeket a memória cellákat m ímezni, mégis adódhat ilyen nemű kísérlet, program ény en. s ellenőrzése nélkül m tö n , gy eg anc programot. Hardware-es ellenőrzés esetén a progra tt módon "omlanak ös ". en r gy iagn üzen illetve he eáll e rá a ecov oced A . ra gy v sík a szegmensdeszkriptorok úgy voltak beállítva, hogy csak a fizikailag létező me ória tartományát takarják. A fizika DRAM rés t eg kó i tv datsz ns ta ziscíme és zeg nshatára opcionálisan beállítható úgy, hogy a DRAM tartomán oz e yezz záfé tárát az EP M a R reteinek összeg óriába

képezett I/O tartományt is haszn ő lehet özvetlenül a D

det sík mo hasonl

lön gg , gy a mensh értékek csak állí , a ek ora a donkép i memória címtartománya. E

megkísérelünk i h a el gen ódik valahányszor m erá

enten

lt msz

emkb hasz tó, amelyekben

s ki an ap a.

entálóemóri

dware meggátolja a programokeszeket címezzenek meg. Ezban og n m éte

ezor

etőz

ényei hardware függők. ADY# jel (amely egy bu a p es m érkezik be

ező grehajt leáll.

ár egy tle p gramnak sem megengedett egc

ozási hibák eredm eképp A címek hardware-eeg rté het ho y gub hirtelen leállíthatja a

mok ellenőrzösze Ily ko e d ózis etet lehet megjeleníteni,lyr ító ljá sok t (r ery pr ure) lehet kezdeményezni.

3 22. áb e édett modellre ad példát. Ebben

m i memóriának EPROM észé

sy me

d- lle e a egme karja. A kódszegmens bá

yh és

is D

engAM

dél mé

en hoz rést. Az adatszegmens haére kell beállítani. Ha memálunk, ez megcímezhet

ROlek RAM terület határán túl.

134

Page 133: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

CS

SS

DS

ES

FS

GS

HOZZÁFÉRÉS HATÁR

BÁZISCÍM

EPROM

DRAM

4G

0

FIZIKAIDESZKRIPTOROK

SZEGMENSREGISZTEREK MEMÓRIA

SZEGMENS

MEMÓRIA I/O

HOZZÁFÉRÉS HATÁR

BÁZISCÍM

3.22. ábra: Védett sík modell 3.6.3.1.3. Multiszegmens modell

A legbonyolultabb modell a multiszegmens modell. Itt a gmentáló mechanizmus teljeskörű lehetőségeit használjuk. Minden es programnak megvan a saját szegmensdeszkriptor táblázata és a t szegmensei. A szegmensek lehetnek teljes mértékben a program

agántulajdonában", vagy bizonyos más programkal lehetnek gosztva. A programoknak bizonyos szegmensekhez való hozzáférése enként ellenőrizhető.

Maximum hat sze

szeegysajá"mmeegy

gmens állhat rendelkezésre azonnali használatra. Ezek azok a szegmensek, amelyeknek a szegmens-szelektorai a szegmensregiszterekbe vannak betöltve. Más szegmensekhez a szegmens szelektoraik szegmens regiszterbe való betöltésével lehet hozzáférni. (Lásd a 3.23 ábrát). Minden egyes szegmens egy különálló címtartomány. Mindamellett, hogy megengedett a fizikai memória egymással szomszédos blokkjaiba betölteni őket, a szegmentáló mechanizmus meggátolja, hogy egy szegmens tartalmához hozzáférhessünk egy másik szegmens határát átlépő olvasással. Minden memóriát érintő műveletnél ellenőrizve van annak a szegmensnek a határa (limit), amelyet a művelet

135

Page 134: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

használ. A szegmens határát túllépő memóriacímzési próbálkozás általános védelmi hiba kivételt eredményez. A szegmentáló mechanizmus csak a szegmens deszkriptorban

eghatározott címtartomány betartását követeli meg. Az operációs

lefocím sek használata. Például, egy rendszer

OM-jában tárolva lehet kód is, adat is. Kódszegmens deszkriptort

ada

mrendszer feladata minden egyes szegmensnek különálló címtartományokat

glalni. Elképzelhető olyan eset is, amelyben szükséges lehet közös tartományt megosztó szegmen

Rhasználunk, ha a ROM-ban utasításelérést végzünk. Ha a ROM-ot

tként olvassuk, adatszegmens deszkriptort használunk.

CS

SS

DS

ES

FS

GS

FIZIKAIDESZKRIPTOROK

SZEGMENSEGISZTEREK MEMÓRIA

SZEGMENSR

HOZZÁFÉRÉS HATÁR

BÁZISCÍM

HOZZÁFÉRÉS HATÁR

BÁZISCÍM

HOZZÁFÉRÉS HATÁR

BÁZISCÍM

HOZZÁFÉRÉS HATÁR

BÁZISCÍM

HOZZÁFÉRÉS HATÁR

BÁZISCÍM

HOZZÁFÉRÉS HATÁR

BÁZISCÍM

HOZZÁFÉRÉS HATÁR

BÁZISCÍM

HOZZÁFÉRÉS HATÁR

BÁZISCÍM

HOZZÁFÉRÉS HATÁR

BÁZISCÍM

HOZZÁFÉRÉS HATÁR

BÁZISCÍM

3.23. ábra: Multiszegmens modell

136

Page 135: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

3.6.3.

Egy logikai cím a szegmenst jelölő 16 bites szegmens 2 bites ofszetből áll. A

gikai címek a hozzáférési jog és a tartomány szempontjából kerülnek a teszteknek, a logikai címeket a

rocesszor lineáris címekre fordítja le, az ofszetet hozzáadva a szegmens báziscí h rból származik, ami egy memór a ns méretéről, helyzetéről és

ozzáférési adatairól szolgáltat információt. A szegmensdeszkriptort két

ns áll rendelkezésére. Ez az hat szegmens, amelyeknek a szegmens szelektora fel van töltve a

processzorba. A szegmens szelektor a logikai cím megfelelő lineáris címmé alakítására használatos információkat tartalmazza. Minden memória hivatkozás típusnak (kód tartományra, verem tartományra és adat tartományra), külön szegmensregisztere van a processzorban. Ezek az aktuálisan használat alatt álló szegmensek szegmensszelektorjait tartalmazzák. Más szegmensekhez való hozzáférés szükségessé teszi a szegmensregiszterek feltöltését a MOV utasítás különböző formáinak segítségével. Legtöbb négy adat tartományt lehet egyszerre elérni, ami tehát összesen hat szegmensregisztert jelent. Mikor egy szegmensszelektor betöltésre kerül, a báziscím, a szegmenshatár és a hozzáférési jogot ellenörző információk is betöltődnek a szegmensregiszterbe. A processzor addig nem nyúl a memóriában levő deszkriptor táblázathoz, ameddig egy új szegmens szelektor nem kerül betöltésre. A processzorban eltárolt információk

2. Szegmensfordítás szelektorból, valamint a szegmensen belüli 3loellenőrzés alá. Ha megfelel ezeknekp

mé ez. A báziscím a szegmensdeszkriptoiáb n tárolt adatstruktúra, és a szegme

htáblázat valamelyikéből kaphatjuk meg. Vagy a globális deszkriptor táblázatból (GDT), vagy a lokális deszkriptor táblázatból (LDT). A rendszerbeli összes programnak egyetlen GDT táblázata van, és egy-egy különálló LDT táblázata minden egyes futó programnak. Ha az operációs rendszer megengedi, különböző programok osztozhatnak ugyanazon LDT-n. A rendszert úgy is konfigurálhatjuk, hogy egy LDT táblázatot se tartalmazzon. Ebben az esetben minden program a GDT-t fogja használni. Minden logikai címhez egy szegmens van rendelve (még akkor is, ha az operációs rendszer minden szegmenst ugyanabba a címtartományba képez le). Annak ellenére, hogy egy programnak sok ezer szegmense lehet, azonnali alkalmazásra csak hat szegmea

137

Page 136: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

lehetővé teszik számára a címek lefordítását anélkül, hogy plusz buszciklusokra lenne szüksége. Az olyan rendszerekben, amelyekben több processzornak van hozzáférési lehetősége ugyanazon deszkriptortáblázatokhoz, a software köteles a szegmensregisztereket újratölteni, valahányszor a deszkriptor táblázatokat módosítástja. Ha ez nem így történik, fennáll az a lehetőség, hogy egy szegmens regiszterben eltárolt régi szegmens deszkriptor kerül alkalmazásra, miután a memóriarezidens változata már megváltozott. A szegmensszelektor a deszkriptortáblázatok egyikének egy 13 bites indexét tartalmazza. Az index, egy nyolcas skálatényezővel való beszorzás után (ennyi Byte található egy szegmensdeszkriptorban) a deszkriptor táblázat 32 bites báziscímével adódik össze. A báziscím vagy a globális deszkriptortáblázat regiszterből (GDTR), vagy a lokális deszkriptortáblázat regiszterből (LDTR) származik. Ezek a regiszterek tartalmazzák a deszkriptortáblázatok kezdetének lineáris címét. Amint azt 3.24. ábra is mutatja, a szegmensszelektor egyik bitje határozza meg,

hogy a processzor ma

elyik táblázatot használja.

GLOBÁLISDESZKRIPTOR

TÁBLÁZATDE

LOKÁLISSZKRIPTOR

TÁBLÁZAT

TI

TI=0 TI=1

HATÁRBÁZISCÍM

HATÁRBÁZISCÍM

SZELEKTOR

GDTR LDTR

SZEGMENS

SZELEKTOR

138

Page 137: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

3.24. ábra: TI BIT - A deszkriptor tábla kiválasztása A lefordított cím a lineáris cím, amint az a 3.25 ábrán is látható.

Ha nem haszná Ha a lapozás geng

lunk lapozást, ez egyben a fizikai cím is.

me edett, egy második szintű címfordítás adja meg a fizikai címet. Ezzel a típusú fordítással a fejezet későbbi részében foglalkozunk.

0015 31Logokai cím

Deszkriptor tábla

Szelektor Ofszet

031Lineáris cím

3.25. ábra: Szegmens fordítás

3.6.3.2.1. Szegmensregiszterek

Szegmensdeszkriptor

Bármely memóriahozzáférés típushoz egy szegmensregiszter van mre, illetve adatra vonatkozó hivatkozások

a által kijelölt szegmenseket ezik

rendelve. A kódra, vere

indegyike a szegmensregisztereik tartalmmcím meg. További szegmensek tehetők elérhetővé, ha a program végrehajtása közben a szegmens-szelektorjaikat betöltjük ezekbe a regiszterbe. A 3.26 ábrának megfelelően, minden egyes regiszternek van egy "látható" és egy "láthatatlan" része. A szegmensregiszterek látható részének feltöltésére a MOV utasítás különböző formái ismeretesek. A láthatalan részt a processzor tölti fel.

139

Page 138: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

Azok a műveletek, amelyek ezeket a regisztereket feltöltik, utasítások a felhasználói programok számára. Két fajta ilyen utasítás létezik: 1. közvetlen betöltő utasítások, mint amilyenek a MOV, POP, LDS, LES, LSS, LGS és LFS utasítások. Ezek

az utasítások expliciten a szegmensregiszterekre vonatkoznak. 2. közvetett betöltő utasítások, mint amilyenek a CALL és JMP

utasítások "far" változatai. Ezek az utasítások a CS regiszter tartalmát működésük implicit részeként módosítják.

Amikor a fenti utasítások egyike végrehajtódik, egy szegmensszelektor betöltődik a szegmensregiszter látható részébe. A processzor automatikusan feltölti a szegm

Látható rész Láthatatlan rész

Szelektor Bázis cím, határ, stb. CSSSDSESFSGS

3.26. ábra: Szegmens regiszterek

ens regiszter láthatatlan részét a eszkriptor táblázatból kiolvasott információkkal (például a áziscímmel). Minthogy az utasítások legnagyobb része azokra a

elyek szelektorai már be vannak töltve a egmens regiszterekbe, a processzor teljesítmény veszteség nélkül képes

nsszelektorai a szegmensregisztereket foglalják el egy adott pillanatban. Ez azt jelenti, tehát, hogy a program a MOV utasítás különböző formáinak segítségével lecserélheti ezen regiszterek tartalmát, mikor új szegmensre van szüksége. Egy szegmensszelektor meghatároz egy szegmens deszkriptort, egy deszkriptortáblázat és a táblázaton belüli deszkriptor megjelölésével.

dbszegmensekre vonatkozik, amsza logikai cím ofszetjét a szegmens báziscímével összeadni. 3.6.3.2.2. Szegmensszelektorok A szegmensszelektor egy szegmens deszkriptornak nevezett, szegmens definiáló információra mutat. Egy programnak lehet több szegmense azon a haton kívül, amelyek szegme

140

Page 139: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

A felhasználói programok számára a szegmens szelektorok egy pointer áltozó részeként jelennek meg, de a szelektorok értékeit általában a

g aders) határozzák meg, illetve módosítják, és nem a felhasználói

programok. A 3.27. ábra egy szelektor formátumát mutatja be.

: 8192 deszkriptor közül kiválaszt egyet a

atból. A

Táblázat mutató bit: Meghatározza, hogy melyik táblázat kerül alkalmazásra. 0-ás bit a

lis LDT-t szelektálja.

génye

inditványozza egy lemezen tárolt

vkapcsolóprogram (link editor) vagy kapcsoló töltőprogramok (linkinlo

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

IN

Index

DEX TI RPL deszkriptortábláz

processzor beszorozza az index értékét egy 8-as skálatényezővel (egy szegmensdeszkriptorban ennyi Byte van) és az eredményt összeadja a deszkriptortáblázat báziscímével (amelyet a GDTR vagy az LDTR regiszter tárol).

Tábla kijelölő0=GDT1=LDT Privilégium szint kérő

00 = Legmagasabb szint11 = Legalacsonyabb szint

3.27. ábra: Szegmens szelektor

GDT-t, 1-es bit az aktuá Í lt privilegizálási szint (RPL): Ha ez a mező egy nagyobb értékű

privilégium szintet jelöl, mint a program szintje (tehát kevésbé privilegizált), akkor egyszerűen felülírja a program privilegium szintjét minden olyan hozzáférés esetén, amely ezt a szelektort használja. Ha egy program egy kevésbé privilegizált szegmensszelektort alkalmaz, a memória hozzáférések az alacsonyabb privilegizálási szinten mennek végbe. Ezt az eljárást annak a védelem sértésnek az elhárítására használják, amely akkor lépne fel, amikor egy kevésbé privilégizált program egy privilégizáltabb programot próbálna arra felhasználni, hogy levédett adatokhoz férjen hozzá.

Például a rendszer kezelő programok vagy a periféria meghajtók (device driver) magas privilégium szinten kell fussanak ahhoz, hogy elérhessék a védelemmel ellátott területeket, mint például a periféria interfészek kontroll regisztereit. Ugyanakkor elkerülendő más, levédett területtel az összeakadás, még akkor is, ha egy kevésbé privilegizált

rogram ezt kérné. Ha egy programp

141

Page 140: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

szektor memóriába töltését egy privilegizáltabb program, például az perációs rendszer által elfoglalt helyre, az RPL felhasználható egy

általános védelmi hiba kiváltására a kevésbé privilegizált egmensszelektor használatának pillanatában. Ez a kivétel még akkor is

lső bejegyzésére mutató szelektort) "null szelektorként" használhatunk. processzor nem generál kivételt, ha egy (CS-től illetve DS-től

tort töltünk. Ugyanakkor, ha egy ull szelektort tartalmazó regiszterrel végzünk memória hozzáférést,

.6.3.2.3. Szegmens deszkriptorok A szegmens deszkriptorok a memóriában elhelyezkedő adatstruktúrák, amelyek a szegmens méretét, helyét illetve a vezérlő- és státusinformációkat szolgáltatják a processzor számára. A deszkriptorokat általában a fordítóprogramok, kapcsolóprogramok, betöltőprogramok vagy az operációs rendszer hozzák létre, de semmi esetre sem a felhasználói programok. A deszkriptorok általános formátumát a 3.28. ábra mutatja be. Bármely típusú deszkriptor ennek az alapformátumnak a változatait használja.

o

szlétrejönne, ha a szegmens szelektort használó program privilégium szintje elégséges volna ahhoz, hogy a műveletet egymagában elvégezze. Mivel a GDT legelső bejegyzését a processzor nem használja, egy 0-ás indexel és 0-ás táblázat mutatóval ellátott szelektort (tehát a GDTeAkülönböző) regiszterbe egy null szeleknkivétel keletkezik. Ezt a lehetőséget használaton kívüli szegmens regiszterek inicializálására lehet alkalmazni. 3

142

Page 141: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

Báziscím 31-24 Báziscím 23-16

Báziscím 15-0 Szegmens határ 15-0

L 19-16

+0

TípusGB

0AV

Szegmenshatár P SDPL +4

D/B - Alap szegmens operandus méret (0 - 16 bites, 1 - 32 bites)A

anDPL - Deszkriptor privilégium szintS

címtartománybeli helyzetét. A processzor összeteszi a három báziscím mezőt és így képezi az egy, 32 bites értéket. A szegmensek báziscím

, a

kód

ezve. Megyjegyzendő,

D_

G - Szemcsézettség

VL - Rendszer program számára engedélyezett a használatP - A szegmens jelen v

- Deszkriptor típus (0 - rendszer, 1 - alkalmazás)0 - Fenntartva

3.28. ábra: Szegmens deszkriptorok

áziscím: Meghatározza a szegmens 4 GByte-os fizikai B

értékei 16 Byte-os keretekhez kell illeszkedjenek annak érdekébenhogy a programok teljesítményét maximalizálják az adatok, illetve

16 Byte-os keretekbe történő illesztésével. Felbontás (Granularity) bit: A szegmenshatár (Limit) mező értékének

4096-os (212) tényzővel való skálázását engedélyezi. Ha a bit értéke 0, a szegmenshatár értéke egy Byte-os egységekben, ellenkező esetben 4 kByte-os egységekben van értelmhogy a skálázás alkalmazása esetén a címek 12 legkevésbé értékesbitje nem kerül ellenőrzésre. Például, ha a G bit magas, egy 0-ás szegmenshatár a 0-4095 közötti tartományba helyezi a megengedett eltolási címeket. Fontos azt is megjegyeznünk, hogy ez kizárólag a szegmenshatár mezőre érvényes. A báziscím mindig Byte-os felbontású marad.

143

Page 142: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

Sze

bites értéket. A szegmens hosszát a processzor kétféleképpen en:

gikai címek ofszetjei 0-tól szegmenshatár értékéig terjedhetnek. Más ofszetek kivételt generálnak. lefele bővülő szegmensek megváltoztatják a limit mező értelmét.

k a 0-tól a egmenshatárig terjednek (lásd a szegmenstípus mezőt a

e helyezzük, amely nem kell méretet változtasson, akkor z egy közönséges adatszegmens is lehet.

l. Adatszegmensekben a bit neve B bit, és a veremmel végzett műveletek két aspektusát elle

gmenshatár (Limit): A szegmens méretét határozza meg. A processzor összeteszi a két szegmenshatár mezőt, így kapja meg a 20

értelmezi, a felbontás (G) bit állapotának függvényéb

1. Ha G=0, a szegmens hossza egy Byte-tól egy MByte-ig terjed, 1 Byte-os növekménnyel.

2. Ha G=1, a szegmens hossza 4 kByte-tól 4 GByte-ig terjed, 4

kByte-os növekménnyel. A felfele bővülő szegmensek esetén a loaABármely ofszettel megcímezhetők, kivéve azokkal, amelyeszkövetkezőkben). Ennek az az értelme, hogy lehetővé tegye olyan szegmensek képezését, amelyeknél a szegmenshatár értékének növelésével a szegmens címtartományának alján foglalódik le új memóriaterület, és nem a szegmens tetején. A lefele bővülő szegmensek célja a verem befogadása, de használatuk nem kötelező. Ha a stack-et egy olyan szegmensbe S bit, deszkriptor típusát lelző bit: Meghatározza, hogy egy adott

szegmens rendszer szegmens vagy kód- illetve adatszegmens. Ha S=1, a szegmens vagy kódszegmens, vagy adatszegmens. Ha S=0, a szegmens egy rendszer szegmens.

D bit / B bit: Kódszegmensek esetében ennek a bitnek a neve D bit, és az

operandusok és effektív címek alapértelmezés szerinti hosszát jelöli. Ha a D bit 1-re van állítva, 32 bites operandusokat és 32 bites effektív címzésmódot határoz meg. Ellenkező esetben 16 bites operandushosszt és 16 bites címzésmódot jelö

nőrzi:

144

Page 143: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

1. A veremmutató regiszter méretét. Ha B=1, a PUSH, POP és CALL típusú műveletek mindegyike a 32 bites ESP regisztert használja; ha B=0, a verem műveletek a 16 bites SP regisztert használják.

határ (limit) mező határozza meg a verem szegmens alsó korlátját. Ha B=1, a felső korlát FFFF_FFFFH; ha B=0, a felső korlát FFFFH.

zegmenstípus mező: ennek a mezőnek az értelmezése attól függ, hogy a sze

típus mezője meghatározza az engedélyezett szegmens hozzáférés típusát, és a szegmens növekedési irányát (lásd 3.29. ábra). Adatszegmensek

rom bitjének a következő az értelme: lefele terjedő (E - expand-down), írás engedélyezés (W - wri

Az adatszegmensek lehetnek csak olvasható, illetve ható/olvasható típusuak. A veremszegmensek olyan adatszegmensek,

típusuak. Ha az SS regiszterbe ármilyen más típusú szegmens szelektora kerül betöltésre, általános delm

esetben nagyobbnak kell nnie a szegmens limit értékénél. A szegmenshatár ezen értelmezésének gfel

2. Egy lefelé bővülő verem felső korlátját. Lefelé terjedő szegmensek

esetén a szegmens

S

gmens deszkriptor egy felhasználói szegmens vagy egy rendszer szegmens deszkriptora. A rendszer szegmenseknek kissé eltérő a deszkriptor formátuma, lásd később. Egy momória deszkriptor

esetén a szegmenstípus mező legalsó há

te enable), illetve elért (A - accessed). Kódszegmensek esetén az említett három bit értelme: illeszkedő (C - conforming), olvasás engedélyezés (R - read enable), illetve elért (A - accessed).

íramelyek kötelezően írható/olvasható bvé i hiba kivétel generálódik. Ha a verem szegmens mérete változó kell legyen, akkor ez egy lefele bővülő adatszegmens lehet. A szegmenshatár értelme megváltozik a lefele bővülő szegmens esetében. A lefele bővülő szegmensekben azok a szabályos ofszet címek, anelyek a felfele növekvő szegmensekben kivételeket idéznek elő. A felfele bővülő szegmenseket csak olyan eltolási címekkel lehet megcímezni, amelyek értéke kisebb vagy egyenlő a szegmenshatárnál. A lefele terjedő szegmensekbe mutató ofszeteknek minden leme elően a szegmenshatár csökkenése a szegmens alján eredményez memória foglalást, ami a veremszegmens esetében helyes, ugyanis a verem az alacsonyabb címek irányába terjed. Ha a veremnek egy fix

145

Page 144: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

méretü szegmenst foglalunk le, ez a szegmens nem kell feltétlenül lefele növekvő legyen.

146

Page 145: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

Típus 11 10

E 9 W

8 A

Deszkriptor típus

Meghatározás

0 0 0 0 0 Adat Csak olvasható 1 0 0 0 1 Adat Csak olvasható, hozzáférhető 2 0 0 1 0 Adat Írható - olvasható 3 0 0 1 1 Adat Írható - olvasható,

hozzáférhető 4 0 1 0 0 Adat Csak olvasható, lefelé

növekvő 5 0 1 0 1 Adat Csak olvasható, hozzáférhető,

lefelé növekvő 6 0 1 1 0 Adat Írható, olvasható, lefelé

növekvő 7 0 1 1 1 Adat Írható, olvasható,

hozzáférhető, lefelé növekvő Típus 11 10

C 9 R

8 A

Deszkriptor típus

Meghatározás

0 1 0 0 0 Kód Csak végrehajtható 1 1 0 0 1 Kód Csak végrehajtható,

hozzáférhető 2 1 0 1 0 Kód végrehajtható, olvasható 3 1 0 1 1 Kód végrehajtható, olvasható,

hozzáférhető 4 1 1 0 0 Kód Csak végrehajtható, illeszkedő 5 1 1 0 1 Kód Csak végrehajtható,

hozzáférhető, illeszkedő 6 1 1 1 0 Kód végrehajtható, olvasható,

illeszkedő 7 1 1 1 1 Kód végrehajtható, olvasható,

hozzáférhető, illeszkedő

3.29. ábra: Alkalmazási szegmens típusok A kódszegmensek lehetnek végrehajtható/olvasható, illetve csak végrehajtható típusuak. Egy végrehajtható/olvasható szegmens hasznos

147

Page 146: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

lehet például abban az esetben, ha egy ROM-ba az utasításkóddal együtt onstansokat is elhelyeztek. Ebben az esetben a konstansok kiolvashatók

dményez, ha nem használunk taszkkaput. Azok a rendszer kezelő rogramok, amelyek nem férnek hozzá levédett területekhez, mint milyenek az adat konverziót végző eljárások (pld. EBECDIC/ASCII

matikai könyvtár) és egyes ivételtípusok (például: Osztási hiba, INTO által detektált túlcsordulás és

b letesztelve a software követni tudja a szegmens felhasználást. Például,

almazás összes szegmensének A bitjeit. Ha az alkalmazás kiakad, lehetővé vállik ezen bite

neáris címek helyességére.

szegmens elérésekor, ég akkor is, ha a hozzáférés egy olvasási ciklus. Ha a deszkriptor

nben a ciklus soha sem fejeződne be. A hardware zen tulajdonságai szükségesek, ha ROM-ra alapozott deszkriptor

táblázatokat használunk a 386-os processzorban, amely beállítja az A bitet valahányszor egy szegmens deszkriptor. betöltésre kerül. A 486 és

kvagy egy CS fölülíró prefixel ellátott utasítással, vagy egy kódszegmensre vonatkozó szegmens szelektornak egy adatszegmens regiszterbe történő betöltésével. A kódszegmens lehet illeszkedő (conforming), vagy nem illeszkedő (non-conforming). A vezérlés átadása egy privilegizáltabb, illeszkedő szegmensnek megtartja a CPL értékét. Egy nem illeszkedő szegmensnek eltérő privilégium szinten átadott vezérlés általános védelmi hibát erepafordítás, Huffman kódolás/dekódolás, matekBOUND típusú tartomány átlépés) tölthetők csak az illeszkedő kódszegmensekbe. A szegmenstípus (Type) mezőbeli A (accessed) bitet a processzor állítja

be azzal a céllal, hogy jelezze egy szegmens szegmensregiszterbe való töltését. Az A bitet 0-ás kezdeti értékre állítva, majd későb

egy programfejlesztő rendszer kitörölheti egy alk

k állapota alapján az alkalmazás által elért összes szegmens feltérképezése. A hibakereső mechanizmus által biztosított töréspontokkal ellentétben (lásd 2. kötet), a felhasználtsági információ inkább a szegmensek használatára vonatkozik, mintsem a li

A processzor aktualizálhatja a Type mezőt amtáblázatok a ROM-ban vannak elhelyezve, szükségessé vállhat a hardware részére, hogy az írási ciklus ideje alatt megelőzze a ROM adatbuszra való csatlakozásának engedélyezését. Ugyanakkor egy ROM-ba író ciklus esetén szükség lehet a READY# jel processzorba történő visszajuttatására, külöe

148

Page 147: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

Pentium processzorok ellenben csak akkor állítják 1-re az A bitet, ha az előzőleg még nem volt beállítva. A ROM-ba elhelyezett deszkriptortáblázatokba való írás megelőzhető, beállítva minden egyes deszkriptor A bitjét. DPL (Descriptor Priviledge Level) a deszkriptor privilégiumszintje. A

szegmens privilégiumszintjét határozza meg, a már leírt védelmi mechanizmus alkalmazásával.

A szegmens jelenlétét jelző bit: Ha ez a bit értéke 0, a processzor egy

"betöltetlen szegmens" kivételt generál, amikor a deszkriptor szelektora betöltődik egy szegmens regiszterbe. Ezt az időközben elérhetetlenné vállt szegmensekhez való hozzáférés felismerésére használják. Egy szegmens akkor vállhat elérhetetlenné (unavailable), mikor az operációs rendszernek szabad memória területet kell létrehoznia. A memóriában helyet foglaló, alkalmazáson kívüli struktúrák, mint például a fontok vagy periféria meghajtók által elfoglalt hely felszabadításra kerül. Egy struktúra helye a szegmens "betöltetlen" megjelölésével szabadítható fel (ezt a szegmens jelenlétét jelző bit 0-ra állításával lehet elérni). Ezt követően a szegmens által eddig lefoglalt területet felhasználhatjuk más célra. A legközelebbi alkalommal, mikor a felszabadított struktúrára szükség van, a "betöltetlen szegmens" kivétel fogja jelezni, hogy a szegmenst újra be kell tölteni a memóriába. A mem.szervezés ezen a felhasználói programok számára áttetsző formáját virtuális memóriának nevezzük. Egy operációs rendszer a fizikai memóriánál sokkal nagyobb mennyiségü virtuális memóriát képes fenntartani azzal, hogy minden pillanatban csak néhány szegmenst tárol egyszerre a fizikai memóriában.

A 3.30 ábrán egy olyan deszkriptor formátumát láthatjuk, amelyben a szegmens jelenlétét jelző bit törölve van. Ha ez a bit 0, az operációs rendszernek engedélyezve van az "Elérhető" (Available) mezőben eltárolni a saját adatait, mint például a hiányzó szegmens helyét tekintő információkat.

149

Page 148: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

TípusP SDPL +4

+0Elérhető

Elérhető Elérhető

3.30. ábra: Szegmens deszkriptor (a szegmens nincs jelen)

3.6.3.2.4. Szegmensdeszkriptor-táblázatok Két fajta deszkriptortáblázat létezik:

• a globális deszkriptortáblázat (GDT) • a lokális deszriptortáblázat (LDT)

A taszkoknak van egyetlen egy, közös GDT-je, illetve minden egyes aktív taszknak külön-külön van egy LDT-je. A deszkriptor táblázat egy szegmens deszkriptorokból álló tömb, amint azt a 3.31. ábra mutatja. Egy deszkriptor táblázat hossza változó, és legtöbb 8192 (213) deszkriptort tartalmazhat. A processzor nem használja a GDT legelső deszkriptorát. Erre a "null deszkriptorra" mutató szegmens szelektor, adat szegmens regiszterekbe (DS, ES, FS vagy GS-be) töltve, nem generál kivételt, viszont minden olyan esetben kivételt eredményez, amelyben megkísérelünk egy memória hozzáférést ezzel a deszkriptorral. Inicializálva a szegmensregisztereket ezzel a szegmensszelektorral, garantálhatjuk, hogy a használaton kívüli szegmensregiszterekre való véletlen hivatkozások kivételt idézzenek elő.

150

Page 149: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

GLOBÁLISDESZKRIPTOR

TÁBLÁZAT TÁBLÁZAT

LOKÁLISDESZKRIPTOR

+32

+40

+48

+56

+32

+40

+48

+56

+16

+24

HATÁRBÁZISCÍM

HATÁRBÁZISCÍM

GDTR regiszter

Az első deszkriptor aGDT-ben nem használt +0

+8

HOZZÁFÉRÉS

LDT deszkriptor(GDT belépési pont #2)

+0

+8

+16

+24

Ezek a regiszterek tartalmazzák a táblázatok 32 bites

y olyan címre, amelynek 4-el való osztási maradéka 2). Így a rocesszor egy illesztett szót, és azt követően egy illesztett duplaszót

ormális esetben nem tárolnak s-ellenőrzési hiba kiváltásának

hetős

3.31. ábra: Deszkriptor táblázatok 3.6.3.2.5. Deszkriptortáblázat bázisregiszterek A processzor a GDTR és IDTR regiszterek alapján találja meg a globális deszkriptor táblázatot (GDT), illetve a megszakítások

eszkriptorát (IDT).dlineáris címtartománybeli címeit. Ezenkívül tárolják még a táblázatok méreteinek 16 bites határ értékét. Valahányszor az IDTR és GDTR regiszterek betöltésére vagy elmentésére kerül sor, egy - a 3.32 ábrán látható - 48 bites "pszeudódeszkriptor"-ra történik memóriahivakozás. A felhasználómódbeli (3. privilégiumszint) illeszkedési hibák elkerülése végett ajánlatos a pszeudódeszkriptort páratlan szó címre elhelyezni

agyis eg(vptárol. A felhasználó-módbeli programok n

szeudó-deszkriptorokat, de egy illeszkedéple ége elkerülhető a pszeudódeszkriptorok ilyen típusú illesztésével.

151

Page 150: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

A cache vonal feltöltés teljesítményének maximalizálása érdekében célszerű a GDT és IDT báziscímeit egy nyolc Byte-os kerethez illeszteni. A GDT, illetve IDT határértékei Byte-okban vannak

kifejezve. Csakúgy, mint a szegmensek es

47 16 15 0

Báziscím Határ

3.32. ábra: Pszeudó deszkriptor formátum

tében, itt is a határ (limit) rtékét a báziscímmel összeadva kapjuk meg az utolsó, érvényes Byte

ét.

ki.

or tábla a lokális deszkriptortáblázat (LDT). Egy 16 t onosítja, amelyet az LDTR regiszter tárol. A ziscímét és határér T (GDT-ből kio s nal feltöltés (cache

ne fill) teljesítményének maximalizálása érdekében ajánlatos az LDT-t

.6.3.3. Lapfordítás

lás mentes ímtartománybeli 32 bites címet értünk. Ez a címtartomány lehet egy

émi lemezterület gítségével. Ha lapozást használunk, a lineáris cím vagy a neki egfel

p mezreküldésének kíséretében), majd újraindítsa a kivételt előidéző

écím Ha a határ értéke 0, pontosan egy érvényes Byte-ot határoz meg. Minthogy a szegmens deszkriptorok hossza minden esetben nyolc Byte, a határ értéke mindíg eggyel kevesebb kell legyen mint nyolc egész számú sokszorosa (tehát 8N-1). Az LGDT és SGDT utasítás feltölti, illetve kiolvassa a GDTR regisztert, a LIDT és SLDT utasítás pedig az IDTR regisztert tölti fel, illetve olvassa

A harmadik deszkript bi es szegmens szelektor azz LDTR regiszter ezen kívül tartalmazza az LDT bá

tékét, de ezeket a processzor tölti be automatikusan az LDlva ott) szegmens deszkriptorából A cache vo

liegy nyolc Byte-os kerethez illeszteni. 3 Lineáris cím alatt egy egyenletes, szegmentáckiterjedt fizikai címtartomány (például több GByte-nyi RAM-ból képezett), ugyanakkor a lapozás segítségével szimulálható ez a címtartomány, egy kis mennyiségű RAM és nsem elő fizikai címre fordítódik, vagy egy kivétel generálódik. A kivétel biztosítja az operációs rendszernek azt a lehetőséget, hogy beolvassa a lapot a lemezről (valószínűleg egy másik laleutasítást.

152

Page 151: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

A lapozás abban tér el a szegmentálástól, hogy fix méretű lapokat használ. A szegmensekkel ellentétben, amelyeknek hossza általában megegyezik a bennük foglalt kód- vagy adatstruktúrák méretével, a lapoknak rögzített méretük van. Abban az esetben, ha a szegmentálás a címfordítás egyedüli felhasznált módja egy, a fizikai memóriában jelen

vő adatstruktúrának minden része a memóriában található. Ha lapozást gy része a memóriában, másik része a

ely vagy a lineáris címeket térképezi

Lookaside uffer) nevet viselik. A TLB a legtöbb laptáblázat olvasásra irányuló

kérésnek eleget tesz. A felesleges buszciklusok csak akkor jelennek meg, am -ben nin t. Ez általában akkor történik, amikor egy laphoz szú ideje nem ozzáférés. 3.6.3.3 Lapozási op lapozás megengedett, ha a CR0 . bitje magasra van állítva. t a bitet álta az operáció ware inicializ s idején. Ha zás engedé ek lineáris címekk lakításához a dításnak eg zintjét alkalmazzuk. Ha a lapozás nem engedélyezett, a lineá s. A PG bit 1 kell legyen, ha az operációs rendszer egynél több programot futtat virtuális 8086-os üzemmódban, vagy az igényeknek megfelelően lapozható (demand-page) virtuális memór

lehasználunk, az adatstruktúra e

mezen lehet. Az az információ, amlele fizikai címekre, vagy kivételeket vált ki, egy memóriában tárolt, laptáblázat néven ismert adatsruktúra. Csakúgy, mint a szegmentálás esetében, ez az információ is egy processzoron belüli gyorsítótárba (cache) kerül, a címfordításra szükséges buszciklusok számának minimizálása érdekében. A szegmentálással ellentétben, a címfordító gyorsítótárak teljesen áttetszőek a felhasználói programok részére. A processzor által címfordításra felhasznált információkat tároló

yorsítótárak a "fordítási segédpuffer" (TLB - Translation gB

ikor TLBa hos

c las talá volt h

.1. ciók

A regiszter 31Ez lában s rendszer állítja be a softálá a lapo lyezett, a fizikai cím

é a címfor y második sris cím egyben fizikai cím i

iát használunk.

153

Page 152: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.6.3.3.2. Lineáris cím A 3.33 ábrán egy 4 kByte-os lap lineáris címének formátumát láthatjuk.

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

Lapcímtár Táblázat Ofszet

izsgál lapcímtár, táblázat, és fszet me

használja használja la tal kijelölt laptáblázatban. Az ofszet mezőt a laptáblázat által mhasznája.

6 Byte-nyi adatot tartalmaz, vagy legtöbb 1

Két szegcím el. Egy pcímtár m xim

laptáblázatocímez meg f Teh1 MByte (220 en egyes lap 4 kByte (212GByte-nyi

Byte-nál na tű lapok használatának támogatásáról a ggelékben olvashatunk.

3.33. ábra: A lineáris cím formátuma

A 3.34. ábra bemutatja, hogy a processzor a laptáblázatokat va, miként fordítja le egy lineáris címv

o zőit fizikai címre. A címzőmechanizmus a lapcímtár mezőt indexként egy lapcímtárban. A táblázat mezőt indexként

pcímtár álaeghatározott lapon belüli operandusok címzésére

3.6.3.3.3. Laptáblázatok A laptáblázat egy 32 bites bejegyzéseket tartalmazó tömb. Maga a laptáblázat is egy lap, és 409kByte 32 bites bejegyzést. A négy kilóByte-os oldalak, beleértve a lapcímtárakat és a laptáblázatokat is, 4 kByte-os keretekhez illeszkednek.

inten elhelyezett táblázatokat alkalmazunk egy memória lap zéséhez. A legkülső szinten a lapcímtár helyezkedikm

la a um 1024 bejegyzést tárol, amelyek a második szintű kat címezik meg. Egy laptáblázat legtöbb 1 kByte-nyi lapot

izikai memóriában.a

át egyetlen lapcímtár által megcímzett laptáblázatok összesen ) 4 kByte-os lapot képesek megcímezni. Ha mind

) Byte-ot tartalmaz, egyetlen címlaptár laptáblázatai 4 (220x212=232) lineáris címtartományt képes átfogni. A 4

gyobb mérekfü

154

Page 153: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

Lapcímtárbejegyzés

Lap táblázat

Fizikai cím

Lap directory

Lap táblázat

Lap keret

bejegyzés

Lapcímtár Táblázat Ofszet

3.34. ábra: Lapfordítás Az aktuális lapcímtár fizikai címe a CR3-as regiszterben van eltárolva, amelyet még a lapcímtár báziscím regiszterének (PDBR) is nevezünk. A memóriaszervező software dönti el, hogy az összes taszk egy lapcímtárat használ-e, vagy minden egyes taszk rendelkezik egy külön lapcímtárral, esetleg a két megoldás valamilyen kombinációját használja. 3.6.3.3.4. Laptáblázat bejegyzések A laptáblázatok és lapcímtárak bemenőpontjai, 4 kByte-os lapok esetén, a 3.35 ábrán látató formátumok egyikével rendelkeznek. A 4 kByte-nál nagyobb lapok laptáblázat- és lapcímtár formátumáról további információk a függelékben találhatók.

155

Page 154: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

10

23

10

78

1415

19

31

456789

10

14

19

31

111213

15161718

2021222324252627282930

10

23456Piszkos

HozzáférhetőCache tiltott

ÁtíróFelhasználó

ÍrhatóJelen van

7

14

19

31

0

31-122021222324252627282930

Lapkeret

cím2021222324252627282930

89

10111213

0

Hozzáférhetőa programozó

számára

15161718

23456

910111213

161718

10

789

10

1415

19202122

31

0

programozószámára

ÍrhatóJelen van

31-12

Lapméret (0=4k)

Laptáblázatbejegyzés

Lapcímtárbejegyzés

3.35. ábra: A lapcímtár formátuma és a laptáblázatok elemei a 4K-s .

szintű ptáblázatban a lapkeret cím annak a négy kByte-os lapnak a címe, ely a

móriába, és laptáblázat bejegyzés fennmaradó része az operációs rendszer

2324252627282930

Lapkeret

cím

161718

111213

Hozzáférhetőa

23456

HozzáférhetőCache tiltott

ÁtíróFelhasználó

0

lapokhoz 3.6.3.3.5. Lapkeret cím A lapkeret cím a lap fizikai kezdőcímét határozza meg. A lapcímtárakban a lapkeret cím egy laptáblázat címe. Egy másodiklaam keresett operandust, illetve utasítást tartalmazza. 3.6.3.3.6. A Present (betöltött, jelenlevő) bit A P bit megmutatja, hogy egy lapkeret a fizikai memóriában jelenlevő lapra mutat-e. Ha a Present bit törölve van, a lap nincs betöltve a mearendelkezésére áll, hogy abba tárolhassa például a hiányzó lap hollétéről

156

Page 155: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

szóló információt. A 3.36 ábrán látható a laptáblázat bejegyzés formátuma abban az esetben, ha a Present bit értéke 0. 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

0H o z z á f é r h e t ő

3.36. áb mátuma nem jelenlévő lapoknál

Ha zintjén a P bit törölve van, egy ptáblázat bejegyzés használatát célzó kisérlet laphiba kivételt

ről a fizikai memóriába.

Az

. A kivételt előidéző program ezek után újraindítódik.

ra: Laptáblázat bejegyzés for

a laptábálzatok bármely slaeredményez. Az igényeknek megfelelően lapozható (demandpage) virtuális memóriát támogató rendszerekben,a tárgyalt esetben a következő eseménysorozat jelentkezik: 1. Az operációs rendszer betölti a lapot a lemez 2. operációs rendszer bejegyzi a lapkeret címét a laptáblázatba és

beállítja annak P bitjét. Más bitek, mint például a piszkos (dirty) illetve a hozzáfért (accessed) bitek is beállítódhatnak.

3. Minthogy egy fordítási segédpuffer (TLB) még mindég tartalmazhatja

a régi laptáblázat bejegyzés másolatát, az operációs rendszer érvényteleníti azokat. A fordítási segédpufferek (TLB-k) érvénytelenítésének mikéntjét a fejezet későbbi része tárgyalja.

4 Megjegyzendő, hogy a lapcímtárnak mint olyannak, nincs Present bitje a CR3-ban. A lapcímtár betöltetlen is lehet, amíg a hozzárendelt taszk felfüggesztett állapotban van, de az operációs rendszernek biztosítania kell azt, hogy a CR3-nak egy folyamat TSS-ében levő képe által kijelölt lapcímtár, jelen legyen a fizikai memóriában, még mielőtt a folyamat megkapná a vezérlést. A lapcímtárnak ezenkívül mindaddig a memóriában kell maradnia, amíg a taszk aktív.

157

Page 156: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.6.3.3.7 Hozzáfért (accessed) és "piszkos" (dirty) bitek Ezen bitek szolgáltatnak adatokat a laphasználatról a laptáblázatok

indkét szintjén. Az Accessed bit a lapokhoz, vagy egy második szintü ptáblázathoz történő olvasási vagy írási hozzáférések jelzésére használt.

zzáférés jelzésére használatos. Ezeket a iteket a hardware állítja be, bár a processzor impiciten egyik bitet sem

sra, a processzor nem használja a lapcímtár D bitjét.

z operációs rendszer ellenőrizheti, hogy a laphoz olt-e írás-hozzáférés. Ha a lapnak létezik a lemezen egy másolata, és

mlaA Dirty bit egy lapba való írási hobtörli ezek közül. A processzor az A bitet a laptáblázatok mindkét szintjén beállítja, még a lapot olvasó illetve író műveletek előtt. A processzor még egy, az illető laptáblázat bejegyzés által megjelölt címre író művelet előtt beállítja a D bitet. Kizárólag a második szintü laptáblázat Dirty bitje kerül felhasználá Az operációs rendszer felhasználhatja az Accessed bitet, amikor némi szabad tárterületet kell létrehoznia egy lap vagy egy második szintü laptáblázat lemezre küldésével. A laptáblázatok A bitjének periódikus törlésével ellenőrizheti, hogy melyek az utoljára használt lapok. A használatlan lapok esélyesek a lemezreküldésre. Az operációs rendszer felhasználhatja a Dirty bitet, amikor egy lapot visszaküld a lemeztárra. A lap memóriába töltésének pillanatában törölve a Dirty bitet, avnem történt írás-hozzáférés a memóriában levő példányhoz, nem szükséges a diszk memória szerinti frissítése. A könyv második kötetéből megtudhatjuk, hogy a multiprocesszoros rendszerekben a processzor hogyan újítja fel az Accessed és Dirty biteket. 3.6.3.3.8. Írás/olvasás illetve felhasználó/felügyelő bitek A Read/Write és User/Supervisor biteket a processzor lapvédelem ellenőrzésre használja fel, amit a címfordítással egyidőben végez. A védelemről bővebb információ a fejezet későbbi részében található.

158

Page 157: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

3.6.3.3.9. Lapszintű cache-vezérlő bitek A PCD és PWT biteket lapszintű cache szervezésre alkalmazzák. A software-ek ezen bitek segítségével kontrolálhatják az önálló lapok vagy a második szintű laptáblázatok cache használatát. A cache

asználatról bővebb információ egy későbbi fejezetben található.

znált laptáblázat bemeneteket a processzor a hip-be épített cache tárakban, az úgynevezett fordítási segédpufferekben,

tasítás cache memóriáknak különálló fordítási segédpufferei vannak. A

memhajttart (amoperációs rendszerek programozóinak azonnal érvényteleníteni kell a

rdítási segédpuffereket (elvetve ezekből a laptáblázat bemenőpontokat)

bit ker k nem tartják számon a

áltozásokat, és ennek következtében az ezt követő laptáblázat-

érvegy

pld.: MOV CR3,EAX

h 3.6.3.3.10. Fordítási segédpufferek A legutoljára hasc(más néven TLB) tárolja. A Pentium mikroprocesszorban az adat- és ulapozások legjelentősebb hányada a TLB-k tartalmát használja fel. A

óriában található laptáblázatok elérésére csak abban az esetben ódnak végre buszciklusok, amikor a fordítási segédpufferek nem almazzák a kért lap fordítási információit.

A TLB-k áttetszőek a felhasználói programok számára elyeknél PL>0), de az operációs rendszerek számára (PL=0) nem. Az

fovalahányszór a laptáblázat bemenetek módosúlnak (akkor is, ha a Present

értéke 0). Ha ez nem így történik, akkor címfordításkor felhasználásra ülhetnek olyan régebbi adatok, amelye

vhivatkozások helytelenek lehetnek.

Az operációs rendszer a CR3-as regiszter feltöltésével énytelenítheti a TLB-ket. A CR3-as regiszter a következő két eljárás ikével tölhető fel:

1. Explicit feltöltés a MOV utasítás alkalmazásával, mint

159

Page 158: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

2.

utasítás csak egyetlen TLB bemenetet rvénytelenít; bár egyes esetekben az INVLPG teljes egészében

érvényteleníti az utasítás-cache TLB-t.

.6.3.4. Szegmens- és lapfordítás keverése

sszefoglalja a logikai ímek fizikai címekre való fordításának mindkét stádiumát, a lapozás

Ha a 32 bites processzor szegmensek nélkül megírt software-eket áló képességének

ikapcsolása. A 32 bites processzoroknak nincs szegmentálás letiltó m

adattar a való leképezésével. 32 bites processzorutasítások által használt 32 bites ofszetek 4 GByte-

Ha lapozást használunk, a szegmensek a teljes lineáris

artlapozócímtart

Implicit feltöltés taszkkapcsolással, amely megváltoztatja a CR3-as regiszter tartalmát (Lásd később, taszkkapcsolás).

Amikor egy önálló lap leképezése (mapping) változik meg, az operációs rendszernek az INVLPG utasítást kell használnia. Ha lehetséges, az INVLPGé

3 A 3.37. ábra egyesíti a 3.36 és 3.34 ábrákat, és öcengedélyezése esetében. A címfordítás mindkét stádiumában létező opciók számtalan különböző memória szervezési mód támogatására alkalmazhatók. 3.6.3.4.1. A sík modell futtat, szükséges lehet a processzor szegmentküzem ódot kapcsoló bitje, de ugyanaz a hatás érhető el a verem-, kód- és

tományok ugyanazon lineáris címtartományrAnyi lineáris címtartományt takarnak le.

címt ományra leképezhetők. Ha egyszerre, egynél több program fut, a

mechanizmus segítségével minden egyes programnak önálló omány biztosítható.

160

Page 159: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

3.6.3.4.2 Több lapot átfogó szegmensek A processzor architektúrája megengedi olyan szegmensek használatát, amelyek hossza meghaladja egy lap méretét. Például egy kiterjedt adatsruktúra lapok ezreit foghatja át. Ha a lapozás nem lenne engedélyezett, az adatstruktúra bármely részéhez való hozzáférés megkövetelné a teljes adatstruktúra jelenlétét a fizikai memóriában. Lapozás esetén csak a hozzáfért részt tartalmazólapnak kell a memóriában lennie. 3.6.3.4.3. Több szegmenst átfogó lapok A szegmensek ugyanakor lehetnek a lapoknál rövidebbek is. Ha egy ilyen szegmens egy, más szegmensekkel nem megosztott lapon kap helyet, a fennmaradó tárterület "parlagon marad". Például egy kis méretű adatstruktúra, mint amilyen egy 1 Byte-os szemafor, elfoglal 4 kByte-nyi helyet, ha egy lapra egyedül kerül elhelyezésre. Ha több szemafort használunk, sokkal gazdaságosabb ugyanarra az egy lapra pakolni őket. 3.6.3.4.4. Nem illeszkedő lap- és szegmenshatárok Az architektúra nem tesz kötelezővé a lapok és a szegmensek határa közt semmilyen megfeleltetést. Egy lap tartalmazhatja egyik szegmens végét, illetve egy másik szegmens elejét. Hasonlóan, egy szegmens tartalmazhatja egy lap végét, illetve egy másik lap elejét.

.6.3.4.5 3 . Illeszkedő lap- és szegmenshatárok A memória szervező software egyszerűbb és hatékonyabb lehet, ha bizonyos mértékben megköveteli a lapok illetve a szegmenshatárok közti illeszkedést. Például, ha egyetlen lapra elférő szegmens két lapra kerül elhelyezésre, kétszer több lapozási műveletre lehet szükség a

egmens eléréséhez. sz

161

Page 160: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

Szelektor Ofszet

LOGIKAI CÍM15 0 31 0

Deszkriptor táblázat

Szegmensdeszkriptor

ORTartalomjegyzék Táblázat Ofszet

4k-s Lapkeret

Tartalomjegyzék Ofszet

Lineáris cím

Lineáris cím (4k-s lapoknál)

Operandus

Laptáblázat

Laptáblázatbejegyzés

Lapcímtár

4k-s tartalomjegyzékbejegyzés

4M-s tartalomjegyzékbejegyzés

4M-s Lapkeret

OperandusCR3

(4M-s lapoknál)

lapcím fordítás

3.37. ábra: Kombinált szegmens- és

162

Page 161: Otodik Generacios Processzorok_pentium

A védett üzemmód felépítése, működése

3.6.3.4.6. Egy laptáblázat elhelyezése szegmensenként A lapozás és szegmentálás együttes használatának egyik lehetséges megközelítése - amely leegyszerűsíti a memória szervező software-t - az, hogy minden egyes szegmensnek saját laptáblázata legyen

iztosítva, ahogyan azt a 3.38. ábra mutatja. Ez a megoldás a egme

bsz nsnek egyetlen lapcímtár bejegyzést biztosít, amely a szegmens lapozásához szolgáltatja a hozzáférést ellenőrző információkat.

Lokálisdeszkriptor

táblázat LaptáblázatokLapkeretek

Lapcímtár

Lapcímtár

Laptáblázatbejegyzés

Laptáblázatbejegyzés

bejegyzésDeszkriptor

Deszkriptor

Laptáblázatbejegyzés

Laptáblázat

bejegyzés

Lapcímtárbejegyzés

bejegyzésLaptáblázat

Laptáblázatbejegyzés

3.38. ábra: minden egyes szegmensnek biztosítani kell saját laptáblázatot

163

Page 162: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.7. Védelemi mechanizmusok A védelem egy megbízható multitaszking számára elengedhetetlen. A védelem célja az, hogy a taszkok egymásba történő beavatkozását kiküszöbölje. Például, a védelem megakadályozhatja az egyik taszkot abban, hogy egy másik taszk utasításait vagy adatait felülírja. Programírás közben a védelmi mechanizmus egy tisztább képet

megjelenését.

védelmi mechanizmus megóvhat a felderítetlen program hibák által okozott hiba lehetőségétől (a rejtevédeni lik a diagnosztizálás és

egkísérelhető az automatikus helyreállítás.

meghatározó bit, amellyel a védelmi mechanizmust ki lehetne apcsolni, ugyanaz a hatás érhető el azzal, hogy minden egyes szegmens

, illetve azok adataira gyakorolt eavatkozásának mennyiségét korlátozni lehessen. A védelem egy értékes

adhat a program összeakadásairól. Ha egy program váratlan hivatkozást tesz egy nem megfelelő tárterületre, a védelmi mechanizmus meggátolhatja az eseményt, illetve visszajelezheti annak

A végfelhasználói rendszerekben a

tt hibák sosem maradnak rejtve). Az operációs rendszert meg lehet a sérülésektől, ezáltal lehetővé vá

m A védelem lapokra és szegmensekre alkalmazható. A processzor egyik regiszterében található két bit meghatározza az aktuálisan futó program privilegizálási szintjét (más néven aktuális privilégium szint, vagy CPL). A CPL ellenőrzése a szegmentálási és lapozási címfordítás ideje alatt történik. Annak ellenére, hogy nem létezik egy vezérlőregiszter vagy egy üzemmód kszelektorhoz, szegmens deszkriptorhoz, illetve laptáblázat bejegyzéshez nullás privilégium szintet (a legmagasabb privilegizáltsági szintet) rendelünk 3.7.1. Szegmens szintű védelem A védelem biztosítja annak lehetőséget, hogy egy helytelenül működő program más programokrab

164

Page 163: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

segítőeszköze a software írásnak, mivel megengedi különböző software akereső, stb.) számára, hogy sértetlenül

egmaradjanak a memóriában. Mikor egy felhasználói program elakad, a

a helyreállító eljárások elindítására.

en egyes memóriahivatkozás esetén ellenőrződik, hogy a védelmi feltételeknek. Minden ellenőrzés a memóriaciklus

be; bármely szabálytalanság meggátolja a ciklus s kivételt eredményez. Minthogy az ellenőrzések a

ímfordítással párhuzamosan történnek, nincs teljesítménykiesés. Öt édelm

artományt érintő megszorítások 4. Az procedúrák bemenőpontjait érintő megszorítások 5. Az utasításkészletet érintő megszorítások

A védelem megszegése kivételt eredményez. A kivétel mechanizmus magyarázatát lásd a fejezet későbbi részében Ezen rész azokat a védelem megszegéseket írja le, amelyek kivételekhez vezetnek. 3.7.2. A szegmens deszkriptorok és a védelem A 3.39. ábra a szegmens deszkriptor azon mezőit mutatja be, melyeket a védelmi mechanizmus használ. A "Típus" mező különböző

bitjei az általuk ellátott funkciókkal vannak elnevezve.

étrehoz egy deszkriptort, beállítja nnak védelmi paramétereit is. Általános esetben a felhasználói

éterekkel törődniük.

szegme szor betölti mind a szegmens báziscímét,

eszközök (operációs rendszer, hibmrendszer képes diagnózis üzeneteket megjelenteni, illetve a hida esetleges helyreállítására. A gyártási fázisban a védelem megbízhatóbbá teszi a software-eket azzal, hogy lehetőséget biztosít az operációs rendszer számára Mindeleget tesz-ekezdete előtt indul elkezdését écv i ellenőrzés típus létezik:

1. Típus ellenőrzés 2. Határ (limit) ellenőrzés 3. A megcímezhető t

a

Amikor az operációs rendszer laprogramok íróinak nem szükséges a védelmi param Amikor egy program betölt egy szegmensregiszterbe egy

ns szelektort, a proces

165

Page 164: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

mind a védelmi információkat. Minden szegmensregiszter láthatalan részében hely van biztosítva a báziscím, limit, típus és privilégium szint tárolására. Amíg ez az információ a szegmensregiszterben rezidens, az ugyanarra a szegmensre irányuló, egymást követő védelmi ellenőrzések teljesítmény kimaradás nélkül végezhetők. 3.7.2.1. Típusellenőrzés A felhasználói kód- és adatszegmensek deszkriptorain kívül, a processzornak rendszerszegmens- és kapudeszkriptorai is vannak. Ezek olyan adatstruktúrák, amelyek taszkok, illetve kivételek és megszakítások szervezésére használatosak. A 3.40. ábra felsorolja a rendszer szegmensek és kapuk minden definiált típusát. Megjegyzendő, hogy nem minden deszkriptor határoz meg egy szegmenst; a kapudeszkriptorok a procedúrák bemenőpontjaira mutató pointereket tartalmaznak.

Típus Meghatározás Decimális Bináris

0 0000 Fenntartva 1 0001 Hozzáférhető 16 bites TSS 2 0010 LDT 3 0011 Foglalt 16 bites TSS 4 0100 16 bites Call kapu 5 0101 Taszk kapu 6 0110 16 bites megszakítás kapu 7 0111 16 bites csapda kapu 8 1000 Fenntartva 9 1001 Hozzáférhető 32 bites TSS 10 1010 Fenntartva 11 1011 Foglalt 32 bites TSS 12 1100 32 bites Call kapu 13 1101 Fenntartva 14 1110 32 bites megszakítás kapu 15 1111 32 bites csapda kapu

3.40. ábra: Rendszer szegmens- és kapu típusok

166

Page 165: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

Az adat- és kódszegmens deszkriptorok típus mezői olyan biteket tartalmaznak, amelyek meghatározzák a továbbiakban a szegmens célját (lásd 3.39. ábra) • Az Írható (Writable) bit egy adatszegmens deszkriptorban

meghatározza, hogy a programok írhatnak-e a szegmensbe. • Az Olvasható (Readable) bit egy kódszegmens deszkriptorban

iszterekbe) olvasva a deszkriptor egy szelektorát.

A típusellenőrzés felhasználható olyan programozási hibák felderítésére, amelyek megkísérelnék a szegmenseket a programíró számára nemkívánatos módon alkalmazni. A processzor két alkalommal ellenőrzi a típusinformációt: 1. Mikor egy deszkriptor szelektora betöltődik egy

szegmensregiszterbe. Bizonyos szegmensregiszterek csak meghatározott deszkriptorokat tartalmazhatnak; például:

• A CS regisztert csak végrehajtható szegmens szelektorával

szabad feltölteni. • A végrehajtható de nem olvasható szegmensek szelektorai

nem tölthetők be az adatszegmens regiszterekbe. • Csak írható adatszegmensek szelektorai tölthetők az SS

regiszterbe.

meghatározza, hogy a programok olvashatnak-e egy szegmensből (például a kódtartományban tárolt konstansokat). Egy olvasható kódszegmens kétféleképpen olvasható:

1. A CS regiszter segítségével, a CS fölülíró prefixet

használva 2. Az adatszegmens regiszterbe (DS, ES, FS, vagy GS

reg

167

Page 166: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

Báziscím 31-24 Báziscím 23-16

Báziscím 15-0 Szegmens határ 15-0

G BAVL

Szegmenshatár

19-161 1DPL +4

+0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

Báziscím 31-24 Báziscím 23-16

Báziscím 15-0 Szegmens határ 15-0

G DAVL

Szegmenshatár

19-161 1DPL +4

+0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

Báziscím 31-24 Báziscím 23-16

Báziscím 15-0

Típus

Szegmens határ 15-0

GSzegmens

határ19-16

1 0DPL +4

+0

0

0 1 C R A

0 E W A0

A - HozzáférhetőB - NagyC - IlleszkedőD - AlapbeállításDPL - Deszkriptor privilégium szintE - lefelé növekvőG - SzemcsézettségR - OlvashatóW - Írható

3.39. ábra: Védett módban használt deszkriptor mezők

168

Page 167: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

2. Mikor az utasítások olyan szegmensekhez férnek hozzá, amelyek

deszkriptorai már be vannak töltve a szegmensregiszterekbe. Egyes szegmenseket az utasítások csak bizonyos előre

atnak; például:

• Egyetlen utasítás sem írhat egy végrehajtható szegmensbe.

m olvashat egy végrehajtható

asható (Readable) bit nincs beállítva.

.7.2.2. Határ (limit) ellenőrzés

Egy szegmens deszkriptor limit mezője meggátolja a programokat bban, hogy a szegmensen kívülre címezhessenek. A határ gyakorlati

it állapotától. Adatszegmensek esetén a s. Az E bit a Típus mező egyik

ens deszkriptorra vonatkozik.

zegmens Byte-okban

meghatározott módon használh

• Egyetlen utasítás sem írhat egy adatszegmensbe ha az

Írható (Writable) bit nincs beállítva.

• Egyetlen utasítás seszegmensből, ha az Olv

3 aértéke függ a G (Granularity) bhatár függ az E (Expansion) bit értékétől ibitjének megnevezése, ha adatszegm Ha a G bit törölve van, a határ a deszkriptor 20 bites Limit mezőjének értéke. Ebben az esetben a határ a 0-tól F_FFFFH értékig terjed (220 - 1 vagy 1 MByte). Ha a G bit értéke 1, a processzor beszorozza a limit mező értékét egy 212 skálatényezővel. Ebben az esetben a határ a 0FFFH-tól (212- 1 vagy 4 kByte) egészen FFFF_FFFFH-ig (232-1 vagy 4 GByte) terjed. Jegyezzük meg, hogy a skálatényező használatakor a cím alsó tizenkét bitje nem kerül limit ellenőrzés alá; ha a G bit 1-re van állítva és a szegmenshatár értéke 0, a szegmensen belüli érvényes ofszetek 0-tól 4095-ig terjednek. Minden szegmenstípus esetén, kivéve a lefele bővülő szegmenseket, a limit értéke egyel kevesebb mint a s

169

Page 168: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

kifejezett hossza. A processzor általános védelmi hibát idéz elő a következő esetek bármelyikében:

• Egy olyan memóriabeli Byte elérésére tett kísérlet, amelynek a címe > limit

• Egy olyan memóriabeli szó elérésére tett kísérlet, amelynek a címe > (limit-1)

• Egy olyan memóriabeli duplaszó elérésére tett kísérlet, amelynek a címe > (limit-3)

• Egy olyan memóriabeli négyes szó elérésére tett kísérlet, amelynek a címe > (limit-7)

A lefele bővülő adatszegmensek esetében a határnak ugyanaz a funkciója van, csak másképpen van értelmezve. Ebben az esetben az érvényes ofszetek tartománya a (limit+1)-től a 232-1 -ig terjed, ha B=1, illetve 216-1-ig, ha B=0. Egy lefele bővülő szegmensnek akkor van maximális hossza, ha a szegmenshatár értéke 0. A limit ellenőrzés olyan programhibákat "fedez fel", mint milyenek a "kiszaladó" indexek, illetve az érvénytelen mutató

számítások. ktálódnak, záltal a kiváltó ok megtalálása egyszerűbb. Limit ellenőrzés nélkül ezek

tani, és jelezni forrásukat.

amely nem használatos. Annak ellenére, hogy ezt a

aEzek a hibák a megjelenésük pillanatában dete

ea hibák felülírhatnának kritikus tárterületeket egy másik modul belsejében, és az említett hibák létezése mindaddig nem lenne kimutatható, amíg a sérült modul össze nem esne, ez egy olyan esemény lévén, amely jóval a tulajdonképpeni hiba után következne be. A védelem képes ezeket a hibákat elhárí A szegmenshatár ellenőrzés mellett létezik még a deszkriptortáblázatok limit ellenőrzése is. A GDTR, LDTR, és az IDTR regiszterek tartalmaznak egy-egy 16 bites limit értéket. Ezeket a processzor arra használja, hogy meggátolja a programokat abban, hogy egy deszkriptortáblázaton kívül eső szegmens deszkriptort szelektáljanak. A deszkriptortáblázat határértéke a táblázat utolsó érvényes Byte-ját határozza meg. Minthogy minden deszkriptor 8 Byte-nyi hosszú, egy N deszkriptort tartalmazó táblázat határértéke 8N-1 kéne legyen. Egy szelektornak az értéke lehet 0 is. Ez a deszkriptor a GDT legelső elemére vonatkozik,

170

Page 169: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

deszkriptort be lehet tölteni egy szegmensregiszterbe, bármely olyan

ok alacsonyabb rivilégiumszintet jelentenek. Ha minden egyéb védelmi ellenőrzés ki van

gyanaz hatás érhető el minden privilegizálási szintnek 0-s értéket rendelve. (A

bit; a végrehelérhet ód nem engedélyezett, a processzor valós

zemmódban dolgozik, amelyben egy gyors, kiterjesztett 8086-os

megbízhatóságának javítására lehet felhasználni. Az operációs

ndszernek a legmagasabb privilegizáltságot (számozás szerinti

program al megsérüljön. Ha egy program sszeomlik, az operációs rendszernek megadatik ezáltal a lehetőség arra,

y dkísérelsoftwaprogram ra. Abban az esetben, ha egy kezelőprogram (device

river) fagyna le, az operációs rendszer képes kell, hogy legyen egy

Egy kezelőprogram

próbálkozás, amely ezzel a deszkriptorral hivatkozna a memóriára, általános védelmi hibát váltana ki. 3.7.3. Privilégium szintek A védelmi mechanizmus négy privilégium szintet ismer, számozásuk 0-tól 3-ig történik. A nagyobb számpelégítve, egy általános védelmi hiba generálódik, valahányszor egy program megkísérel egy szegmenshez hozzáférni a szegmenshez rendelt privilégium-szintnél kevésbé privilegizált szinten (nagyobb privilégium számmal). Annak ellenére, hogy nem létezik a védelmi mechanizmus kikapcsolását szolgáló vezérlőregiszter vagy üzemmód-váltó bit, uaCR0 regiszter PE bitje nem csak a védelmi mechanizmust engedélyező

védett üzemmód engedélyezésére használt, vagyis a program-ajtás egy olyan módjának, amelyben a teljes 32 bites architektúra ő. Ha a védett üzemm

üprocesszornak tűnik.)

A privilégium-szinteket az operációs rendszerek

relegkisebb privilegizálási szintet) biztosítva megvédhető attól, hogy más

okban előforduló gubancok áltöhog iagnózis-üzenetet generálhasson, illetve helyreállító eljárásokat

jen meg. Egy újabb privilegizálási szint állapítható meg a rendszer-re egyéb részei, mint például a periféria-eszközöket kezelő

ok számáddiagnózis-üzenetet küldeni, tehát van értelme az operációs rendszert megvédeni a kezelőprogramok gubancaitól.

171

Page 170: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

ugyanakkor fontos perifériát kezelhet, mint például egy lemezegységet. Ha a felhasználói program akad el, a kezelőprogramnak nem szabad a lemez könyvtárstruktúráját módosítania. A kezelőprogram számára célszerű egy köztes privilegizálási szintet biztosítani az operációs rendszer és a felhasználói programok között. A felhasználói programok a legalacsonyabb privilegizálási szintet (számozás szerinti legnagyobb szintet) kapják. A 3.41. ábra bemutatja, hogy miként értelmezhetők ezek a privi-legizálási szintek mint védelmi gyűrűk. A középpont jelképezi a legkritikusabb software-t, általában egy operációs rendszer magját (kernel) tartalmazó szegmenseket. A külső gyűrűk a kevésbé kritikus software-eket jelképezik.

A következő adatstruktúrák tartalmaznak privilegizálási szinteket:

A CS szegmens-regiszter legalsó két bitje tartalmazza az aktuális priv

r a vezérlés átadódik egy eltérő privilegizálási szinttel rendelkező kód

ilegizálási szint.

A szegmens-szelektorok tartalmaznak egy "szükséges privilegizálási élja, hogy a szelektort

létrehozó procedúra privilegizálási szintjét jelképezze. Ha az RPL kev

• ilégium-szintet (CPL). Ez az aktuálisan futó program

privilegizálási szintje. Az SS regiszter legalsó két bitje is tárolja a CPL egy másolatát. Normális esetben a CPL értéke megegyezik annak a kódszegmensnek a privilegizálási szintjével, amelyből az utasítás-elérés történik. A CPL értéke megváltozik, valahányszo

szegmensnek. • A szegmens-deszkriptorok tartalmaznak egy "deszkriptor-

privilegizálási szint"-nek nevezett mezőt (DPL). A DPL a szegmenshez rendelt priv

szint"-nek nevezett mezőt (RPL). Az RPL c

ésbé privilegizáltabb a CPL-nél, akkor fölülírja a CPL-t. Amikor egy privilegizáltabb program egy kevésbé privilegizált programtól kap egy szegmens-szelektort, az RPL teszi azt, hogy a memória-hozzáférés a kevésbé privilegizált szinten menjen végbe.

172

Page 171: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

A privilegizálási szintek akkor kerülnek ellenőrzés alá, amikor egy deszkriptor szelektora betöltődik egy szegmens-regiszterbe. Az adathozzáférés esetén alkalmazott ellenőrzések eltérnek a végrehajtható szegmensek közötti vezérlésátadáskor alkalmazott ellenőrzésektől; ebből kifolyólag az elkövetkező alfejezetekben a két hozzáférés-típus külön-külön kerül bemutatásra. Operációs rendszer KERNEL

0. szint

Op. rendszer kezelõprogramokEszközmeghajtók, stb.

Alkalmazások

1. szint

2. szint

3. szint

3.41. ábra: Védelmi gyűrűk

egy aregisztellenőrszelektmutatjaellenőr

3.7.4. Az adathozzáférések korlátozása

Ahhoz, hogy a memóriában levő operandusokat megcímezzük, datszegmens szelektorát be kell tölteni egy adatszegmens-erbe. (a DS, ES, FS, GS, vagy SS regiszterekbe). A proceszszor zi a szegmens privilegizálási szintjeit. Az ellenőrzés a szegmens-or betöltésének pillanatában történik. Amint azt a 3.42. ábra , három különböző privilegizálási szint kerül ilyen típusú zés alá.

173

Page 172: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

A háro

. A program CPL-je (aktuális privilegizálási szintje). Ezt a CS regiszter két legalsó helyértékű bitje tárolja

s des rának L-je

r-privilegizálási szintje).

ens m ére nált ilegizá tje). az ensregiszter (az SS, DS, ES,

t az op dus

m ellenőrzött privilegizálási szint a következő:

1.

2. Az operandust tartalmazó szegmen(deszkripto

zkripto DP

3. Az operandust tartalmazó szegm

szelektor RPL-je (szükséges privoperandus elérésére felhasznált szegm

egjelöléslási szin

haszEzt

FS, vagy GS regiszterek) két legalsó bitjea veremszegmensben van, az RPL megegyezik a CPL értékével.

árolja. Ha eran

174

Page 173: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 3 268 7 5 4 1 0

DPL +4

+0

Operandus szegmens deszkriptor

szter

Operandus szegmens szelektor

Aktuális kódszegmens regi

CPL - Aktuális privilégium szintPL - Deszkriptor privilégium szint

Privilégiumellenőrzés

CPL

RPL

DRPL - Igényelt privilégium szint

3.42. ábra: Privilégium ellenőrzés adathozzáféréseknél

Az utasítások csak abban az esetben tölthetnek fel egy szegm nsregisztert, ha a szegmens DPL-je kisebb vagy egyenlő privi izálási szintű (nagyobb privilégium szám) mint a CPL és a

eleg

ány a CPL változásával ódosul. Ha a CPL=0, bármely privilegizálási szintű adatszegmens

ő; ha a CPL=1, csak az 1-től 3-ig terjedő privilégiumszintű

szelektor RPL-je közül a legkevésbé privilegizáltnál.

Egy taszk által megcímezhető tartom mhozzáférhet

175

Page 174: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

adatszegmensek érhetők el; ha a CPL=3, csak a 3-as privilegizálási szintű datszegmensek érhetők el.

nsekbeli adatok elérése

Szü abban tben, ROM típusú tárban vannak megadva.

nsokat; nem r, ha

kódszegme adatok elérésére a következő módszerek

Egy ő (non ens

Egy ő (con rehajtható szegmens szelektorával.

3. Egy fix alkalmazása egy olyan k

szel iszterbe van töltve.

Az első esetre az adatszegmens hozzáférésre vonatkozó, ásodik eset mindig érvényes, mivel

gy olyan kódszegmens privilegizálási szintje, amelynek Conforming

.7.5. Vezérlésátadások korlátozása

aAzok a rendszerek, amelyek a lehetséges négy privilegizálási szint közül csak kettőt használnak, a 0-s és a 3-as szinteket kell alkalmazzák. 3.7.4.1. Kódszegme kséges lehet a kódszegmensben adatokat tárolni, példáulaz ese ha a kód és az adatok is A kódszegmensek szabályszerűen tárolhatnak konstalehetséges kódszegmensként definiált szegmensbe írni, csak akkougyanarra a címtartományra egy adatszegmenst is leképezünk. A

nsekbeli lehetségesek:

1. adatszegmens-regiszter feltöltése egy nemilleszkedconforming), olvasható, végrehajtható szegm

szelektorával. 2. adatszegmens-regiszter feltöltése egy illeszked

forming), olvasható, vég

kódszegmens-fölülíró preolvasható, végrehajtható szegmens írása céljából, amelyne

ektora már a CS reg ugyanazon szabályok érvényesek. A me(illeszkedő) bitje 1-re van állítva, a DPL értékétől függetlenül, gyakorlatilag megegyezik a CPL értékével. A harmadik eset mindig érvényes, minthogy a CS regiszter által kijelölt kódszegmens DPL-je maga a CPL. 3

176

Page 175: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

A vezérlésátadásokat a JMP, CALL, RET, INT, és IRET

Ez a rész csak a JMP, CALL és RET utasításokkal glalkozik.

utasítások "near" formái a program

limit-e téve. A processzor ellenőrzi, hogy a JMP,

aktuáli atárát. Ez a limit a CS regiszterbe van "cache-lve", így a "near" típusú vezérlésátadások esetén a védelmi ellenőrzések em ro

szelektálja.

utasítások, valamint a kivétel- és megszakítás-mechanizmusok biztosítják. A kivételek és a megszakítások speciális esetek, amelyeket egy későbbi fejezet tárgyal.fo

A JMP, CALL és RETvezérlését az aktuális kódszegmensen belül adják át, ezért ezek csak a

llenőrzésnek vannak kiCALL illetve RET utasítások rendeltetési helyei nem haladják-e meg az

s kódszegmens hen ntják a teljesítményt. A JMP és CALL utasítások "far" változatainak operandusai más szegmensekre vonatkoznak, ezért a processzor privilégium-ellenőrzést végez. A JMP és CALL utasítások kétféleképpen vonatkozhatnak egy másik szegmensre: 1. Az operandus egy másik végrehajtható szegmens deszkriptorát

2. Az operandus egy call-kapu deszkriptorát szelektálja. Amint azt a 3.43. ábra mutatja, az olyan vezérlésátadások esetén, amelyek nem használnak call-kaput, két különböző privilegizálási szint lesz alávetve a privilégium-ellenőrzésnek: 1. A CPL (aktuális privilegizálási szint). 2. A cél kódszegmens deszkriptorának DPL-je.

177

Page 176: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

Cél kód-szegmens deszkriptor

31 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 030 29

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

DPL +4

+0

Típus

1 C R A1

Aktuális kódszegmens regiszter

Operandus szegmens szelektor

CPL - Ak lis privilégium sziDPL - De riptor privilégium C - Illeszkedés bit

RPL

tuá ntszk szint

CPL

Privilégiumell senőrzé

3.43. áb Privilégiu lküli vezé dásoknál Normális esetben nnak a szeg ek a DPL értékével, amelyet a processzor éppen végrehajt. Ennek ellenére a CPL lehet a DPL értékénél nagyobb (kevésbé privilegizált), ha az aktuális kódszegm s egy szegmens nt azt a szegmen szkriptorának utatja). Egy illeszkedő (conforming) szegmens a hívó procedúra privilegizálási szintjén szalad. A proces érték ltérhet az aktuális kódszegmens deszkriptorában tárolt DPL értékétől.

m ellen kapu néra: őrzés taszk rlésáta

aa CPL megegyezik mensn

en illeszkedő (conforming) (amisde típusmezője m

szor a CS regiszterben tárolja a CPL egy másolatát; ez az e

178

Page 177: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

A processzor csak abban az esetben engedélyezi a JMP és CALL utasításokkal egy másik szegmensbe történő direkt hívást, ha a következő két privilégium szabály közül valamelyik teljesítve van:

• A szegmens DPL-je egyenlő a CPL-el. • A szegmens egy illeszkedő (conforming) kódszegmens, és a DPL-

je kisebb (privilegizáltabb) a CPL-nél. Az illeszkedő szegmensek olyan programok esetén használatos, mint például a matematikai könyvtárak, illetve néhány kivétel kiszolgáló procedúra esetén, amelyek támogatják ugyan az alkalmazásokat, de nincs szükségük hozzáférni védett rendszer-szolgáltatásokhoz. Amikor a vezérlés egy "conforming" típusú szegmensnek kerül átadásra, a CPL értéke nem változik meg, még akkor sem, ha a szegmens megcímzésére

asznált szelektornak eltérő az RPL-je. Ez az egyedüli olyan feltétel, amely esetében a CPL különbözhet az aktuális kódszegmens DPL értékétől. A kódszegmensek legtöbbje nem illeszkedő (nonconforming). Ezen szegmensek esetén a kapu nélküli vezérlésátadás csak ugyanazzal a privilegizálási szinttel rendelkező kódszegmensek között lehetséges. Ugyanakkor néha szükséges a vezérlés átadása magasabb privilegizálási szintekre. Ez a CALL utasítás segítségével megy végbe, call-kapudeszkriptorok alkalmazásával, amelyek a későbbiek folyamán lesznek elmagyarázva. A JMP utasítás soha nem adhatja át a vezérlést egy olyan nem illeszkedő (nonconforming) szegmensnek, amelynek DPL értéke nem egyenlő a CPL értékével. 3.7.6. Kapudeszkriptorok A különböző privilegizálási szinten levő végrehajtható szegmensek közötti vezérlésátadás védelmének biztosítása érdekében a processzor kapudeszkriptorokat használ. Négy fajta kapudeszkriptor létezik:

h

179

Page 178: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

- call-kapuk - trapkapuk

megsz

egyik formája. ltérő privilegizálási szintek közötti vezérlésátadásra vannak alkalmazva.

en gynél több privilegizálási szint kerül alkalmazásra. A 3.44. ábra egy call-

pu fo

- akításkapuk - taszkkapuk A call-kapuk a védett üzemmódbeli vezérlésátadás ECsak azokban a rendszerekben szükséges a használatuk, amelyekbeka rmátumát illusztrálja. 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

31 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 030 29

DPL +4110 0 0 0 00DWORDszámlálófszet a szegmensben 31-16 P

+0Ofszet a szegmensben 15-0Szegmens szelektor

O

.

gy call-kapudeszkriptor a GDT-ben vagy az LDT-ben foglalhat helyet, de a megszakításdeszkriptor-táblázatban (IDT-ben) nem.

3.44. ábra: Call kapu Egy call-kapunak két fő funkciója van: 1. Megjelölni egy procedúra bemenőpontját. 2 Meghatározni a procedúrába való belépéshez szükséges

privilegizálási szintet. A CALL és JMP utasítások ugyanolyan módon használják a call-kapudeszkriptorokat, mint a kódszegmens deszkriptorokat. Amikor a hardware felismeri, hogy a cél szegmens-szelektora egy kapudeszkriptorra utal, az utasítás által végrehajtott művelet a call-kapu tartalma által lesz meghatározva. E

180

Page 179: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

Egy kapu szelektor és ofszet mezői egy procedúra bemenőpontjára

utató

y még rosszabb esetben egy tasítás közepébe ). A vezérlésátadást végrehajtó utasítás argumentuma em a

m pointert képeznek. A call-kapu garantálja azt, hogy minden egyes más szegmensnek történő vezérlésátadás egy érvényes bemenőpontra történik, és nem a procedúra közepébe (vagun szegmens-szelektor illetve procedúra bemenőpontját mutató szegmensen belüli ofszet. Ehelyett, a szegmens-szelektor egy kapudeszkriptorra mutat, és az ofszet használaton kívül marad. A 3.45. ábra bemutatja a címzésnek ezen formáját.

031015Szelektor A szegmensen belüli ofszet

Nem használt

Cél cím

Deszkriptor táblázat

OfszetSzelektor

DPL Száml.Ofszet

Kapu deszkriptor

BázisBázis

DPL Bázis Kód szegmensdeszkriptor

EljárásBelépési pont

3.45. ábra: A call kapu mechanizmusa

181

Page 180: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

Amint azt a 3.46. ábra mutatja, egy call-kapun keresztül történő

lási szint) . A call-kapu megjelölésére használt szegmens-szelektor RPL

(szükséges privilegizálási szint) értéke. deszkriptor privilegizálási szint) értéke.

. A cél kódszegmensdeszkriptorának DPL értéke.

gmensen belül ámos olyan eljárás lehet, amelyek különböző privilegizálási szintről rténő

izálási szintre lehet felhasználni (bár az ugyanarra a szintre

rténő vezérlésátadásokkor nem szükségesek). Kizárólag a CALL

t lkalmazni, vagy egy ugyanakkora, illetve nagyobb privilegizáltsággal ndelkező illeszkedő (conforming) kódszegmensnek történő

vezérlésátadás érvényességének ellenőrzésére négy különböző privilegizálási szint van felhasználva. Egy call-kapun keresztül történő vezérlésátadás alkalmával ellenőrzött privilegizálási szintek a következők: 1. A CPL (az aktuális privilegizá2

3. A kapudeszkriptor DPL (4 A kapudeszkriptor DPL mezője határozza meg, hogy milyen privilegizálási szintekről használható a kapu. Egy kódszesztö felhasználásra vannak rendeltetve. Például, egy operációs rendszernek lehet néhány olyan szolgáltatása, amelyeknek az a rendeltetése, hogy úgy az operációs rendszer, mint a felhasználói program által alkalmazva legyenek, mint például a karakter ki- és bevitelt kezelő rutinok, miközben más szolgáltatások csak az operációs rendszer általi használatra vannak tervezve, mint például a kezelőprogramokat inicializáló rutinok. A kapukat magasabb, vagy ugyanazon privilegtörténő vezérlésátadásra töutasítások képesek a kapukat magasabb privilegizálási szintre való vezérlésátadásra felhasználni. A JMP utasítás csak egy ugyanolyan privilegizáltság kódszegmensnek való vezérlésátadásra képes a kapuarevezérlésátadásra.

182

Page 181: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

DPL +4

+0

Cél kód-szegmens deszkriptor

Operandus szegmens szelektor

CPL - Aktuális privilégium szintDPL - Deszkriptor privilégium szintRPL - Igényelt privilégium szint

Aktuális kódszegmens regiszter

RPL

CPL

Privilégiumellenőrzés

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 13 12 11 10 9 68 7 5 4 3 2 1 014

DPL

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

+4

+0

Call kapu

3.46. ábra: Privilégium ellenörzés call kapuval történő vezérlésátadásnál

183

Page 182: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

Egy nem illeszkedő szegmensre ugró JMP utasítás esetén az itt

övetkező mindkét privilégium-szabály be kell legyen tartva; különben

MAX(CPL,RPL) <= a kapu DPL-je

. Megváltoztatja a CPL-t.

rmálisan lytatódik tovább. Mikor a processzor visszatér (return), az elmentett giszterek tartalma visszaállítják az eredeti vermet.

káltalános védelmi hiba kivétel generálódik. - -A cél kódszegmensének DPL-je = CPL Egy CALL utasítás (vagy egy illeszkedő szegmensre ugró JMP utasítás) esetén az itt következő mindkét privilégium-szabály be kell legyen tartva, különben általános védelmi hiba kivétel generálódik. - MAX(CPL,RPL) <= a kapu DPL-je -A cél kódszegmensének DPL-je <= CPL 3.7.6.1. Veremváltás Egy privilegizáltabb szintre történő procedúra-hívás a következőket végzi el: 12. Átadja a vezérlést (a végrehajtást) 3. Taszkkapcsolást végez Mindegyik belső védelmi gyűrűnek (a 0-s 1-es és 2-s privilegizálási szintek) megvan a saját veremtára, a kevésbé privilegizált szintekről történő kérések fogadására. Ha a veremterületet a hívó biztosítaná, és a verem túl kicsi lenne, a meghívott procedúra elakadhatna, a nem elégséges veremterület miatt. Ehelyett a processzor megakadályozza a kevésbé privilegizált programokat abban, hogy privilegizáltabb programokat megsérthessenek, mégpedig egy új verem létrehozásával a privilegizáltabb szintre való kérés pillanatában. Az új verem létrejön, a régi stack-ből átmásolásra kerülnek a paraméterek, a regiszterek tartalma elmentődik, és az utasítás-végrehajtás nofore

184

Page 183: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

A processzor a taszk-állapot-szegmens (TSS) segítségével találja meg a vermek létrehozásának szükséges helyet, amint azt a 3.47. ábra

utatja

kezdeti rtékéből (egy szegmensen belüli kezdeti ofszetből) áll össze. A kezdeti eremmutatók szigorúan csak olvasható típusú értékek lehetnek. A

a taszk futása közben. Ezeket a eremmutatókat kizárólag azzal a céllal használja, hogy egy magasabb

lkalommal, amikor a procedúra újra meghívásra kerül, a ezdeti veremmutató segítségével új verem lesz létrehozva.

m . Minden taszknak megvan a saját TSS-e. A TSS a belső védelmi gyűrűk kezdeti veremmutatóit tartalmazza. Az operációs rendszer a felelős azért, hogy minden egyes TSS-t létrehozzon és inicializálja azok veremmutatóit. (Ha az operációs rendszer nem használ TSS-eket a multitaszking megvalósításához, még akkor is le kell foglalnia legalább egy TSS-t az említett, veremmel összefüggő cél érdekében). Egy kezdeti veremmutató egy szegmens-szelektorból és az ESP regiszter egyévprocesszor nem módosítja őket vprivilegizálási szintre történő hívás esetén új veremtárakat hozzon létre. Ezek a vermek a meghívott procedúra visszatérése pillanatában eltűnnek. A következő ak

SS0

SS1

SS2ESP2

1

32 bites Taszk állapot szegmens

0

812162024

3.47. ábra: Kezdeti stack pointerek egy TSS-ben

ESP0

ESP

031100

4

185

Page 184: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

Valah privilégium gváltoztatása egy call-ka törté T c lt ve ül létrehozásra. zor a cél kód PL értékét (a )

l a gy a 0 s vag pri sz eti veremmutatóját kiválassza.

Az ú gmens DPL- kell legyen az új CPL a SS-hiba generálódik. Az operációs

n a lá letv rem . a

e t ú l h ll

n l y a E er á té t,

c z é s

n e .

éter lódnak az új A meghívott procedúrán elül a pa int

elyeke zámláló ount) mezője jelzi a proceszszornak, hogy hány duplaszót (maximum

ébe. Ha

A különböző privilegizálási szintek közötti procedúrahíváskor a

ányszor a -szint mepuval nik, a SS-ből egy ím betö ésével új rem ker

A process szegmens D z új CPL-thasználja fe rra, ho -s, 1-e y 2-es vilegizálási int kezd

j veremsze je egyenlő

értékével; hrendszer feladata, hogy m

ez nem így van, egy Tinde lkalmazott

-s sdprivilegizá si szintnek

A létrehozza aszegmensdeszkriptoruk típusm

v ileremét, e a ve zegmen eszkriptorátfeltüntetet

vermekzőjében eg

módone eírható/olvash

tartalmazzanak, a Limat usó típ ak kell

it mezőkyenek. Elegendő

elően, hoglyet k

ek megfee

magukbefoglalhassák

illetve a mea s z SS é SP regiszt

edúrának sk tartalm t, a viszsza

amétereket rési cím

ghívott pro ükséges par s ideigleneváltozókat. Amihívásokat ill

p zedig a ugyanazonúra paraméterei a verem

a leg privi izálási szibe kerülnek

te nőn törtéeti, a procedek átmáso

lhelyezésreA paramb

verembe. raméterek ugyanazon relatív címeket használva érhetők el, mt a veremváltás nélkül kéne alkalmazni. Egy call-kapu sam

(c31-et) másoljon át a hívó vereméből a meghívott procedúra verema számláló értéke 0, egy paraméter sem lesz átmásolva. Ha 31-nél több duplaszót kell a meghívott procedúrának átadni, a paraméterek egyike egy adatstruktúra mutatója lehet, vagy az SS és ESP regiszterek elmentett értékeit a régi veremterületről való paraméter-hozzáféréshez lehet felhasználni. processzor a következő veremmel kapcsolatos műveleteket végzi: 1. Ellenőrzi, hogy a meghívott procedúra veremének mérete elég

nagy legyen ahhoz, hogy befogadja a paramétereket és a

186

Page 185: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

regiszterek elmentett tartalmát; ha ez nincs teljesítve, veremkivételt generál.

2. Az SS és ESP regiszterek régi tartalmát két duplaszóként lenyomja

a meghívott procedúra veremébe (a 16 bites SS regiszter 0-s bitekkel van 32 bitre kiegészítve, a legfelső, 0-s kitöltésű kiegészítő szó az Intel által lefoglalt; használata nem ajánlott).

3. A paramétereket a hívó procedúra vereméből a meghívott

procedúra veremébe másolja át. 4. A CALL utasítást követő utasításra mutató pointert (A CS és EIP

regiszterek régi értékeit) lenyomja az új verembe. A hívás után az SS és ESP regiszterek a veremben erre a viszszatérési pointerre mutatnak.

A 3.48. ábrán látható a veremkeret egy sikeres szintek közti procedúrahívás és visszatérés előtt, közben és után.

Parm1Parm2Parm3 ESP

ESP

Parm1Parm2Parm3

Régi SSRégi ESP

Régi CSRégi EIP

Régi stackÚj stack Régi stack

hívás előtthívás után,visszatérés előtt

RET FAR N-el valóvisszatérés után (N=3)

ESP

3.48. ábra: Stack keret szintek közötti hívás alatt A TSS-ben a 3-as privilegizálási szintnek nincs veremmutatója, ugyanis egy 3-as privilegizálási szintű procedúrát nem hívhat meg egy kevésbé privilegizált procedúra sem. A 3-as privilegizálási szint verme az

187

Page 186: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

SS és EIP regiszterek tartalma által van eltárolva, aeghívott privilegizálási szint veremében vannak elm

melyek a 3-as szintről entve.

térési címet emeli le (pop). ormális körülmények között, a visszatérési mutató érvényes, mivelhogy

egy CALL vagy INT utasítás hozta létre. Mégis a processzor elvégzi a priv lehetőség, hogy az aktuális pro hatta a mutató értékét, vagy nem sikerült me A viszszatérési utasítás által a veremről

emelt kódszegmens-szelektor RPL értéke meg kell egyezzen a hívó

tabb szintek ányába. Ha a RET utasítás talál egy olyan elmentett CS értéket,

lynCPL, pilyen tí 1.

m Egy call-kapus hívás nem ellenőrzi az új verembe másolt szavak értékeit. A meghívott procedúrának kell ellenőriznie minden paraméter helyességét.. Egy későbbi részben található magyarázat arra, hogy miként lehet az ARPL, VERR, VERW, LSL, és LAR utasítások segítségével a mutatók értékeit ellenőrizni. 3.7.6.2. Visszatérés egy procedúrából A RET utasítás "near" formái csak az aktuális kódszegmensen belül végeznek vezérlésátadást, ezért csak a limit-ellenőrzésnek vannak alávetve. A CALL utasítást követő parancs ofszetje a veremből lesz leemelve és az EIP-be töltve. A processzor ellenőrzi, hogy ez az ofszet nem haladja-e meg az aktuális kódszegmens határát. A RET utasítás "far" formája egy korábbi "far" típusú CALL utasítás által a veremre lenyomott visszaN

ilégium-ellenőrzést, mivel fennáll az a cedúra megváltoztatgtartania helyesen a vermet.

leprocedúra privilegizálási szintjével. Egy másik szegmensbe való visszatérés megváltoztathatja a privilegizálási szintet, de csakis a kevésbé privilegizálirame ek az RPL-je számszerint nagyobb (kevésbé privilegizált) mint a

rivilegizálási szintek közötti visszatérés (return) megy végbe. Egy pusú visszatérés a következő lépéseket teszi meg:

A 3.49. ábrán bemutatott ellenőrzéseket végzi el, és a CS, EIP, SS és ESP regisztereket feltölti a verembe elmentett előző értékeikkel.

188

Page 187: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

2. Az SS és ESP regiszterek régi tartalmát (az aktuális verem tetején)

. A DS, ES, GS szegmensek tartalmát ellenőrzi. Ha ezen regiszter

privilegizáltabb szegmensekhez férjen hozzá.

A kivétel típusa

Hibakód

a RET utasítás által meghatározott számú Byte-tal kiigazítja. A keletkező ESP értéket nem veti alá veremszegmens határ ellenőrzésnek. Az a tény, hogy az ESP értéke a határon kívülre esik, nem vevődik észre mindaddig, amíg a következő verem-műveletre sor nem kerül. ( A visszatérő procedúra SS és az ESP regisztereinek tartalma nincs eltárolva; normális esetben ezek értékei megegyeznek a TSS által tartalmazott értékekkel.)

3közül bármelyik egy olyan szegmensre vonatkoznak, amelynek DPL-je kisebb mint az új CPL (kivéve az illeszkedő szegmenseket), a szegmensregiszterbe a nullás szelektor töltődik be (Index=0, TI=0). A RET utasítás egymagában ilyen esetben nem jelez kivételeket; ugyanakkor bármely következő memóriahivatkozás, amely nullás szelektort tartalmazó szegmensregisztert alkalmaz, általános védelmi hiba kivételt eredményez. Ez meggátolja a kevésbé privilegizált kódot abban, hogy egy privilegizáltabb procedúra által a szegmensregiszterben hagyott szelektorok segítségével

Az ellenőrzés típusa

A verem teteje + 7 a veremszegmens határán belül kell legyen

Stack 0

A visszatérő kódszegmens RPL-je nagyobb kell legyen mint a CPL

Védelmi CS

A visszatérő kódszegmens szelektora nem lehet nullás szelektor

Védelmi CS a A visszdeszkroptor-táblázat határán belül kell lennie

atérő kód szegmensdeszkriptorának a Védelmi CS

189

Page 188: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

A visszatérést végző szegmensdeszkriptor kódszegm

Védelmi CS ensre kell vonatkozzon

A visszaté k memóriában (present)

Szegmens nincs jelen

CS rő ódszegmens jelen kell legyen a

A sszatérő, nem illeszkedő (nonconfokell legyen a v

elektorának RPL értékével, illetve a

kódszelegyen

elektorának RPL értékével.

Védelmi CS virming) kódszegmens DPL-je egyenlő

isszatérő kód szegmens-szvisszatérő, illeszkedő (conforming)

gmens DPL-je kisebb vagy egyenlő kell a visszatérő kód szegmens-

sz

ESP + N + 15 * a veremszegmens határán belül kell legye

Stack hiba 0 n

Az ESP +szelektor nem

N + 12 * helyen található szegmens- lehet nullás szelektor

Védelmi SS

Az ESP + +szegmensdeszhatárán belül k

N 12 * helyen található kriptornak a deszkriptor-táblázat ell lennie

Védelmi SS

A veremsz gm tor írható/olvasható kell legyen

Védelmi SS e ensdeszkrip

A veremszegmmemóriában (p

ens jelen kell legyen a resent)

Stack hiba SS

A régi veremsgyen a régi k

zegmens DPL-je egyenlő kell ódszegmens RPL értékével

Védelmi SS le A régi veremszegmens-szelektor RPL-je egyenlő kell legyen a régi veremszegmens DPL értékével

Védelmi SS

190

Page 189: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

* N a RET utasítást követő közvetlen operandus

3.49. ábra: Szintek közötti visszatérés ellenőrzés 3.7.7. Az operációs rendszer számára lefoglalt utasítások Azokat az utasításokat, amelyek a védelmi mechanizmust érinthetik, vagy amelyek befolyásolhatják a rendszer általános teljesítményét, csak megbízható procedúrák használhatják. A proceszszornak két ilyen utasításcsoportja van: 1. Privilegizált utasítások - amelyek a rendszer vezérlésére

használatosak 2. Érzékeny (sensitive) utasítások - amelyek az I/O, illetve az I/O-

függő műveletekre használatosak 3.7.7.1. Privilegizált utasítások Azok az utasítások, amelyek a védett szolgáltatásokat érinthetik, csak akkor hajthatók végre, ha a CPL értéke 0 (legprivilegizáltabb). Ha ezen utasítások közül bármelyik 0-tól eltérő CPL mellett hajtódik végre, általános védelmi hiba kivétel generálódik. Ezen utasítások közé tartoznak a következők: CLTS Clear Task-Switched Flag - taszkváltásjelző bit törlése HLT Halt Processor - leállás INVD Invalidate Cache - belső cache érvénytelenítése

VLPG Invalidate TLB Entry - TLB bejegyzés érvénytelenítése GDT Load GDT Register - a globális deszkriptortáblázat-regiszter

betIDT

INL

öltése L Load IDT Register - a megszakítás

deszkriptortáblázatregiszter betöltése LLDT Load LDT Register - a lokális deszkriptortáblázat-regiszter

betöltése LMSW Load Machine Status Word - a gépi állapotszó betöltése LTR Load Task Register - taszkregiszter betöltése

191

Page 190: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

MOV to/from CRn - Move to Control Register n - adatmozgatás a CRn vezérlőregiszterbe

MOV to/from DRn - Move to Debug Register n - adatmozgatás a DRn nyomkövetőregiszterbe

WBINVD Write Back and Invalidate Cache - Cache-be való visszaírás és érvénytelenítés

.7.7.2. Érzékeny utasítások

éges, ogy védve legyenek, ugyanakkor az is szükséges, hogy az olyan

procedúrák is használják őket, amelyek a 0-tól eltérő privilegizálási szinten futnak. Az I/O műveletek védelmi mechanizmusát a második kötet részletezi.

ző pésekből áll:

végzi az tasítás végrehajtása pillanatában, az első ellenőrzés elvégzéséhez a

LAR (Load Access Rights) - hozzáférési jogot tartalmazó Byte betöltése

3 Az I/O műveletekkel foglalkozó utasítások számára szüksh

3.7.8. Mutatók érvényességét ellenőrző utasítások A mutatók érvényességét ellenőrző utasítások. a privilegizálási szintek közötti szigeteltség fenntartására szükséges. A követkelé 1. Annak ellenőrzése, hogy a mutatót szolgáltatónak van-e joga a

szegmenshez hozzáférni. 2. Annak ellenőrzése, hogy a szegmens típusa kompatibilis-e a

felhasználási céljával. 3. Annak ellenőrzése, hogy a mutató ofszetje nem haladja-e meg a

szegmenshatárt. Bár a processzor a 2. és 3. ellenőrzést automatikusan elusoftware segítsége szükséges. E cél érdekében adott az ARPL utasítás. A software is alkalmazhatja inkább a 2. és 3. lépést, ahelyett, hogy egy kivétel megjelenésére várakozna. Ezen célt szolgálják a LAR, LSL, VERR, és VERW utasítások.

192

Page 191: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

A LAR utasítás annak ellenőrzésére használatos, hogy a mutató kompatibilis privilegizálási szintű és típusú szegmensre vonatkozik-e. A LAR utasításnak egyetlen operandusa van: azon deszkriptor szegmens-szelektora, amelynek a hozzáférési jogát vizsgálja. Az illeszkedő (conforming) kódszegmensek bármely privilegizálási szintről hozzáférhetők. Bármely más szegmensdeszkriptor olvasható kell legyen a CPL-nél, illetve a szelektor RPL értékénél számszerint nagyobb (kevésbé privilegizált) privilégiumszinten. Ha a deszkriptor olvasható, a LAR

tasítás kiválasztja a deszkriptor második dupla-szavát, lemaszkolja ezt az rtéket 00FxFF00H-val, eltárolja az eredményt a meghatározott 32 bites

llítja a ZF bitet. (Az x azt mutatja, hogy a rolt érték megfelelő négy bitje határozatlan.) A betöltés után a

nt a DPL értéke, vagy ha a szegmensszelektor átlépné a eszkriptortáblázat határát, a visszaadott érték 0 lesz és a ZF bit törlődik.

l a eszkriptorokkal lehetséges, amelyek szegmenseket írnak le (adat, kód,

zegmensek (veremszegmensek), más típusú egmensektől eltérő módon kezelik a határt. Úgy a LAR, mint a LSL

uécélregiszterbe, és magasra átáhozzáférési jogok azonnal tesztelhetők. Bármely érvényes deszkriptortípust lehet a LAR utasítással tesztelni. Ha az RPL vagy CPL nagyobb mid LSL (Load Segment Limit) a szegmenshatár betöltése Az LSL utasítás lehetővé teszi a software számára, hogy egy szegmensdeszkriptor határát tesztelje. Ha egy (memóriában vagy egy regiszterben levő) szegmens-szelektor által meghatározott deszkriptor a CPL mellett olvasható, az LSL utasítás feltölti a megadott 32 bites regisztert egy 32 bites, Byte-felbontású határral, amelyet az összeillesztett limit mezők és a deszkriptor G bitje alapján számít ki. Ez csak azokkadtaszk-állapot, és lokális deszkriptortáblázat); a kapudeszkriptorok nem érhetők el. (A 3.50. ábra részletesen felsorolja, hogy melyek az érvényes típusok, és melyek nem.) A limit értelmezése a szegmens típusától függ. Például, a lefele bővülő adatsszutasítások esetén a ZF bit akkor van magasra állítva, ha a betöltés sikeres, ellenkező esetben a ZF bit törlődik.

Típus kód Deszkriptor típus Érvényes? 0 fenntartva nem 1 fenntartva nem

193

Page 192: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

2 LDT igen 3 fenntartva nem 4 fenntartva nem 5 Taszk kapu nem 6 fenntartva nem 7 fenntartva nem 8 fenntartva nem 9 Lehetséges 32 bites TSS igen A fenntartva nem B Foglalt 32 bites TSS igen C 32 bites call kapu nem D fenntartva nem E 32 bites megszakítás kapu nem F 32 bites trap kapu nem

3.50. ábra: Érvényes deszzkriptor típusok LSL műveletekhez

Egy újabb ellenőrzés, az illeszkedés-ellenőrzés (alignment check) alkalmazható a CPL=3 esetén. Amikor úgy a CR0-beli AM bit, mint az AC flag is 1-re van állítva, a nem illesztett (unaligned)

emóriahivatkozások kivételeket generálnak. Ez azon programok számára hasznos, amelyek a mutatók alsó két bitjét használják az általuk megcímzett adatstruktúra típusának azonosítására. Például, egy matematikai könyvtár szubrutinja elfogadhat numerikus adatstruktúrákra mutató pointereket. Ha e struktúra típusához az 10 (bináris) kódot társítjuk az erre a típusra mutató pointer legalsó két bitjén, a matematikai szubrutinok kijavíthatják a típuskódot -10 (bináris) eltolás hozzáadásával. Abban az esetben, ha a szubrutin helytelen mutatótípust kapna, egy illesztetlen (unaligned) hivatkozás jönne létre, amely kivételt generálna. Az illeszkedés-ellenőrzés felgyorsítja a szimbolikus feldolgozású (azaz a mesterséges intelligencia) nyelvekben megírt programok feldolgozását, mint amilyen a Lisp, Prolog, Smalltalk és a C++. A pointer-végek típus-ellenőrzésének felgyorsítására lehet használni.

m

194

Page 193: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

3.7.8.1. Deszkriptor érvényességének ellenőrzése A processzor két olyan utasítással rendelkezik, a VERR és VERW utasításokkal, amelyek megállapítják, hogy a szegmens-szelektor a jelenlegi CPL mellett írható vagy olvasható szegmensre mutat. Egyikük sem okoz védelmi hibát, ha a szegmens nem hozzáférhető. VERR (Verify for Reading) a szegmens olvashatóságának ellenőrzése A VERR utasítás olvasásra ellenőrzi a szegmenst és ha a CPL mellett a szegmens olvasható, beállítja a ZF bitet. A VERR utasítás a következőket ellenőrzi: • Hogy a szegmens-szelektor a GDT vagy az LDT határain belüli

szegmensdeszkriptorra mutat-e. • Hogy a szegmens-szelektor egy kód- vagy adatszegmens deszkriptort

indexel. • Hogy a szegmens olvasható, és egy kompatibilis privilegizálási szintje

van-e.

Az adatszegmensek és a nem illeszkedő (nonconforming) ensek privil gálja, hogy a DPL

evésbé privilegizált sz

a eVERWazt vizsgálja, hogy az deszkriptor a határok között van-e, hogy szegme

rivileg CPL-hez, akár a szelektor RPL értékéhez

ódsz

kódszegm égium-ellenőrzése azt vizs

int legyen akár a CPL-hez, akár a szelektor RPL kértékéhez viszonyítva. Az illeszkedő (conforming) szegmensek nem kerülnek privilégiumszint-ellenőrzés alá. VERW (Verify for Writing) a szegmens írhatóságának ellenőrzése A VERW utasítás ugyanazokat a képességeket nyújtja a szegmens írásr llenőrzéséhez, mint a VERR utasítás Akárcsak a VERR utasítás, a

parancs is beállítja a ZF bitet, ha a szegmens írható. Az utasítás

nsdeszkriptor legyen, írható-e, illetve hogy a DPL-je kevésbé izált szint legyen akár ap

viszonyítva. Attól függetlenül, hogy illeszkedők (conforming) vagy sem, a k egmensek soha sem írhatók.

195

Page 194: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.7.8. mutatóomlasz

Erre egy közönséges például az FREAD (fájl_azonosító, Byte-ok áma, puffer mutató) rendszerprocedúra. Ez a képzeletbeli procedúra egy

y pufferbe, fölülírva bármit, ami ár benne található. Az alkalmazások szintjén futó programok kéréseit

szolgálja ki, de privilegizált módon kell szaladjon annak érdekében, hogy lvashasson a rendszer I/O pufferéből. Ha a felhasználói program egy

hibás puffermutató egy olyat, amely rivilegizált címtartományban levő kritikus kódra vagy adatra mutatna - a rocedúra a rendszer összeomlásához vezető kárt okozhatna.

megenga privikell lepéldában az RPL annak a felhasználói programnak a CPL-je volna, melyik meghívta a rendszerszintű procedúrát. A processzor

toma

Annak érdekében, hogy ki legyen használva a processzor által elvégzett RPL-ellenőrzés előnye, a meghívott procedúrának csak azt kell ellenőriznie, hogy minden neki átadott szegmens-szelektornak az eredeti hívó CPL-jének megfelelő, vagy annál kevésbé privilegizált RPL értéke van. Ez garantálja azt, hogy a szegmens-szelektorok nem privilegizáltabbak a forrásaiknál. Ha a szelektor egy olyan szegmenshez való hozzáférésre van használva, amelyet a forrás nem lenne képes közvetlenül elérni, tehát az RPL a szegmens DPL értékénél kevésbé privilegizált, általános védelmi hiba kivétel keletkezik amikor a szelektor a szegmensregiszterbe kerül. ARPL (Adjust Requested Privilege Level) - a szelektor RPL mezőjének beállítása

2. Mutatók integritása és az RPL

A szükséges privilegizálási szint (RPL) megelőzheti az olyan k balesetszerű használatát, amelyek kevésbé privilegizált szintről tanák össze a privilegizáltabb kódot.

szlemezen levő fájlból adatokat olvas be egm

ot adna át ennek a procedúrának -

pp

Az RPL használata képes megelőzni ezt a problémát. Az RPL edi egy privilégium-fölülíró hozzárendelését egy szelektorhoz. Ez

légium-fölülíró annak a kódszegmensnek a privilegizálási szintje gyen, amely a szegmens-szelektort létrehozta. A fennemlített

aau tikusan ellenőriz minden szegmensregiszterbe betöltött szegmens-szelektort, hogy megállapítsa: az RPL je megengedi-e a hozzáférést.

196

Page 195: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

Az ARPL utasítás egy szegmens-szelektor RPL értékét beállítja az eredeti érték, és egy általános regiszterben tárolt szegmensszelektor RPL mezőjének értéke közül a nagyobbik (kevésbé privilegizált) értékre. Az RPL mező a szegmens-szelektor és a regiszter két legjelentéktelenebb bitje. Az utóbbi általában a hívó CS regiszterének verembeli másolata. Ha a beállítás megváltoztatja a szelektor RPL-jét, a ZF bit beállítódik (set); ellenkező esetben a ZF bit törlődik. 3.7.9. Lapszinti védelem A védelem úgy szegmensekre, mint lapokra is vonatkozik. Ha a memóriaszegmentálás sík modelljét használjuk, a lapszinti védelem meggátolja a programokat abban, hogy egymást zavarják. Minden egyes memóriahivatkozás megvizsgálás alá kerül annak érdekében, hogy meg lehessen állapítani: eleget tesz-e a védelmi feltételeknek. Minden ellenőrzés a memóriaciklus elindítása előtt kerül elvégzésre; bármely szabálysértés meggátolja a ciklus elkezdését és kivételt eredményez. Minthogy az ellenőrzések a címfordítással párhuzamosan történnek, nincs teljesítmény-kiesés. Két lapszintű védelmi ellenőrzés létezik: 1. A megcímezhető tartományt érintő megszorítások 2. Típusellenőrzés

A véde tt üzemmódú ivétel-mechanizmus magyarázatárol majd később lesz szó. Ez a rész zokat a védelem-megszegéseket írja le, amelyek kivételekhez vezetnek.

laphozzáférést kontrollálják. A védelmi ellenőrzések mind az első-, mind második szintű laptáblázatokra is hivatkoznak.

lem megsértése kivételt eredményez. A véde

ka 3.7.9.1. A laptáblázat bemenetek által tartalmazott védelmi paraméterek A 3.51. ábra a laptáblázat bemenet azon mezőit emeli ki, amelyek a

a

197

Page 196: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

31 30 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 029

Phozzáf. 0 0 D A C WSD T W

Lapkeret cím 31-12P R

_P U

_

3.51. ábra:

i szintet ülönböztetünk meg, a 0-tól 3-ig. A lapok esetében két privilegizálási

özmeghajtó ogramok), illetve védett rendszeradatok (mint amilyenek

i számára.

, minden lap hozzáférhető. Ha a processzor felhasználói inten fut, csak a felhasználói szint lapjai érhetők el.

R/W - Írható/olvasható

U/S - User/supervisor

Egy laptáblázat bejegyzés védelmi mezői 3.7.9.1.1. A megcímezhető tartományt érintő megszorítások A privilégium lapok esetében a szegmensekhez képest eltérő módon értelmezett. A szegmensek esetében négy privilegizáláskszint létezik: 1. Felügyelő-szint (U/S=0) - az operációs rendszer, más

rendszersoftware-ek (mint például az eszkkezelőpra laptáblázatok) részére.

2. Felhasználói szint (U/S=1) - az alkalmazások kódja és adata

A szegmentálásra használt privilegizálási szintek a lapozásnál használt privilegizálási szintre vannak leképezve. Ha a CPL értéke 0, 1, vagy 2, a processzor felügyelő-szinten dolgozik. Ha a CPL=3, a processzor felhasználói szinten működik. Amikor a processzor felügyelő-szinten dolgoziksz

198

Page 197: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

3.7.9.1 A véde

. Csak-olvasási hozzáférésű (R/W=0)

WP bitolvashaprocesstartozómegjelszintű nem ol iba kivétel

enerálódik bármely védelmi szabály megsértésére tett kísérlet esetén.

processlegyenbitjéne a felhasználói

int lapjainak írásvédettsége iránti " fogékonyságát".

másolálehet, afel új taszkok létrehozására. Egy új taszk létrehozásakor lehetséges a

ülő szegmens címtartományának teljes lemásolása. Ez a származtatott

lapszeton-wriszegmemint acsak akbit alkalapra v

.2. Típusellenőrzés

lmi mechanizmus csak két típusú lapot ismer fel:

12. Írási/olvasási hozzáférésű (R/W=1).

Amikor a processzor felügyelőszinten szalad és a CR0-s regiszter je 0-s (a reset inicializálást követő állapota), minden lap írható és tó is egyben (az írás-védettség figyelmen kívül marad). Ha a zor felhasználói szinten fut, csak azok a felhasználói szinthez lapok írhatók, amelyek írási/olvasási hozzáférésre vannak ölve. Az írható/olvasható, illetve a csak-olvasható felhasználói lapok olvashatók. A felügyelő-szintű lapok sem nem írhatók, sem vashatók felhasználói szintről. Egy általános védelmi h

g

A 386-os processzorral ellentétben, a 486-os és Pentium zorok megengedik, hogy a felhasználói szintű lapok írásvédettek

ek a felügyelő módbeli hozzáférések ellen. A CR0 regiszter WP k magasra állítása engedélyezi a felügyelő-szintnek

sz

A felügyelő-ellenes írásvédelem lehetősége az ún. "írás közbeni s" (copy-on-write) stratégiájának implementálása esetén is hasznos melyet némely operációs rendszer, mint például a UNIX, használ

sztaszk számára egy komplett másolatát nyújtja a szülő szegmens- és

tjének. Egy alternatív stratégia, az "írás közbeni másolás" (copy-te) tárterületet és időt takarít meg azzal, hogy a gyermek taszk nseit és lapjait ugyanazokra a szegmensekre és lapokra képezi le,

melyeket a szülő taszk is használ. A lapnak egy egyedi másolata kor kerül megteremtésre, amikor a taszkok egyike a lapra ír. A WP lmazásával a felügyelőprogram detektálhatja a felhasználói-szintű

aló írási kísérletet, és ugyanakkor átmásolhatja is a lapot.

199

Page 198: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.7.9.1.3. A védelem kombinálása a laptáblázatok mindkét szintjén Bármely lap esetén, a lapcímtárbeli bejegyzésének (első szintű laptáblázat) védelmi attribútumai különbözhetnek a második szintű laptáblázat bemeneteinek attribútumaitól. A processzor úgy ellenőrzi egy

p védelmét, hogy a lapcímtárban (első szintű laptáblázat), mint a ásodi

van.

SS és IDT).

lam k szintű laptáblázatban megadott védelmi információt is tanulmányozza. A 3.52. ábra bemutatja a védelmi attribútumok lehetséges kombinációiból adódó védelmet, akkor, ha a WP bit törölve 3.7.9.1.4. A lapvédelem fölülírói Némely hozzáférés úgy van leellenőrizve, mintha a 0-s privilegizálási szinten végbemenő hozzáférések volnának, a CPL bármely értéke esetén: • Hozzáférés a szegmensdeszkriptorokhoz (LDT, GDT, T • Hozzáférés a belső veremhez, egy CALL utasítás, vagy kivételek és

megszakítások közben, ha a privilegizálási szint megváltozik.

Lapcímtár bejegyzés Laptáblázat bejegyzés Kombinált effektus Privilé- gium

hozzáfér- hetőség

Privilé- gium

hozzáfér- hetőség

Privilé- gium

hozzáfér- hetőség

User Csak User Csak User Csakolvasható olvasható

olvasható

User olvasható

Írolvasható

User Csak tó

Csak User ható/ olvasha

User Csolvasható

User Csak olvasható

Írható/ olvasható

User ak

Userasható

Írolvasható

User Írható/ sható

Írható/ olv

User ható/ olva

User isor Csaolvasható

Supolvasható

Csak olvasható

Superv k ervisor Írható/

User Csak olvasha

Supervisor Írható/ Supervisor Írható/ olvasható tó olvasható

200

Page 199: Otodik Generacios Processzorok_pentium

Védelmi mechanizmusok

Usertó

Csaolvasható

Supolvasható

Írható/ olvasha

Supervisor k ervisor Írható/

User Írhaolvasható

Supolvasható

Írható/ olvasható

Supervisor tó/ ervisor Írható/

Supervisor Csak User Csak olvasható

Supervisor Írható/ vasható olvasható ol

Supervisor Csak User Írható/ olvasható

Supvasható olvasható

ervisor Írható/ ol

Supervi User Csak olvasható

Supvasható

sor Írható/ olvasható

ervisor Írható/ ol

Supervisható

Írható/ olvasható

Supolvasható

sor Írható/ olva

User ervisor Írható/

Su vi r Csaolvasható

Supolvasható

per sor Csak olvasható

Superviso k ervisor Írható/

Su vi r Írhaolvasható

Sup

per sor Csak Supervisoolvasható

tó/ ervisor Írható/ olvasható

Supervisor Írható/ Supervisor Csak olvasható

Supervisor Írható/ vasható olvasható ol

Supervi rvisor Írható/ olvasható

Supolvasható

sor Írható/ olvasható

Supe ervisor Írható/

pcímtár és laptáblázat védelem

3 . ensvédele omb engedélyezett, a processzor először a szegmens-, m a i. Ha a proce r véd el akár a s szintjén, a művelet nem hajtódik végre, ehelyett egy kivétel keletkezik. Ha a szegmentálásnál kivétel generálódik, a művel hiba kivételt.

Például, adatszegmenst efiniálni, amelynek vannak egyes csak-olvasható, illetve más,

ázat) bejegyzéseinek U/S és R/W bitjei az írási ozzáférés letiltását határoznák meg, a lapcímtár-bemenet által kijelölt

3.52. ábra: Kombinált la

.7.9 2. Lap- és szegm

Ha a lapozás

m k inálása

ajd lapvédelmet értékeli kzegmensek, akár a lapok

et nem vált ki lap

sszo elemsértést fedez f

lehetőség van egy olyan kiterjedt

dírható/olvasható részei is. Ebben az esetben, a csak-olvasható részek lapcímtár- (vagy laptáblh

201

Page 200: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

lapok számára (vagy a második szintű laptáblázatban megadott egyedi sználni például, egy olyan

amelynek bizonyos részei csak-lvasha tok, vagy ROM-ban tárolt konstansok setén). Ez, egy sík adattartományt, egyetlen, óriási szegmensként

ugyanavirtuáliterülete

lapok számára). Ezt a technikát fel lehetne hakiterjedt adatszegmens definiálására, o tó típusúak (közös adaedefiniál, amely sík tartomány hozzáféréséhez sík mutatók szükségesek,

kkor védelem alá helyezve a közös adatokat, a megosztott, s címterületre leképezett állományokat, illetve a felügyelőprogram it.

202

Page 201: Otodik Generacios Processzorok_pentium

Védett üzemmódú multitaszking

3.8. tt üz A Pentium processzor bizt ltitaszking számára szükséges hardware támogatást. A taszk egy olyan program, amely éppen

r on m n végreh alatt. m k , vagy egy call utas eg. Két különböző típusú, taszkokra vonatkozó deszkriptor létezik, amelyek egy deszkriptor-táblázatban me k: taszk-állapot-szegmens deszkriptorok és a taszkkapuk. A s á deszkriptortípus bárm k-kapcs letkezik. A taszkkapcsolás t egy procedúrahívás,

zo ációt tárol el. A taszkkapcsolás átadja a vezérlést egy teljesen új környezetnek, egy taszk környezetének. Ehhez

ro em eré e, A és

procedúrákkal ellentétben a taszkok ató A taszkkapcsolás nem be. A processzor ll emóriában tárolt adatsruktúrába, az ún. taszk-llap ató gi

otát nnak érdekében, hogy a taszkot folytatni lehessen. A processzor

akítások és kivételek taszkkapcsolásokat okozhatnak (ha

Véde emmódú multitaszking

osítja a mu

fut, vagy amely arajtás

a vár, hogy fussEgy taszkot egy

ítás hív m

, miközben egyegszakítás, egy

ásik program vaivétel, egy ugrás

gjelenhetnemikor a vezérlé

olás ketadódik a két elyikének, tasz

olyan, mincsak több process r-állapotinform

szükség van a pideértve az EFL

cesszor majdnGS regisztert

összes regiszt a szegmensregisztereket is. A

nek elmentésér

nem újraindíthmit a verem

k (re-entrant). nyom le sem

áá

apotinformáció a mot-szegmensbe lesz elmentve. A multitaszkingot támog

szterek és adatstruktúrák a következők: re

• taszk-állapot-szegmens • taszk-állapot-szegmensdeszkriptor • taszkregiszter • taszkkapudeszkriptor

A felsorolt struktúrák segítségével, a processzor átadhatja a

ezérlést egyik taszktól a másiknak, elmentve az eredeti taszk állapvaezenkívül két további taszk-szervező lehetőséget is felkínál: 1. A megsz

ez szükséges a rendszerben). A processzor nemcsak a megszakítások és kivételek kezelésére képes taszkkapcsolást végrehajtani, hanem automatikusan vissza is tud kapcsolni, amikor a megszakítás vagy kivétel visszatér (return). Ez a mechanizmus képes a megszakítás-taszkok alatt megjelenő megszakítások kezelésére.

203

Page 202: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

2. Minden egyes taszkkapcsoláskor, a processzor egy új LDT-re is

képes váltani. Ez arra használható, hogy minden taszknak egy különálló logikai cím - fizikai cím megfeleltetést lehessen biztosítani. Ez egy plusz védelmi lehetőség, ugyanis így a

eg lehet előzni azt, hogy egymással ősszeakadjanak. A PDBR regiszter is újratöltődik.

i a taszkok egymás közötti elszigetelésének biztosítására.

alkalmprogramkülönö lmentésére szükséges idő túl hosszú lehet. Az ilyen helyzetekben egy

adatstr meg. Ez hetővé teszi egy kisebb terjedelmű processzor állapotinformáció menté

bizonyos típusú szegmensbe vannak elmentve, melyet taszk-állapot-szegmensnek, vagy TSS-nek nevezünk. A 3.53.

ja be (a 16 ites, 80286-os processzor taszkjaival való kompatibilitást egy más típusú

ikus mezők, amelyeket a processzor minden taszkkapcsoláskor felfrissít. Ezek a mezők a következőket

• Az általános regisztereket (EAX, ECX, EDX, EBX, ESP, EBP, ESI, és EDI).

taszkokat el lehet egymástól szigetelni, és m

Ez a tény megengedi, hogy a lapozómechanizmust is fel lehessen használn

A multitaszking-mechanizmus használata opcionális. Egyes

azások esetén lehet, hogy nem a legjobb módja a végrehajtás megszervezésének. Ahol a megszakításokra

sen gyors válaszra van szükség, ott a processzor állapotánakelehetséges kompromisszum az, hogy használjuk a taszkokra vonatkozó

uktúrákat, de a taszkkapcsolást software úton valósítsuk leel sét. Ez a technika egyike lehet azon optimizálásoknak, amelyek a teljesítmény növelésére alkalmazhatók. 3.8.1. Taszk-állapot-szegmens Egy taszk visszaállításához szükséges processzor-állapotinformációk egyaábra a 32 bites CPU-kra írt taszkok TSS formátumát mutatbTSS biztosítja, de erről a második kötetben lesz részletesebben szó). Egy TSS mezői két fő kategóriába oszthatók: 1. Dinam

tárolják:

204

Page 203: Otodik Generacios Processzorok_pentium

Védett üzemmódú multitaszking

• A szegmensregisztereket ( ES, CS, SS, DS, FS, és GS). • A flag regisztert ( EFLAGS)

• Az utasításmutatót (EIP) • Az előző taszk TSS-ének szelektorát (csak akkor frissíti

fel, amikor egy return várható). 2. Statikus mezők, amelyeket a processzor olvas, de nem módosít.

Ezek a mezők a taszk létrehozásakor lesznek beállítva. Ezen mezők a következőket tárolják:

• A taszk LDT-jének szelektorát. • A taszk PDBR-jét (CR3). • A 0-s, 1-es és 2-es privilegizálási szintek vermeinek

logikai címét. • A T bitet (debug trap bit), amely ha 1-re van állítva, arra

készteti a processzort, hogy valahányszor egy taszkkapcsolás jelenik meg, debug-kivételt hozzon létre. ( A hibakeresésről több információ található a második kötetben.)

• Az I/O engedélyező bittérkép és a megszakítás átírányitó

bit-térkép báziscímét. Ha jelen vannak, ezek a bittérképek a TSS magasabb címeire kerülnek eltárolásra. A báziscím az I/O térkép elejére, illetve a 32 Byte-os megszakítás térkép végére mutat. (A megszakítás-átirányításról további információk szintén a második kötetben találhatók).

205

Page 204: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

0 0 00 0 0 0 0 0 0 0 0 0 T

0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0

0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

A taszk LDT szelektora

FSGS

DSSSCSES

EDIESIEBP 60

646872768084889296

ESP

SS1

SS0ESP0 4

8121620

36

56

1000

azon rtaszkkarészébejelen le

I/O térkép bázis cím1531

EBXEDXECXEAX

EFLAGS40444852

EIPCR3 (PDBR)

SS2ESP2

242832

ESP1

LINK (régi TSS szelektor) 0

3.53. ábra: 32 bites taszk állapot szegmens

Ha a lapozás használt, fontos megelőzni a laphatároknak a TSS észébe történő elhelyezését, melyekből a processzor olvas a pcsolás idején (az első 104 Byte). Ha egy laphatár a TSS ezen kerül, a határ mindkét oldalán található lapoknak egyidőben kell nniük. Azonfelül, ha a lapozás engedélyezett, a kimenő taszk TSS-

206

Page 205: Otodik Generacios Processzorok_pentium

Védett üzemmódú multitaszking

ének mtábláza illetve írható/olvashatónak kell

egjelölni. Visszaállíthatatlan hiba, ha azután érkezik be egy laphiba,

TSS ol 3.8.2.

egfelelő lapokat, az új taszk TSS-ét, és mindezek deszkriptor-t bemenetét jelenlévőnek,

mvagy egy általános védelmi hiba kivétel, miután a processzor megkezdte a

vasását.

A TSS deszkriptor Mint minden más szegmenst, a taszk-állapot-szegmenst is egy deszkriptor határoz meg. A 3.54. ábra bemutatja a TSS deszkriptor formátumát.

TSS Deszkriptor

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

Báziscím 31-24 Báziscím 23-16

Báziscím 15-0 Szegmens határ 15-0

GAVL

Szegmenshatár

19-16DPL +4

+0

00 P 0 1 0 B 1

Típus

31

- A rendszer software számára elérhetőAVL- Foglaltság bit-

BPL

a 11-es (decimális) érték foglalt taszkot ent.

Deszkriptor privilégium szint- Szemcsézettség- A szegmens jelenlétét jelző bit

DGP

3.54. ábra: TSS Deszkriptor

A típusmező Foglalt (Busy) bitje jelzi, hogy a taszk foglalt-e. Egy foglalt taszk éppen fut, vagy arra vár, hogy futhasson. Ha a típusmező értéke 9, inaktív taszkot jelöl, jel A taszkok nem rekurzívak. A processzor arra használja a Foglalt bitet, hogy a megszakított taszkok hívására tett kísérleteket detektálja.

207

Page 206: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

(Granu zegmens

eszkriptorokbeli szerepükkel azonos funkciójuk van. A Limit mezőnek

keveseáttérés,generászüksélimit ér

Egy TSS deszkriptorhoz hozzáférő procedúra kiválthat egy

mezőinek értéke 3-nál kisebbnek kell lennie, hogy csak a privilegizált softwa proceddeszkrimemórA TSS deszkriptornak egy szegmensregiszterbe való töltése kivételt

enerál. A TSS deszkriptorok csak a GDT-ben tartózkodhatnak. Egy TSS ozzáférésére tett olyan kísérlet, amely egy magasra állított TI bittel

rendelkező szelektort alkalmaz (ami az aktuális LDT-t jelöli), kivételt eredményez. 3.8.3. Taszkregiszter A taszkregiszter (TR) az aktuális TSS megtalálását szolgálja. A 3.55. ábra azt az utat mutatja, amit a processzor megtesz a TSS eléréséhez. A taszkregiszternek van egy látható része (tehát egy olyan része, amelyet a software olvasni és módosítani képes), és egy láthatatlan része (azaz egy olyan része, amelyet a processzor tárol, illetve amely a software számára elérhetetlen). A látható részben levő szelektor egy TSS deszkriptor GDT-beli indexe. A processzor a TR láthatatlan részét a TSS

A Bázis, Limit, és DPL mezőknek, illetve a Felbontás larity) és Jelenlevő (Present) biteknek az adats

d67H-nál nagyobb vagy egyenlő értéke kell legyen, ami egy Byte-tal

bb egy taszk-állapot minimális méreténél. Egy olyan taszkra való amelynek a TSS deszkriptor-limitje kevesebb mint 67H, kivételt l. Egy I/O engedélyező bittérkép használatakor nagyobb limitre van g. Az operációs rendszernek akkor is szüksége lehet egy nagyobb tékre, ha a TSS-ben a rendszer kiegészítő adatokat tárol.

taszkkapcsolást. A rendszerek többségében a TSS deszkriptorok DPL

re-ek végezhessenek taszkkapcsolást.

A TSS deszkriptorhoz való hozzáférés nem adja meg a úrának azt a képességet, hogy olvashassa vagy módosíthassa a ptort. Az olvasás vagy a módosítás csak az ugyanarra a iaterületre leképezett adat deszkriptor alkalmazásával lehetséges.

gh

208

Page 207: Otodik Generacios Processzorok_pentium

Védett üzemmódú multitaszking

deszkriptorból származó báziscím és limit értékének tárolására használja. Ezeknek az értékeknek a megtartása a taszk végrehajtását sokkal hatékonyabbá teszi, mivel a processzornak nem kell ezeket az értékeket a memóriából elérnie, azért, hogy az aktuális taszk TSS-ét megcímezze. Az LTR és STR utasítások a taszkregiszter látható részének módosítására és olvasására használatosak. Mindkét utasításnak egyetlen operandusa van, egy memóriában elhelyezett 16 bites szegmens-szelektor, vagy egy általános regiszter. Az LTR (Load Task Register) utasítás feltölti a taszkregiszter látható részét az operandussal, amely a GDT-ben levő egyik TSS deszkriptorhoz kell index legyen. Az LTR utasítás ugyanakkor feltölti a láthatatlan részt is a TSS deszkriptorból vett információkkal. Az LTR utasítás egy privilegizált utasítás, csak akkor hajtható végre, ha CPL=0. Az LTR utasítást általában a rendszerinicializálás alkalmával használják arra, hogy egy kezdeti értéket tegyenek a taszkregiszterbe. Ezt követően, a TR regiszter tartalma a taszkkapcsolást előidéző események által módosul. Az STR (Store Task Register) utasítás egy általános regiszterbe, vagy a memóriába menti el a taszkregiszter látható részét. Az STR utasítás szintén privilegizált. A taszk kapudeszkriptor egy taszkhoz biztosít indirekt, védett referenciát. A 3.56. ábra egy taszkkapu formátumát illusztrálja. A taszkkapu szelektor mezője index egy TSS deszkriptorhoz.

használt.

A taszkkapu DPL-je szabályozza a taszkkapcsolás deszkriptorhoz aló hozzáférését. Egy procedúra nem szelektálhat egy taszkkapu

deszkriptort anélkül, hogy a szelektor RPL-je és a procedúra CPL-je numerikusan kisebbek, vagy egyenlők lennének a deszkriptor DPL értékével. Ez meggátolja a kevésbé privilegizált procedúrákat abban, hogy taszkkapcsolást idézzenek elő. Amikor egy taszkkapu kerül alkalmazásra, a cél TSS deszkriptor DPL értéke nem lesz felhasználva.

Ennek a szelektornak az RPL értéke nem v

209

Page 208: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

Taszk állapot szegmens

TSS Deszkriptor

NGlobális deszkriptor táblázat

Szelektor Bázis cím Szegmens határLáthatatlan részLátható rész

TR

0

3.55. ábra: Taszk regiszter

Egy taszkkapuhoz hozzáférugyanúgy, taszkkapuk, melégítsenek ki:

Foglalt bit tárolva van a TSS deszkriptorban, minden taszknak csak egyetlen ilyen deszkriptora lehet. Ennek ellenére, létezdesz ri

2. A t

teljesítés a T

ő procedúra taszkkapcsolást válthat ki mint egy TSS deszkriptorhoz hozzáférő procedúra. Úgy a

int a TSS deszkriptorok célja az, hogy három követelményt

1. Egy taszknak csupán egyetlen Foglalt (Busy) bitje legyen. Minthogy a

het számtalan olyan taszkkapu, amely ugyanazt az egy TSS ptort szelektálja. k

aszkokhoz szelektív hozzáférést biztosítsanak. A taszkkapuk ik ezt az elvárást, ugyanis helyet foglalhatnak egy LDT-ben SS deszkriptor DPL értékétől eltérő DPL-jük lehet. Egy

210

Page 209: Otodik Generacios Processzorok_pentium

Védett üzemmódú multitaszking

olyan szintje a GDT-beli TSS deszkriptor használatához (amelynek a DPL értéke általában 0), még mindég meghívhat egy másik

r leszűkítheti a taszkkapcsolást bizonyos taszkokra.

.8.4. Taszk kapudeszkriptorok

procedúra, amelynek nincs meg a kellő privilegizálási

taszkot, ha hozzáférhet annak LDT-jében levő taszkkapuhoz. A taszkkapuk segítségével az operációs rendsze

3

TSS Kapudeszkriptor

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

TSS szegmens szelektor +0

DPL +4P 0 0 1 0 1

Típus

Fenntartva Fenntartva

Fenntartva

- Deszkriptor privilégium szintens jelenlétét jelző bit

DPLP - A szegm

3 k kapudeszkriptor

3. y megszakítás vagy kivétel taszkkapcsolást eredményezzen. A

zkkapuk a amely lehetővé teszi a gszakítások és kivételek számdményezze tás vagy egy kivétel egy zkkapura m tat, a proceszszor átkapcsol a ett taszkra

.56. ábra: Tasz

Egtas z IDT-ben is lehetnek, me ára, hogy taszkkapcsolás

nek. Amikor egy megszakíeretas utató vektort szolgáljelz .

211

Page 210: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

.57. ábra t, ahogyan mind az LDT-ben levő taszkkapu, mi IDT-ben helyet foglaló taszkkapu azonos ugyanazt a

A 3 bemutatja azt a módond pedig az

ítja taszkot.

Lokális deszkriptor táblázat Globális deszkriptor táblázat Taszk státusz szegmens

apu tor

négy eset bármelyikében:

Taszk k TSS deszkrip

Megszakítás deszkriptor táblázat

Taszk kapu

3.57. ábra: Taszkokra jellemző taszk kapuk 3.8.5. Taszkkapcsolás A processzor átadja a vezérlést egy másik taszknak a következő

212

Page 211: Otodik Generacios Processzorok_pentium

Védett üzemmódú multitaszking

1. Az aktív taszk egy JMP vagy CALL utasítást hajt végre egy TSS

Egy megszakítás vagy egy kivétel akkor vált ki taszkkapcsolást,

egszakítás kiszolgáló rutin mindíg visszaadja a vezérlést a egszakított procedúrának, amely esetenként más taszkban is lehet. Ha az T bit törölve van, normális visszatérés következik. Ha az NT magasra

ó taszk a

ghat

deszkriptorra. 2. Az aktív taszk egy JMP vagy CALL utasítást hajt végre egy

taszkkapura 3. Egy megszakítás vagy egy kivétel az IDT-ben levő egyik

taszkkapura mutat. 4. Az aktív taszk egy IRET utasítást hajt végre, miközben az NT flag

magasra van állítva. A JMP, CALL és IRET utasítások, csakúgy mint a megszakítások és kivételek, a processzor közönséges mechanizmusai, melyeket olyan körülmények között is használni lehet, amelyekben nem jön létre taszkkapcsolás. A deszkriptor típusa (amikor a taszk call hívást kap), illetve az NT bit (ha a taszk visszatér) különböztetik meg a standard mechanizmust attól a formától, amely egy taszkkapcsolást okoz. A JMP vagy CALL utasítások, annak érdekében, hogy taszkkapcsolást hozzanak létre, átadhatják a vezérlést akár egy TSS deszkriptornak, akár egy taszkkapunak. Mindkét esetben az eredmény ugyanaz: a processzor átadja a vezérlést a megadott taszknak. ha az IDT-ben levő egyik taszkkapura mutat. Ha egy IDT-beli megszakítás vagy trap kapura indexel, taszkkapcsolás nem megy végbe. Egy mmNvan állítva, taszkkapcsolás jön létre. A taszkkapcsolást fogad

egszakításkezelő rutin TSS-ében levő TSS szelektor által van mme ározva.

gy taszkkapcsolás a következő lépések szerint történik: E

213

Page 212: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

1. Ellenőrzi azt, hogy az aktív taszk átkapcsolhat-e az új taszkra. Az adat-hozzáférési privilégiumszabályok a JMP és CALL

nyes limitje van-e (nagyobb mint 67H). A hibák visszaállítják a processzor állapotában végzett bármely változtatást, ha kísérlet történik a hiba-generáló utasítás

-kiszolgáló rutin

regiszterek átmásolásra kerülnek az aktuális TSS-be (az EAX,

szegmensregiszterek ES, CS, SS, DS, FS valamint a GS. Az ebben a lépésben detektált bármely hiba, megjelenik a bejövő taszk

utasításokra vonatkoznak. A TSS deszkriptor és a taszkkapu DPL-je számszerint nagyobb (tehát alacsonyabb privilegizálási szinten) vagy egyenlő kell legyen a kapuszelektor CPL és RPL értékével. A megszakítások, kivételek és az IRET utasítás számára megengedett a taszkkapcsolás, függetlenül a cél taszkkapu, vagy a TSS deszkriptor DPL értékétől.

2. Ellenőrzi azt, hogy a bejövő taszk TSS deszkriptora jelenlevőként

van-e megjelölve, illetve érvé

végrehajtására. Ez a tény megengedi a kivételszámára, hogy a visszatérési cím a hiba-kiváltó utasításra mutasson, és nem az ezt követő utasításra. A kivétel-kiszolgáló rutin kijavíthatja azt az okot, amely a hibát előidézte, és újraindíthatja a taszkot. A kivétel-kiszolgáló rutin beavatkozása teljesen áttetsző lehet a felhasználói program számára.

3. Elmenti az aktuális taszk állapotát. A processzor megtalálja a

taszkregiszterben az aktuális TSS báziscímét. A processzor

ECX, EDX, EBX, ESP, ESI, EDI, ES, CS, SS, DS, FS, GS és EFLAGS regiszterek, valamint az utasításmutató).

4. A TR regisztert feltölti a bejövő taszk TSS deszkriptorára

vonatkozó szelektorral, beállítja a bejövő taszk Foglalt bitjét, illetve a CR0 regiszter TS bitjét. A szelektor vagy egy CALL, illetve JMP utasítás operandusa, vagy egy taszkkapuból származik.

5. Betölti az új taszk állapotát a megfelelő TSS-ből, és folytatja a

végrehajtást. A betöltött regiszterek a következők: az LDTR regiszter; a PBDR (CR3); az EFLAGS regiszter; az általános regiszterek EIP, EAX, ECX, EDX, EBX, ESP, ESI, EDI és a

214

Page 213: Otodik Generacios Processzorok_pentium

Védett üzemmódú multitaszking

környezetében. Egy kivétel-kiszolgáló rutin számára úgy tűnik, mintha az új taszk első utasítása nem lett volna végrehajtva.

Fontos, hogy taszkkapcsolás esetén a kimenő taszk állapota

nkez tben következett volna. A regiszterek azokra z értékekre lesznek visszaállítva, amelyeket a megállásuk pillanatában rtalmaztak.

Minden taszkkapcsolás magasra állítja a CR0 regiszter TS (Task

A TS bit azt mutatja, hogy a lebegőpontos egység környezete

17. rutinok rekurzív

ívások alanyai lehetnek, ha megkísérelik a kivételt létrehozó szegmens-

első privilegizálási szintje között nincs összefüggés. Minthogy a taszkokat lszigetelik egymástól a független címtartományaik és taszkállapot-

elleA bpriv

épés Állapot ellenörzés Kivétel1 Hibakód

mi dig elmentődik. Ha a taszk folytatódik, a vezérlés azzal az utasítással

dődik, amely normális eseata Switched) bitjét. A TS bit a rendszersoftware számára hasznos az integer és a lebegőpontos egységek műveleteinek koordinálására. eltérhet az aktív taszk környezetétől.

A taszkkapcsolások által okozott kivételeket (a 3.58. ábra 5.-től -ig terjedő pontjaiból adódó kivételeket) kezelő

hszelektort újra betölteni. A kivétel okát (vagy a többszörös okok közül az

t) meg kell szüntetni, mielőtt a szelektor újratöltődne.

A kimenő taszk privilegizálási szintje és a bejövő taszk

eszegmenseik, és mivel a TSS-hez való hozzáférést privilégium szabályok

nőrzik, a taszkkapcsoláshoz nincs szükség a privilégium vizsgálatára. ejövő taszk a CS regiszter új tartalmának RPL értéke által mutatott ilegizálási szinten kezd végrehajtódni, amelyet a TSS-ből tölt be.

Lhivatkozás

1van a memóriában

NP Az új taszk TSS-e A TSS deszkriptor jelen

2 A TSS deszkriptor nem foglalt

TS, GP A taszk visszakap-csolt TSS-e

215

Page 214: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3 A TSS szegmens határ nagyobb vagy egyenlő mint 108

TS Az új taszk TSS-e

4 A regiszterek feltöltve a TSS értékeivel 5 Az új érvényes taszk LDT TS Az új taszk LDT-

szelektora2 je 6 A kódszegmens DPL értéke TS Új kódszegmens

megegyezik a szelektor RPL értékével

7 Az SS szelektor érvényes2 TS Új verem-szegmens

8 A veremszegmens jelen van a memóriában

SF Új verem-szegmens

9 A veremszegmens DPL értéke megegyezik a CPL értékkel

TS Új verem-szegmens

10 Az új taszk LDT-je jelen TS Avan a memóriában je

z új taszk LDT-

11 A CS szelektor érvényes2 TS Új kódszegmens 12 A kódszegmens jelen van a

memóriában NP Új kódszegmens

13 A veremszegmens DPL értéke megegyezik a szelektor RPL értékével

TS Új verem-szegmens

14 A DS, ES, FS és GS szelektorok érvényesek2

TS Új adatszegmens

15 A DS, ES, FS és GS szegmensek olvashatók

TS Új adatszegmens

16 A DS, ES, FS és GS NP Új adatszegmens szegmensek jelen vannak a memóriában

17 A DS, ES, FS és GS szegmensek DPL értéke nagyobb vagy egyenlő a CPL értékével

TS Új adatszegmens

3.58. ábra: Taszkváltás alatti ellenörzés

216

Page 215: Otodik Generacios Processzorok_pentium

Védett üzemmódú multitaszking

Megjegyzések: A jövőbeli Intel processzorok az ellenőrzéseket eltérő sorrendben végezhetik. 1. NP= a szegmens nincs jelen kivétel,

= védelmi hiba kivéteS= le

SF= veremhiba k

. Egy szelektor akkor érvényes, ha egy kompatibilis típusú táblázatban van (például egy LDT szelektor nem lehet bármilyen más táblázatban a GDT-n kívül), a táblázat szegmenshatárán belüli cím el deszkriptorra utal (pél r k abban az esetben érvényes, ha egy utat, a deszkriptor típusa a típusme

3.8.6. Taszkok visszafelé kapcsolása (LINKING)

m hogy az előző utatja, hogy az

éppen végrehajtás alatt azva egy másik taszkba, és az aktív taszk TSS-ének ő taszk TSS szelektorát tárolja, ha létezik ilyen. (lásd a 3.59. ábrát).

GP általános lek, T "érvényte n TSS" kivétel,

ivétel.

2

et foglal dául a CS

, és egy kompatibilis típusúktor csaegiszterben levő szele

kódszegmens deszkriptorra mzőben van megadva).

A taszknak visszaszolgáltassa a vezérlést. Az NT flag m

TSS Link ezője és az NT jelzőbit célja, egm

álló taszk be van-e ág magasabb szinten lev

y Link mezője a

217

Page 216: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

TSS TSS TSSLegfelső szintű taszk Beágyazott taszk Mélyebben beágyazott tasz

LINK LINK LINK

NT=0 NT=1 NT=1

k Jelenleg futó taszk

EFLAGS

NT=1

TR regiszter

3.59. ábra: Beágyazott taszkok Amikor egy megszakítás, kivétel, jmp vagy call taszkkapcsolást eredményez, a processzor bemásolja az aktuális taszk-állapot-szegmens

elektorát az új taszk TSS-ébe, és beállítja az NT bitet. Az NT flag azt jelzi, hogy a TSS Link mezőjébe egy elmentett TSS szelektor került

etöltésre. Az új taszk egy IRET utasítás végrehajtásával adja vissza a vezé alá

erül. Ha ez 1-re van állítva, a processzor taszkkapcsolást végez az előző

sz

brlést. Az IRET utasítás végrehajtásakor az NT bit ellenőrzés

ktaszkra. A 3.60. ábra összefoglalja azon TSS mezők szerepét, amelyeket a taszkkapcsolás érint.

Mező Az ugrás hatása A CALL utasítás vagy

megszakítás hatása

Az IRET utasítás hatása

Az új taszk Busy bitje

A bit beállítva (előtte töröltnek

kell lennie)

A bit beállítva (előtte töröltnek

kell lennie)

Nem változik, 1-nek kell lennie

A régi taszk Busy bitje

A bit törölt Nem változik A bit törölt

218

Page 217: Otodik Generacios Processzorok_pentium

Védett üzemmódú multitaszking

Az új taszk NT flagje

Nem változik A flag beállítódik

Nem változik

A régi taszk NT Nem változik Nem változik A flag törölt flagje

Az új taszk Link mezője

Nem változik A szelektorral betöltve

Nem változik

A régi taszk Link mezője

Nem változik Nem változik Nem változik

3.60. ábra: A taszkváltások hatása a Busy, NT és LINK m

ezőkre

Megjegyzendő, hogy az NT flaget bármely privilegizálási szinten

z NT bitet és végrehajtson egy IRET utasítást, aminek az olna a következménye, hogy meghívásra kerülne az aktuális taszk TSS-

éne l megjelölt taszk. Annak érdekében, hogy a hamis taszkkapcsolások ne járjanak sikerrel, az operációs rendszernek inic en egyes általa létrehozott TSS Link mezőjét.

(foglalt) bit megelőzi a hurkok ialakulását

A TSS deszkriptorának B (foglalt) bitje megakadályozza az újraindított taszkkapcsolást. Csak egyetlen egy elmentett taszk-környezet létezik, a TSS-ben eltárolt környezet, ezért egy taszkot csak egyszer szabad meghívni mielőtt befejeződne. A felfüggesztett taszkok lánca bármilyen hosszúra megnőhet, a többszörös megszakításoknak, kivételeknek, ugrásoknak és hívásoknak köszönhetően. A B bit megakadályozza, hogy a taszkot meg lehessen hívni, ha ebben a láncban található. Egy újrahívott taszkkapcsolás felülírná a taszk régi TSS-ét, ami felbontaná a láncot. A processzor a következőképpen kezeli a Busy bitet: 1. Mikor átkapcsol egy taszkra, a processzor beállítja a bejövő taszk

B bitjét

futó software módosíthatja. Egy program számára adott az a lehetőség, hogy beállítsa av

k Link mezője álta

ializálnia kell mind 3.8.6.1. A Busy k

219

Page 218: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

2. Mikor visszakapcsol egy taszkról, a processzor letörli a kimenő

taszk B bitjét, ha azt a taszkot nem kell a láncba helyezze (ha tehát a taszkkapcsolást előidéző utasítás egy JMP vagy CALL utasítás). Ha a taszk a láncba kerül, a B bitje továbbra is 1-re marad állítva.

3. Ha az új taszk Busy bitje már be van állítva, taszkkapcsolás esetén

a processzor egy általános védelmi hiba kivételt generál. Eképpen a processzor meggátolja, hogy egy taszk saját magára kapcsolhasson, vagy a lánc bármely más taszkjára, ezzel megakadályozva az újraindított (re-entrant) taszkkapcsolást. A B bitet multiprocesszoros konfigurációban is lehet használni, mivel a processzor buszlezárást (bus lock) indítványoz amikor beállítja, vagy törli a B bitet. Ez megakadályozza, hogy két processzor ugyanazt a taszkot hívhassa meg. 3.8.6.2. A taszk visszakapcsolások módosítása Annak érdekében, hogy a megszakított taszkokat, az őket megszakító taszkok előtt folytatni lehessen, szükségessé válhat a felfüggesztett taszkok láncának módosítása. Ennek egy megbízható módja a következő: 1. A megszakítások letiltása. 2. Elsőként, a megszakító taszk TSS-ének Link mezőjét kell

megváltoztatni, majd a láncból kiemelt taszk TSS deszkriptorának B bitjét kell törölni.

3. A megszakítások engedélyezése.

220

Page 219: Otodik Generacios Processzorok_pentium

Védett üzemmódú multitaszking

3.8.7. Taszkok címtartománya Az LDT szelektor és a TSS PDBR (CR3) mezője felhasználható

aját laptáblázat gyűjteménye, a lineáris ímeknek fizikai címekre való leképezése végett.

z az LDT-je legyen.

3.8.7.1. Taszkok által lineárisról- fizikai címre végzett képzés

ical mapping) ét általános kategóriába sorolhatók:

áris-fizikai leképzés. Ha a lapozás nincs engedélyezve, ez az egyedüli lehetőség.

meghaladhatja a rendelkezésre álló fizikai tartományt, ha

arra, hogy minden taszkhoz saját LDT és laptáblázat legyen rendelve. Minthogy a lokális deszkriptor-táblázatokban (LDT) levő szegmens-deszkriptorok képezik a taszkok és a szegmensek közötti kapcsolatot, minden egyes taszknak önálló LDT-t lehet biztosítani, ezen kapcsolatok fölötti egyéni kontroll létrehozása érdekében. Bármely meghatározott szegmenshez való hozzáférés hozzárendelhető bármely egyéni taszkhoz, a szegmens szegmens-deszkriptorának a megfelelő taszk lokális deszkriptor-táblázatába való helyezésével. Ha a lapozás engedélyezett, minden taszknak lehet egy sc Az is lehetséges, hogy a taszkoknak ugyana

z egy egyszerű és memóriatakarékos módja annak, hogy bizonyos Etaszkoknak engedélyezni lehessen, hogy egymás között kommunikáljanak, illetve egymást vezéreljék, anélkül, hogy a teljes rendszer védelmi korlátait ejteni kéne. Mivel mindegyik taszk hozzáférhet a GDT-hez, az a lehetőség is adott, hogy ezen táblázaton belüli szegmensdeszkriptorokkal elérhető

egosztott szegmenseket hozzunk létre. m

le A taszkok lineáris-fizikai leképzései (linear-to-physk 1. Minden taszk által megosztott, egyetlen line

Lapozás hiányában minden lineáris cím az identikus fizikai címekre van leképezve. Ha engedélyezett a lapozás, a lineáris-fizikai leképzés e formája úgy valósítható meg, hogy minden taszk egyetlen közös lapcímtárat használ. A lineáris tartomány

221

Page 220: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

támogatott az igényeknek megfelelően lapozható (demand-paged) virtuális memória használata.

2. Független lineáris-fizikai leképzés minden egyes taszknak. A leképezés e formája abból adódik, hogy minden egyes taszk különálló lapcímtárat használ. Mivel minden taszkkapcsoláskor a PDBR (a lapcímtár bázisregisztere) a TSS-ből kerül betöltésre, mindegyik taszknak különálló lapcímtára lehet.

A különböző taszkok lineáris címtartománya teljesen eltérő fizikai címekre képezhető le. Ha a különböző lapcímtárak bemenetei különböző laptáblázatokra mutatnak, és a laptáblázatok a fizikai memória különböző lapjaira mutatnak, akkor a taszkok egyetlen közös fizikai címen sem osztoznak. A taszk-állapot-szegmensnek egy minden taszk számára elérhető tartományban kell helyet foglalnia, azért, hogy a TSS címek leképezése taszkkapcsolás közben ne változzon, mialatt a proceszszor a TSS-ét olvassa, illetve újraírja. A GDT által leképzett lineáris tartomány egy

egosztott fizikai tárterületre is le kell legyen képezve, ellenkező esetben a GDT zössé

telével két taszk lineáris tartománya miként fedi át egymást a fizikai

.8.7.2. A taszkok logikai címtartománya

yba való képezés (mapping) nem engedi meg a taszkok közötti adatmegosztást.

A GDT szegmensdeszkriptorain keresztül. Minden taszk hozzá tud férni a GDT-ben levő deszkriptorokhoz. Ha ezek a deszkriptorok

m célját veszti. A 3.61. ábra bemutatja, hogy laptáblázatok kö

tétárterületben. 3 Egymagában az átfedett, lineárisról-fizikai tartománleAhhoz, hogy adatokat tehessenek közössé, a taszkoknak egy közös logikairól-lineáris tartományba való leképezésre is szükségük van. Magyarán olyan deszkriptorokhoz is hozzá kell férhessenek, amelyek egy megosztott (közössé tett), lineáris címtartományra mutatnak. Három módja van a megosztott, logikairól fizikai címtartományba való leképezések megteremtésének: 1.

222

Page 221: Otodik Generacios Processzorok_pentium

Védett üzemmódú multitaszking

egy olyan lineáris címtartományra mutatnak, amely az összes ezve, akkor

a taszkok közössé tehetnek adatokat, illetve utasításokat.

is tartományt címeznek meg, megosztott (shared) fizikai memóriát

eteket tegyenek közössé. Ezeknek a deszkriptoroknak a közönséges neve: alias. A jelen eljárás még inkább szelektívebb, mint a fentebb felsoroltak, ugyanis az LDT

t, lineáris címtartományokra mutathat.

taszk számára közös fizikai címtartományra van lekép

2. Közössé tett LDT-ken keresztül. Két, vagy több taszk használhatja

ugyanazt a lokális deszkriptor-táblázatot (LDT-t), ha a TSS-ükben található LDT szelektorok ugyanazt a LDT-t szelektálják a címfordításhoz. Az LDT-beli szegmensdeszkriptorok, amelyek átfedett (overlapping) fizikai tartományra leképezett lineár

szolgáltatnak. 3. Ugyanarra a lineáris címtartományra leképező LDT-beli

szegmensdeszkriptorokon keresztül. Ha a szóban forgó taszk lap-leképezése a lineáris címtartományt ugyanarra a fizikai címtartományra képzi le, ezen deszkriptorok lehetővé teszik a taszkok számára, hogy címterül

többi deszkriptora független, nem megosztot

223

Page 222: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

PTE

A taszklapja

aszk TSS-e Lapcímtárak Laptáblázatok Lapkeretek

PDBR PDE

PTE

PTE

lapja

Megoszt.lap

PTE

B taszk

A t

B taszk TSS-e

MegosztottPDE

PTE

A taszk

A taszklapja

lapja

B taszk

Megoszt.lap

Laptáblázatok

i memóriában

PDBR PDE PTE

PDE PTE lapja

3.61 ábra: Lineáris átfedés a fizika

224

Page 223: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

3.9. Védett üzemmódú kivételek és megszakítások

sok hajtódnak végre. Általános setben, a megszakítások és kivételek szervizelése a felhasználói rogramok számára áttetsző módon megy végbe. A megszakítások, a

semények, mint például a periféria-eszközök iszolgálási kéréseinek kezelésére használatosak. A kivételek, a

szakítások

p. A maszkolható megszakítások addig nem keletkeznek, amíg a megszakítás-engedélyező flag (IF)

• Nem maszkolható megszakítások, amelyek a processzor NMI (NonMaskable Interrupt) vonalán érkeznek be. A processzor nem rendelkezik egy olyan mechanizmussal, amelyik meggátolná a nem maszkolható megszakításokat.

. Kivételek

• A processzor által detektált kivételek. Ezek tovább

rálhatnak. Ezeket az utasításokat gyakran nevezik "software-

A kivételek és megszakítások egy taszknak vagy egy procedúrának történő erőltetett vezérlésátadása. A taszkot, vagy a procedúrát "kiszolgáló rutinnak" nevezzük (handler). A megszakítások véletlenszerűen jelennek meg egy program végrehajtása közben, a hardware-jelzésekre adott válaszként. A kivételek akkor jelennek meg, amikor kivételeket előidéző utasítáepprocesszoron kívüli ekprocesszor által az utasítások végrehajtása alatt észlelt feltételeket kezelnek, mint például a nullával való osztást. A megszakításoknak és a kivételeknek két-két forrása van: 1. Meg

• Maszkolható megszakítások, amelyeket a CPU az INTR bemenetére ka

nincs 1-re állítva.

2

bonthatók hibákra (faults), csapdákra (traps) és abortokra. • Programozott kivételek. Az INTO, INT 3 , INT n és

BOUND utasítások kivételeket gene

225

Page 224: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

megszakításoknak", de a processzor kivételekként kezeli őket.

A jelen rész a processzor azon adottságait mutatja be, amelyek

ontrollálják a megszakításokat, és válaszolnak azokra.

Az NMI megszakításhoz és a kivételekhez a 0-tól 31-ig terjedő

has et közülük. E tartomány szabad vektorai egy setleges jövőbeli felhasználásra fenntartottak ezért ne használjuk a

A provekterj a

ivétel- és megszakítás-vektorok kirendelését mutatja.

V

k 3.9.1. Kivétel- és megszakításvektorok A processzor minden egyes megszakítás- vagy kivételtípushoz rendel egy azonosító számot. Ezt a számot "vektor"-nak nevezzük. tartományból vannak a vektorok rendelve. A processzor jelenleg nem

ználja mindegyikehozzárendeletlen vektorokat.

A maszkolható megszakítások vektorait a hardware determinálja. külső megszakítás-vezérlők, (mint például az 8258A jelzésű

gramoztó megszakítás-vezérlő) a processzor buszára helyezik a tort, ennek megszakítás-elismerő ciklusa idején. A 32-től 255-ig edő tartományból bármely vektorok alkalmazhatók. A 3.62. ábra

k

ektorszám Meghatározás 0 Osztási hiba 1 Debug kivétel 2 Nem maszkolható megszakítás 3 Töréspont 4 INTO túlcsordulást talált 5 BOUND határ túllépés 6 Nem megengedett op. kód 7 Eszköz nem elérhető 8 Dupla hiba 9 Koprocesszor szegmens túlfutás 10 Érvénytelen taszk státusz szegmens

226

Page 225: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

11 Szegmens nincs jelen 12 Verem hiba 13 Általános védelmi hiba 14 Laphiba 15 Intel által fenntartva 16 Lebegőpontos hiba 17 Illeszkedés ellen őrzés18 Géptípus ellenőrzés

19-31 Intel által fenntartva 32-255 Maszkolható m ítások egszak

3.62. ábra: Kivételek és megszakításvektorok

* Megjegyzés: A processzortípus ellenőrzés modell-specifikus kivétel, amely csak a Pentium processzorokon létezik. A kivételeket hibákra, trapokra és abortokra oszthatjuk, annak

gy a kivételt

tően, amelyben a ivétel

ardware-hibák, vagy a ndszer táblázatokban talált összeférhetetlen, vagy szabálytalan értékek.

függvényében, hogy miként vannak jelentve, illetve, hoelőidéző utasítás újraindítását támogatják-e. Hibák (faults): A hiba egy olyan kivétel, amelyet a processzor az utasításhatáron jelent, azon utasítást megelőzően, amelyben a kivétel észlelve volt. A hiba jelentése a gépnek egy olyan helyreállított állapotában történik, amely megengedi az utasítás újraindítását. A hibakezelő rutin visszatérési címe a hibát kiváltó utasításra mutat, nem pedig az ezt követő utasításra. Csapdák (traps): A trap egy olyan kivétel, amelyet a processzor az utasításhatáron jelent, rögtön azon utasítást kövek észlelve volt. Abort-ok (aborts): Az abort egy olyan kivétel, amely nem jelenti minden esetben a kivételt előidéző utasítás helyét, és amely nem engedélyezi a kivételt kiváltó program újraindítását. Az abortok komoly hibák jelentésére használatosak, mint amilyenek a hre

227

Page 226: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.9.2. Utasítások újraindítása A megszakítások és kivételek legnagyobb része esetén, a

aztak. Ez hetővé teszi az utasítások újraindítását.

gy felhasználói program hivakozhat egy olyan szegmensben ő a

megelőző értékre visszaállítani. A processzor mindezen isszaállító műveleteket a felhasználói programok számára teljesen

iba jelenik meg, az EIP regiszter úgy lesz elyreá

vezérlésátadásra mindaddig nem kerül sor, amíg az aktuális utasításnak nincs vége. Ennek az az eredménye, hogy az EIP regiszter a kivétel vagy megszakítás megjelenésének pillanatában, éppen a végrehajtás alatt álló utasítást közvetlenül követő utasításra mutat. Ha az utasításnak van egy ismétlési prefixe, a vezérlés átadása az aktuális művelet végén történik, a következő művelet elvégzésére beállított regiszterekkel. Ellenben, ha a kivétel egy hiba, a processzor regiszterei visszaállítódnak azokra az állapotokra, amelyeket az utasítás elkezdése előtt tartalmle Az utasítás újraindítást olyan kivételek kezelésére lehetfelhasználni, amelyek lezárják az operandusokhoz való hozzáférést.

éldául, ePlev datra, amely nincs betöltve a memóriába. Amikor a kivétel megjelenik, a kivétel-kiszolgáló rutinnak be kell töltenie a szegmenst (valószínűleg a lemezről), és folytatnia kell a végrehajtást a kivételt előidéző utasítással kezdődően. A kivétel megjelenésének pillanatában, az utasítás már megváltoztathatta a processzor egyes regisztereinek tartalmát. Ha az utasítás egy operandust olvasott ki a veremből, kötelező a

eremmutatót avvátlátszó módon végzi el. Mikor egy hh llítva, hogy a kivételt kiváltó utasításra mutasson. Amikor a kivétel-kiszolgáló handler visszatér, a végrehajtás ezzel az utasítással folytatódik. 3.9.3. Megszakítások engedélyezése és letiltása Bizonyos feltételek és jelzőbit-beállítások arra késztetik a processzort, hogy egyes megszakítás- és kivételtípusokat letiltson.

228

Page 227: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

3.9.3.1. További NMI megszakítások maszkolása Amíg egy NMI megszakításkezelő rutin fut, a processzor letiltja a

egszakítást kiszolgáló procedúrához vagy taszkhoz intézett további

), az gymásbaágyazott maszkolható megszakítások letiltása céljából, ugyanis gy maszkolható-megszakítást kiszolgáló eljárásból származó IRET

Az IF flag kikapcsolhatja a processzor INTR vonalán beérkező e

me lmen kívül maradnak. Ha az IF magasra van állítva, z INTR megszakítások ki lesznek szolgálva. Egy RESET jelre

Az lear) az IF itet.

9. bitjét). Ezek az utasítások csak akkor ajthatók végre, ha a CPL szint megegyezik az IOPL értékével, vagy

A PUSHF utasítás eltárol minden flag-et a verembe, ahol ezek vizsgálhatók, illetve módosíthatók. A POPF utasítással lehet a

mhívásokat, mindaddig, amíg a következő IRET utasítás nem kerül végrehajtásra. Ezzel megelőzi azt, hogy a megszakításkezelőhöz intézett hívások felgyűljenek a veremben. Ajánlott, megszakítás kapuk alkalmazása a nem maszkolható megszakításokra (NMIeeutasítás újra engedélyezné az NMI-t. 3.9.3.2. INTR megszakítások maszkolása m gszakítások szervizelését. Ha az IF bit törölve van, az INTR

gszakítások figyeaválaszolva, a processzor, a többi flag-hez hasonlóan, törli az IF bitet is.

STI és CLI utasítás magasra állítja (set), illetve letörli (cb A CLI (Clear Interrupt-Enable Flag - megszakítés engedélyező bit törlése) utasítás és az STI (Set Interrupt-Enable Flag - megszakítás engedélyező bit beállítása) utasítás egy ismert állapotba hozza az IF flag-et (az EFLAGS regiszter hannál privilegizáltabb. Az IF bitet még a következő műveletek is befolyásolják: •

megváltoztatott formát az EFLAGS regiszterbe visszatölteni.

229

Page 228: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

• aszkkapcsolások, illetve a POPF és IRET utasítások feltöltik az EFLAGS regisztert, tehát felhasználhatók az IF bit beállításának megváltoztatására.

A t

• A kapuzott megszakításo san törlik az IF bitet, letiltva ezzel a megszakításokat.

3.9.3.3. Debug hibák maszkolása az RF bit segítségével ató RF bi a, hogy meggátolja egy utasítás-töréspont hiba többszörös kiszolgálását. Az RF a következőképpen működik: • Miel ely hiba lőbb

beállítja az RF bitet az EFLAGS másolatá kiszolgáló rutin veremébe hel (push). No veremb i képét a software-ek kell módosí

• Ma bitet a hibakeze utin állítja r az IRETD

utasítást hajtja végre a hiba-generáló utasításra való visszatéréshez. Az IRETD veremből az EFLAGS regiszterbe. (A POPF és POPFD utasítások nem viszik át az RF másolatát az EFLAGS regiszterbe.)

• A processzor törli az RF bitet, ha mi ást siker znie,

IRET uta t, illetve a ta apcsolást elő ő JMP, y INT uta okat. Teh g beállítva rad, de

mint egy, IRET ut köve ítás

Ha RF be van állítva, arra készteti a processzort, hogy beszüntesse az utas

k automatiku

Az EFLAGS regiszterben találh t alkalmazásának célj

őtt a processzor belépne bárm kezelő rutinba, eban, amelyet aztán armális esetben, az RFyez

el nem tsák.

gát az RF lő r be, amiko

utasítás átmozgatja az EFLAGS képét a

nden utasít ült befejekivéve az sítás szkk idézCALL vag sítás át az RF fla manem több,idejére.

- az án közvetlen tkező - utas

ítás-töréspont hibák jelentését. Mivel az utasítás-töréspont hibák a legnagyobb prioritással rendelkező hibák, ugyanahhoz az utasításhoz kapcsolódó bármely más hibát megelőzően kerülnek bejelentésre. Az utasítás végrehajtására tett legelső kísérlet esetén RF=0, illetve RF =1 minden olyan próbálkozás

230

Page 229: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

esetén, amely egy utasítás-töréspont hibát, vagy bármilyen más hibát követően, újraindítaná az utasítást. Ez azt biztosítja, hogy minden

tasítás-töréspont hiba csak egyszer lesz jelentve.

e-ek, amelyek gyakran kell veremszegmenst áltsanak, egy utasítás párt használnak, például:

utasítást követően, a processzor letiltja a egszakításokat, a debug-kivételeket és az egylépéses nyomkövető trap

kivételeket, amíg a következő utasítás mögötti utasításhatárt el nem éri. Általános védelmi-hibák még ekkor is generálódhatnak. Ha az SS regiszter tartalmának módosítására az LSS utasítást használjuk, ez a probléma nem jelenik meg. 3.9.4. Szimultán kivételek és megszakítások közötti prioritás Ha egy utasításhatáron egynél több kivétel, vagy megszakítás van függőben (pending), a processzor egy előre meghatározható sorrendben szolgálja ki őket. A megszakítás- és kivétel források osztályai közti prioritásokat a 3.63. ábra mutatja be. Amíg ezen osztályok közötti prioritás konzisztens az architektúra egészén, addig minden egyes osztályon belüli kivételek alkalmazás-függők, és processzoronként eltérők lehetnek. A processzor először a legmagasabb prioritással rendelkező osztályba tartozó, függőben levő kivételt, vagy megszakítást szolgál ki,

u 3.9.3.4. Egyes kivételek és megszakítások maszkolása Azok a softwarv MOV SS, AX MOV ESP, StackTop Ha egy megszakítás vagy kivétel jelenik meg miután a szegmensszelektor már fel van töltve, de még mielőtt az ESP regiszter be lenne töltve, a megszakítás- vagy kivétel-kiszolgáló rutin idejére, a veremtartományba mutató logikai címnek ezen két része összeférhetetlen. Ennek a helyzetnek az elkerülése végett, egy MOV SS-be, vagy POP SS-be típusúm

231

Page 230: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

átadván a vezérlést a kezelő rutin első utasításának. Az aprioritású kivételeket elveti. Az alacsonyabb

ggőben maradnak. Az elvetett kivételek újra aktualizálódnak, am

lacsonyabb prioritású megszakítások

ikor a egsza

füm kítás kezelő visszaadja a vezérlést a megszakítási pontra. Prioritás Osztály Meghatározás Magas 1. osztály Trap az előző műveleten

-Töréspont -Debug trap kivétel

2. osztály Külső megszakítás -NMI megszakítás -Maszkolható megszakítás

3. osztály Hiba a következő utasításnál -Kód töréspont hiba -Kódszegmens határ túllépés -Laphiba az előolvasásnál

4. osztály Hiba a következő utasítás dekodolásánál -Érvénytelen op. kód -Műveleti kód hosszabb 15 Byte-nál -Koprocesszor nem áll rendelkezésre

Alacsony 5. osztály Hiba egy utasítás végrehajtásakor -Általános detektálás -Koprocesszor hiba -Túlcsordulás -Határellenörzés -Érvénytelen TSS -Szegmens nincs jelen -Verem kivétel -Általános védelmi hiba -Adat laphiba -Illeszkedés ellenőrzés

éte itása 3.63. ábra: Kiv lek és megszakítások egymás közötti prior

232

Page 231: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

3 zak akítás és megszakításhoz, a hozzárendelt eseményt kiszolgáló procedúra vagy taszk deszkriptorát rendeli. Akárcsak a GDT, vagy az LDT-k, az IDT is egy 8 Byte-os deszkriptorokat tartalmazó tömb. Az IDT-be mutató in ához skálatényezővel (a deszkriptorban levő Byte-ok számával) a kivétel-, vagy megszakításvekto , az IDT nem

rtalmazhat több mint 256 deszkriptort. Kevesebb, mint 256 deszkriptort

.9.5. A megs ításdeszkriptor-táblázat

A megsz deszkriptor-táblázat (IDT) minden kivételhez

dexek formálás a processzor beszorozza egy 8-as

rt. Mivel mindössze 256 vektor vantaviszont tartalmazhat, mert deszkriptorokra csak azoknak a megszakításvektoroknak van szükségük, amelyek előfordulhatnak. Az IDT a fizikai memória bármely részén rezidens lehet. Amint azt a 3.64. ábra mutatja, a processzor az IDTR regisztert felhasználva lokalizálja az IDT-t. Ez a regiszter tartalmazza az IDT 32 bites báziscímét, valamint a 16 bites határt. A LIDT és SIDT utasítások töltik fel, illetve mentik el az IDTR regiszter tartalmát. Mindkét utasításnak egy operandusa van, amely a memóriában levő hat Byte címe.

IDT báziscím

IDTR regiszter

IDT határ

atMegszakítás deszkriptor tábláz

Kapu az N.

megszakításhoz

megszakításhoz

Kapu az 3.megszakításhoz

Kapu az 2.

Kapu az 1.megszakításhoz

233

Page 232: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.64. ábra: IDT lokalizálása a memóriában az IDTR segítségével

a határon kívülre eső eszkriptorra mutat, a processzor átmegy "shutdown" módba. Ebben az emm

incs kezdeményezve. A processzor egy speciális buszciklust enerál a "shutdown" állapotba való belépés jelzésére. A software-jleszt

riába. Ez az utasítás bármely privilégium szinten égrehajtható.

3.9

tart

1. taszkkapukat

A 3.65. ábra bemutatja a taszkkapuk, megszakítás kapuk, és trap

Abban az esetben, ha egy vektor

düz ódban a processzor megszünteti az utasítás-végrehajtást, mindaddig, amíg nem észlel egy NMI megszakítást, vagy amíg egy reset inicializálás ngfe ők tisztában kell legyenek a hardware-nek erre a jelzésre adott válaszával. Például, a hardware ilyenkor kigyújthat egy fényjelzést a gép fő paneljén, generálhat egy diagnosztika-információkat felvevő NMI megszakítást, vagy kezdeményezhet reset inicializálást. A LIDT (Load IDT Register - a megszakításdeszkriptor-táblázat regisztert betöltő utasítás) feltölti az IDTR regisztert a memóriában levő operandusban tárolt báziscímmel és limit-tel. Ezt az utasítást csak akkor lehet végrehajtani, ha CPL=0. Általában az operációs rendszerek inicializáló kódja használja az IDT létrehozásához. Az operációs rendszer arra is felhasználhatja, hogy egyik IDT-ről a másikra váltson. SIDT (Store IDT Register - a megszakításdeszkriptor-táblázat regisztert eltároló utasítás) átmásolja az IDTR-ben tárolt báziscímet és limit értéket a memóv

.6. IDT deszkriptorok Az IDT a következő három típusú deszkriptor közül bármelyiket

almazhatja:

2. megszakítás kapukat 3. trap kapukat

kapuk formátumát.

234

Page 233: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

Fenntartva

TSS szegmens szelektor

P 0DPL +4

+0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

Ofszet 31-16 P DPL Fenntartva +4

Szegmens szelektor Ofszet 15-0 +0

31 0 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 03

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

Ofszet 31-16 P DPL +4

Szegmens szelektor Ofszet 15-0 +0

0 1 0 1Fenntartva

Fenntartva

0 1 1 1 0 0 0 0

Fenntartva0 1 1 1 1 0 0 0

3.65. ábra: IDT kapudeszkriptor

235

Page 234: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.9.7. Megszakítás taszkok és megszakítás-kezelő

akításvektort almazza egy IDT-ben lev

ezője a kivételt vagy megszakítást kiszolgáló procedúra elejére mutat.

procedurák Amint a CALL utasítás képes egy procedúrát, vagy egy taszkot meghívni, úgy egy kivétel, vagy megszakítás is képes egy kezelőrutint, akár mint procedúrát, akár mint taszkot "meghívni". A kivételre vagy megszakításra válaszolva, a processzor a kivétel, vagy megszalk ő deszkriptor indexelésére. Ha a processzor egy megszakítás-, vagy trap kapura indexel, a call-kapura irányuló CALL utasításhoz hasonló módon hívja meg a kiszolgáló rutint. Ha a processzor egy taszkkaput talál, a taszkkapura irányuló CALL utasításhoz hasonló módon végez taszkkapcsolást. 3.9.7.1. Megszakítás-kezelő procedúrák Amint azt a 3.66. ábra mutatja, egy megszakítás-, vagy trap kapu közvetett módon címez meg egy olyan procedúrát, amely az aktív taszk kontextusában fut. A kapu szelektora egy végrehajtható szegmens GDT-beli, vagy az aktuális LDT-ben levő deszkriptorára mutat. A kapudeszkriptor ofszet m

236

Page 235: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

IDT

Eljárás

Cél kódszegmens

Bázis cím

Szegmensdeszkriptor

Megszakítás vagytrap kapu

GDT vagy LDT

OfszetMegszakítás

vektor

Szegmens szelektor

3.66. ábra: Megszakítás procedura hívás A processzor, egy procedúrahívással majdnem azonos módon hív meg egy kivételt, vagy megszakítást kiszolgáló procedúrát. 3.9.7.1.1. A megszakítás-kezelő eljárás verme Akárcsak egy CALL utasítással történő vezérlésátadás esetén, a kivételt, vagy megszakítást kiszolgáló procedúrának való vezérlésátadás

237

Page 236: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

is alkalmazza a vermet, a processzor állapotának elmentésére. Amint azt a 3.67. ábra mutatja, egy megszakítás, a megszakított utasítás címének stack-be való eltárolását megelőzően, lenyomja az EFLAGS regiszter tartalmát a verembe.

Nem privilégizált szintcsere hibakód nélkül

Nem privilégizált szintcsere hibakóddal

Privilégizált szintcsere hibakód nélkül

Privilégizált szintcsere hibakóddal

Régi EFLAGRégi CS

Régi EIP

Régi ESP

Új ESP

Régi ESP

Új ESP

Régi EFLAGRégi CS

Régi EIPHibakód

Nem használtRégi SS

Régi ESPRégi EFLAG

Régi CSRégi EIP Új ESP

ESPa TSS-ből

Új ESP

ESPa TSS-bőlNem használt

Régi SSRégi ESP

Régi EFLAGRégi CS

Régi EIPHibakód

3.67. ábra: Verem keret egy megszakítás vagy kivétel után

Némely kivétel típus egy hibakódot is lenyom a verembe. A kivételt kiszolgáló rutin felhasználhatja a hibakódot a kivétel diagnosztikájára. 3.9.7.1.2. Visszatérés egy megszakítás-kezelő eljárásból A megszakítás-kezelő eljárás a normális eljárásoktól az eljárásból való kilépés metódusában különbözik. Az IRET utasítás a megszakítás-kezelő procedúra elhagyására használatos. Az IRET utasítás hasonlít a RET utasításra, azzal a különbséggel, hogy négy további Byte-tal növeli az ESP regisztert, és visszaállítja az elmentett flageket az EFLAGS regiszterbe. Az EFLAGS regiszter IOPL mezőjét csak abban az esetben

238

Page 237: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

állítja vissza, ha a CPL=0. Az IF bit csak akkor módosul, ha CPL<= IOPL. 3.9.7.1.3. A megszakítás-kezelő eljárás flag-használata A megszakítás kapukat vagy trap kapukat használó megszakítások a TF bit törlését okozzák, miután annak aktuális értékét, az EFLAGS regiszter elmentett tartalmának részeként, elmentik a verembe. Ezzel, a processzor megelőzi azt, hogy az utasítás nyomkövetés a megszakításra adott választ befolyásolhassa. Egy következő IRET utasítás visszaállítja a TF bitet az EFLAGS regiszter verembe elmentett tartalmának értékére. Egy megszakítás kapu és egy trap kapu közti különbség az IF flagre gyakorolt hatásukból adódik. Egy megszakítás kaput alkalmazó megszakítás törli az IF bitet, megakadályozva ezzel, hogy más megszakítások beavatkozzanak az aktuális megszakításkezelő rutinba. Egy következő IRET utasítás visszaállítja az IF bitet az EFLAGS regiszter verembe elmentett tartalmának értékére. Egy trap kaput használó megszakítás nem változtat az IF biten. 3.9.7.1.4. Védelem a megszakítás-kezelő eljárásokban Azok a privilégium szabályok, amelyek a megszakítás-kezelő procedúrákat irányítják, azonosak a procedúra hívásra érvényes szabályokkal: a processzor nem teszi lehetővé egy megszakításnak, hogy átadja a vezérlést egy kevésbé privilegizált (számszerint nagyobb privilegizálási szintű) szegmensben levő procedúrának. E szabály megsértésére tett kísérlet általános védelmi hiba kivételt eredményez. Minthogy a megszakítások általában nem szabályos időközönként jelennek meg, az említett privilégium szabály gyakorlatilag azokra a privilegizálási szintekre kényszeríti a megszorításokat, amelyeken a kivételt-, vagy megszakítást kiszolgáló rutinok képesek futni. A következő technikák bármelyikét fel lehet használni a privilégium szabályok megsértésének megelőzésére:

239

Page 238: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

• A kivételt-, vagy megszakítás-kezelő rutinokat illeszkedő (conforming) kódszegmensbe lehet elhelyezni. Ezt a technikát bizonyos kivételeket (például az osztáshiba kivételt) kezelő rutinok alkalmazhatják. Ezek a kiszolgáló rutinok csak a veremben elérhető adatokat szabad használják. Ha a megszakítás-kezelőnek szüksége lenne egy adatszegmensben található adatokra, akkor az adatszegmensnek kötelezően 3-as privilegizálási szintje kéne legyen, ami védtelenné tenné azt.

• A megszakítást kiszolgáló rutin 0-s privilegizálási szintű

kódszegmensbe is elhelyezhető. Ez a handler a program CPL-jétől függetlenül, mindig futhatna.

3.9.7.2. Megszakítás-kezelő taszkok Egy IDT-beli taszkkapu közvetetten határoz meg egy taszkot, ahogyan azt a 3.68. ábra illusztrálja. A taszkkapuban található szegmens-szelektor egy GDT-beli TSS deszkriptort címez meg.

240

Page 239: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

IDT

TSS

TSS bázis cím

TSS szegmensdeszkriptor

Taszk kapu

GDT

Megszakításvektor

TSS szelektor

3.68. ábra: Megszakítás taszkkapcsolás Amikor egy kivétel, vagy megszakítás meghív egy IDT-ben levő taszkkaput, taszkkapcsolás keletkezik. Egy megszakításnak különálló taszkkal való kiszolgálása két előnyt kínál fel: • A teljes kontextus automatikusan elmentődik

241

Page 240: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

• A megszakítás-kezelő elszigetelhető a többi taszktól, egy különálló címtartomány hozzárendelésével. Ez, a megszakításkezelő részére egy külön LDT biztosításával valósítható meg.

Egy megszakítás okozta taszkkapcsolás ugyanúgy működik, mint a többi taszkkapcsolás. A megszakítás-kezelő taszk visszatér a megszakított taszkba, egy IRET utasítást végezve. Egyes kivételek egy hibakódot szolgáltatnak. Ha a taszkkapcsolást egy ilyen kivétel eredményezte, a processzor lenyomja a hibakódot a megszakítás-kezelő privilegizálási szintjének megfelelő verembe. Hogyha egy operációs rendszer megszakítás-kiszolgáló taszkokat használ, tulajdonképpen két taszk-elosztó mechanizmus létezik: a software ütemező (az operációs rendszer része), illetve a hardware ütemező (a processzor megszakítási mechanizmusának része). A software ütemező olyan megszakításkiszolgáló taszkokat kell készenlétbe helyezzen (accomodate), amelyek eloszthatók (dispatched), ha a megszakítások engedélyezve vannak. 3.9.8. Hibakódok Egy bizonyos szegmenshez kapcsolódó kivételek esetén, a processzor eltárol egy hibakódot a kivételkezelő vermébe (függetlenül attól, hogy az procedúra, vagy taszk). A hibakódoknak a 3.69. ábrán látható formátuma van. A hibakód hasonlít egy szegmens-szelektorhoz, ugyanakkor, az RPL mező helyett a hibakód két, egybites mezőt tartalmaz: 1. A processzor beállítja az EXT bitet, ha a programon kívüli esemény

eredményezte a kivételt. 2. A processzor beállítja az IDT bitet, ha a hibakód index része egy IDT-

beli deszkriptorra vonatkozik

242

Page 241: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

Fenntartva Szelektor index TI

IDT

EXT

3.69. ábra: Hibakód Ha az IDT bit nincs beállítva (set), a TI bit mutatja meg, hogy a hibakód egy GDT-re (TI=0), vagy az LDT-re (TI=1) vonatkozik-e. A megmaradt 13 bit a szegmens szelektorának felső bitjei. Egyes esetekben a hibakód nulla (tehát az alsó szó minden bitje 0-s). A hibakód duplaszóként van a veremre helyezve. Ez azért történik így, hogy a verem olyan címekhez maradjon illesztett (aligned), amelyek négy többszörösei. A duplaszó felső része fenntartott. 3.9.9. Kivétel feltételek A következő alpontok felsorolják azokat a feltételeket, amelyek kivételeket generálnak. Mindegyik leírás hiba-, trap-, vagy abort-ként osztályozza a kivételeket. E kategorizálás azon procedúrák újraindításához szükséges információt szolgáltatja a rendszerprogramozóknak, amelyekben a kivételek megjelennek: • Hibák - A CS és EIP regiszterek elmentett tartalma a hibát kiváltó

utasításra mutat. • Csapdák - A CS és EIP regisztereknek a trap megjelenésekor

elmentett tartalma a trap-et kiváltó utasítás után végrehajtandó utasításra mutat. Ha egy vezérlést átadó utasítás ideje alatt egy trap detektálódik, a CS és EIP regiszterek elmentett tartalma tükrözi a vezérlésátadást. Például, ha egy JMP utasításban trap van detektálva, a CS és EIP regiszterek elmentett tartalma a JMP utasítás rendeltetési helyére mutat, és nem - JMP fölötti következő címen levő utasításra.

• Abortok - Az abort egy olyan kivétel, amely nem engedi meg sem a

kivételt okozó utasítás helyének pontos behatárolását, sem a kivételt

243

Page 242: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

kiváltó program újraindítását. Az abortok komoly hibák jelentésére használatosak, mint amilyenek a hardware-hibák, vagy a rendszertáblázatokban talált összeférhetelen, vagy szabálytalan értékek.

3.9.9.1. 0-s számú megszakítás - Osztáshiba (Divide Error) Az osztáshiba egy DIV, vagy IDIV utasítás esetén jelenik meg, ha az osztó nulla. 3.9.9.2. 1-es számú megszakítás - Debug kivétel A processzor debug kivételt generál egy sor feltétel esetén. Az, hogy a kivétel hiba, vagy trap, a feltételtől függ, ahogy következik:

Utasítás cím töréspont hiba Adat cím töréspont trap Általános detektálás hiba Lépésenkénti végrehajtás trap Taszkkapcsolás töréspont trap

A processzor nem nyom le hibakódot ennél a kivételnél. A kivételkezelő rutin megvizsgálhatja a nyomkövető regisztereket, hogy megállapítsa, melyik feltétel váltotta ki a kivételt. A debugolásról és a nyomkövető regiszterekről részletes információ található a 2. kötetben. 3.9.9.3. 3-as számú megszakítás - Töréspont (Breakpoint) Az INT 3 utasítás töréspont trap-et generál. Az INT 3 utasítás egy Byte-nyi hosszú, ami leegyszerűsíti egy RAM-ban levő kódszegmensbeli műveletkód (opcode) kicserélését a töréspont műveletkódra. Az operációs rendszer, vagy egy nyomkövető eszköz alkalmazhat egy, a kódszegmens

244

Page 243: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

fizikai címtartományára leképezett adatszegmenst, az INT 3 utasítás azon pontokra való elhelyezésére, amelyekben a debugoló meghívása szükséges. A nyomkövetők a program felfüggesztésére töréspontokat használnak, a regiszterek, változók, stb. vizsgálatához. A CS, illetve EIP regiszterek elmentett tartalma a töréspontot követő Byte-ra mutatnak. Ha a debugoló engedélyezi a felfüggesztett program végrehajtásának folytatását, a töréspont helyén az INT 3 utasítást visszacseréli az eredeti műveletkódra, és mielőtt visszaadná a vezérlést, dekrementálja az EIP regiszter elmentett tartalmát. 3.9.9.4. 4-es számú megszakítás - Túlcsordulás (Overflow) A túlcsordulás trap akkor jelenik meg, ha a processzor beállított OF flag mellett egy INTO utasítást hajt végre. Mivel úgy az előjeles, mint az előjel nélküli aritmetika ugyanazon néhány utasítást használja, a processzor nem tudja meghatározni, hogy a túlcsordulás tulajdonképpen mikor jelenik meg. Ehelyett, magasra állítja az OF bitet, ha az előjeles számokként értelmezett eredmények a tartományon kívülre esnének. Előjeles operandusokon végzett aritmetikai műveletek esetén az OF flag közvetlenül tesztelhető, vagy az INTO utasítás alkalmazható. 3.9.9.5. 5-ös számú megszakítás - Határsértés (Bounds Check) A határsértés (bounds-check) hiba akkor jön létre, amikor a processzor egy BOUND utasítás végrehajtása közben azt észleli, hogy az operandus meghaladja a megadott határértékeket. A program a BOUND utasítást annak ellenőrzésére használhatja fel, hogy egy előjeles tömbindex nem lépi-e túl egy memóriablokkban definiált előjeles határértékeket.

245

Page 244: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.9.9.6. 6-os számú megszakítás - Érvénytelen utasítás (Invalid Opcode) Az érvénytelen utasítás (invalid op-code) hiba akkor keletkezik, amikor egy érvénytelen műveletkódot detektál a végrehajtó egység. ( A kivétel addig nem detektálódik, amíg az érvénytelen utasítás végrehajtására nem történik kísérlet. Tehát egy érvénytelen műveletkód előzetes elérése (prefetch) nem váltja ki ezt a kivételt.) A verembe nem kerül hibakód. A kivétel ugyanazon taszk keretén belül kezelhető. Ez a kivétel akkor is jelentkezik, ha az operandus típusa az adott utasítás számára érvénytelen. A példák közé sorolható egy regiszter-operandust alkalmazó szegmensek közötti JMP utasítás, vagy egy regiszter forrásoperandust használó LES utasítás. A harmadik feltétel, amely ezt a kivételt generálja, a LOCK prefix használata egy olyan utasítással, amely nem zárható le. Csak bizonyos utasításokra alkalmazható a busz lezárása, és ezeknek az utasításoknak csak azon formái használhatók, amelyek a memóriába írnak. A LOCK prefix minden eltérő használata érvénytelen utasítás hibát generál. 3.9.9.7. 7-es számú megszakítás - nem elérhető eszköz (Device Not Available) A "numerikus koprocesszor nem elérhető" hibát a következő két feltétel egyike hozza létre: • A processzor végrehajt egy ESC utasítást, és a CR0 regiszter EM bitje

1-re van állítva. • A processzor végrehajt egy WAIT (MP=1 esetén) utasítást, vagy egy

ESC utasítást, és a CR0 regiszter TS bitje 1-re van állítva. Tehát a 7-es megszakítás akkor jelentkezik, amikor a programozó azt akarja, hogy az ESC utasítás software úton legyen kezelve (EM=1 esetén), illetve akkor, amikor a processzor egy WAIT, vagy ESC

246

Page 245: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

utasítással találkozik, és a lebegőpontos egység kontextusa eltér az aktuális taszk kontextusától. Az Intel286-os és Intel386-os processzorokban a CR0 regiszter MP bitje és a TS bit annak megállapítására szolgál, hogy a WAIT utasítás kivételt kell-e generáljon. A Pentium, Intel486 DX és Intel487 SX processzorokon futó programok esetén az MP bit 0 kell legyen. 3.9.9.8. 8-as számú megszakítás - Kettős hiba, dupla hiba (Double Fault) Ha a processzor, miközben egy előző kivétel kiszolgáló rutinját próbálja behívni, egy újabb kivételt detektál, normális esetben a két kivételt sorban, egymás után szolgája ki.

Osztály Vektorszám Meghatározás 1 Debug kivétel 2 NMI megszakítás

Jóindulatú 3 Tőréspont kivételek 4 Túlcsordulás

és megszakítások 5 Határellenörzés 6 Érvénytelen op. kód 7 Eszköz nem elérhető 16 FPU hiba 0 Osztási hiba

Járulékos 10 Érvénytelen TSS kivételek 11 Szegmens nincs jelen

12 Verem hiba 13 Ált. védelmi hiba

Laphibák 14 Laphiba

3.70. ábra: Megszakítás és kivétel osztályok

247

Page 246: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

Első Második kivétel kivétel Jóindulatú Járulékos Laphiba

Jóindulatú ok ok ok Járulékos ok Dupla hiba ok Laphiba ok Dupla hiba Dupla hiba

3.71. ábra: Dupla hiba viszonyok

Ha mégsem képes őket sorosan kezelni, kettős hiba kivételt jelez. Annak eldöntésére, hogy a processzor milyen esetben kell két kivételt "dupla hiba"-ként megjelöljön, a kivételeket a következő három osztályba sorolja: "szelíd" (benign) kivételek, "hozzájáruló" (contributory) kivételek, illetve laphiba kivételek. Ezt a felosztást a 3.70. ábra ábrázolja. Az első kivétel osztályát összevetve a második kivétel osztályával, a processzor a 3.71. ábrán megjelölt esetekben jelent kettős hibát. Egy utasítás előzetes elérése (prefetch) idején észlelt kezdeti szegmens- vagy laphiba a 3.71. ábrán kívül esik. Ugyanakkor bármely további hiba, amely akkor generálódik, amikor a processzor megkíséreli átadni a vezérlést a megfelelő hibakezelőnek, továbbra is dupla hiba szekvenciához vezethet. A processzor minden alkalommal lenyom egy hibakódot a kettős hibát kiszolgáló rutin vermébe, viszont ennek a hibakódnak az értéke mindig 0. A hibát kiváltó utasítás nem indítható újra. Ha a kettős hiba kivételkezelő meghívására tett kísérlet közben újabb kivétel is előfordul, a processzor átmegy leállított (shutdown) módba. Ez a mód hasonlít egy HLT utasítást követő állapothoz. Egyetlen utasítás sem kerül végrehajtásra, amíg egy NMI megszakítás, vagy egy RESET jel nem fut be. Ha a leállás akkor jön létre, miközben a processzor egy NMI megszakítást hajt végre, csak a RESET jel képes újraindítani a processzort. A "shutdown" állapot jelzésére a processzor egy speciális buszciklust generál.

248

Page 247: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

3.9.9.9. 9-es számú megszakítás - (az Intel által fenntartott, használata nem ajánlott) A 9-es megszakítás, a "koprocesszor-operandus szegmenshatár sértés "abort a 386-os CPU-ra alapuló, 387-es numerikus koprocesszorral ellátott rendszerekben generálódik, amikor a 386-os processzor egy lap- vagy szegmens sértést detektál, miközben a 387-es numerikus koprocesszor operandusának középső részét transzferálja. Ezt a megszakítást nem generálja sem a Pentium, sem a 486-os processzor, helyette a 13-as számú megszakítás jön létre. 3.9.9.10. 10-es számú megszakítás - Érvénytelen TSS (Invalid TSS) Az érvénytelen TSS hiba akkor generálódik, ha egy érvénytelen TSS-el rendelkező szegmensre történik taszkkapcsolási kísérlet. A TSS a 3.72. ábrán felsorolt esetekben érvénytelen. A kivételkezelő vermébe lenyomódik egy hibakód, a hiba okának felderítését elősegítendő. Az EXT bit megmutatja, hogy a kivételt a program ellenőrzési területén kívülre eső feltétel okozta-e (például, ha egy taszkkaput alkalmazó külső megszakítás egy érvénytelen TSS-re kísérelt meg taszkkapcsolást végrehajtani).

Hibakód index Meghatározás TSS szegmens A TSS szegmenshatár kisebb mint 67h LDT szegmens Érvénytelen LDT, vagy LDT nincs jelen Verem szegmens A veremszegmens szelektor túllépi a deszkriptor

tábla határt Verem szegmens A verem szegmens nem írható Verem szegmens A veremszegmens DPL-je nem kompatibilis a

CPL-el Verem szegmens A veremszegmens szelektor RPL-je nem

kompatibilis a CPL-el Kódszegmens A kódszegmens szelektor túllépi a deszkriptor

tábla határt Kódszegmens A kódszegmens nem végrehajtható

249

Page 248: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

Kódszegmens A nem illeszkedő kódszegmens DPL-je nem egyenlő a CPL-el

Kódszegmens Az illeszkedő kódszegmens DPL-je nagyobb a CLP-nél

Adatszegmens Az adatszegmens szelektor túllépi a deszkriptor tábla határt

Adatszegmens Az adatszegmens nem olvasható

3.72. ábra: Érvénytelen TSS állapotok Ez a hiba megjelenhet akár az eredeti taszk, akár a bejövő taszk kontextusában. Amíg a processzor nem ellenőrizte le teljesen az új taszk TSS-ének jelenlétét, a kivétel az eredeti taszk kontextusában jön létre. Abban a pillanatban, hogy az új TSS jelenléte detektálva van, a taszkkapcsolás befejezettnek lesz nyilvánítva. Vagyis a TR regiszterbe az új TSS-re mutató szelektor töltődik be, és ha a taszkkapcsolást kiváltó ok egy CALL hívás vagy egy megszakítás volt, az új TSS Link mezője a régi TSS-re mutat. Bármely hiba, amelyet a processzor ezen a ponton túlmenően fedez fel, az új taszk kontextusában lesz kezelve. Annak érdekében, hogy biztosítva legyen egy TSS elérhetősége a kivétel kiszolgálásához, az "érvénytelen TSS" kivételt kiszolgáló rutin egy taszkkaput alkalmazó taszk kell legyen. 3.9.9.11. 11-es számú megszakítás - Szegmens nincs jelen, (Segment Not Present) A "szegmens nincs jelen" hiba akkor generálódik, amikor a processzor észleli, hogy a deszkriptor P bitje 0-s. A processzor a következő esetek bármelyikében generálhatja ezt a hibát: • Miközben megkíséreli a CS, DS, ES, FS, vagy GS regisztereket

feltölteni, az SS regiszter feltöltése viszont, veremhibát okoz. • Miközben megkíséreli az LDT regisztert az LLDT utasítás

segítségével feltölteni, az LDT regiszter egy taszkkapcsolás közbeni feltöltése viszont, egy "érvénytelen TSS" kivételt okoz.

250

Page 249: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

• Miközben megkíséreli egy olyan kapudeszkriptor alkalmazását,

melynek P bitje betöltetlen szegmenst jelöl. Ez a hiba újraindítható. Ha a kivételkezelő betölti a szegmenst, majd ezt követően visszatér (return), a megszakított program végrehajtása folytatódik. Ha egy taszkkapcsolás közben "szegmens nincs jelen" kivétel keletkezik, a taszkváltás nem minden lépése lesz befejezve. Egy taszkkapcsolás alatt a processzor előszőr feltölti az összes szegmensregisztert, majd ellenőrzi ezek tartalmának helyességét. Amikor egy "betöltetlen szegmens" kivétel kerül felfedezésre, a hátramaradó szegmensregiszterek még nincsenek leellenőrizve, ezért ezek memória-hozzáférésre alkalmatlanok lehetnek. A "betöltetlen szegmens" kivételkezelő rutinja nem "számíthat" arra, hogy a CS, SS, DS, ES, FS, illetve GS regiszterekben található szegmens-szelektororokat felhasználhatja anélkül, hogy egy újabb kivételt ne okozna. A kivételkezelő minden egyes szegmensregisztert meg kell vizsgáljon, mielőtt megpróbálná folytatni a bejövő taszkot, különben a későbbiekben általános védelmi hibák keletkezhetnek, olyan feltételek mellett, amelyek a diagnosztizálást még nehezebbé teszik. Ezen eset kezelésére három lehetőség kínálkozik: 1. Taszk segítségével kezelni a "betöltetlen szegmens" kivételt. A

megszakított taszkra való visszakapcsolás arra készteti a processzort, hogy ellenőrizze a regisztereket, miközben a TSS-ből betölti őket.

2. PUSH és POP utasításokat alkalmazni az összes szegmensregiszterre.

Minden POP utasítás arra készteti a processzort, hogy ellenőrizze a szegmensregiszter új tartalmát.

3. Minden egyes szegmensregnek a TSS-ben eltárolt tartalmát

ellenőrizni, szimulálva azt a tesztelést, amelyet a processzor a szegmensregiszter betöltésekor végez.

Ez a kivétel lenyom egy hibakódot a verembe. A hibakód EXT bitje magasra állítódik, ha egy programon kívüli esemény idézte elő a

251

Page 250: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

megszakítást, amely a továbbiakban egy betöltetlen szegmensre mutatott. Az IDT bit akkor lesz beállítva, ha a hibakód egy IDT bemenetre utal (például, egy jelen nem levő kapura vonatkozó INT utasítás). Az operációs rendszer, a virtuális memória szegmensszintű alkalmazására, tipikusan a "betöltetlen szegmens" kivételt alkalmazza. Ennek ellenére, egy kapudeszkriptorbeli "nincs jelen" jelölés általában nem azt jelzi, hogy a szegmens nincs jelen (mivel a kapuknak nem felelnek meg feltétlenül szegmensek). A jelen nem levő kapukat az operációs rendszer, a számára különös jelentőséggel bíró kivételek jelzésére használhatja fel. 3.9.9.12. 12-es számú megszakítás - verem kivétel (Stack Exception) A veremhiba két feltétel mellett jön létre: • Bármely olyan műveletben történő határsértés eredményeként, amely

az SS regiszterre vonatkozik. Ide tartoznak az olyan verem-orientált utasítások, mint a POP, PUSH, ENTER, és a LEAVE, valamint egyéb olyan memóriahivatkozások, amelyek impliciten, vagy expliciten alkalmazzák az SS regisztert (például MOV AX, [BP+6] vagy MOV AX, SS:[EAX+6]). Az ENTER utasítás akkor váltja ki ezt a kivételt, amikor túl kevés hely van a lokális változók lefoglalására.

• Mikor kísérlet történik az SS regiszternek egy olyan deszkriptorral

való feltöltésére, amely a "szegmens nincs jelen" megjelölést viseli, de egyébként érvényes. Ez megjelenhet egy taszkkapcsoláskor, egy eltérő privilegizálási szintre történő CALL híváskor, egy eltérő privilegizálási szintre való visszatéréskor, egy LSS utasítás esetén, illetve egy SS regiszterbe történő MOV vagy POP utasítás esetén.

Amikor a processzor észleli a veremhibát, a hibakezelő vermébe lenyom egy hibakódot. Ha a kivétel oka egy betöltetlen veremszegmens, vagy az új veremnek, privilegizálási szintek közti CALL hívás alatt létrejött túlcsordulása, akkor a hibakód a kivételt előidéző szegmens szelektorát tartalmazza (a kivételkezelő tesztelheti a deszkriptor P bitjét annak megállapítására, hogy ezek közül melyik kivétel jött létre), ellenkező esetben a hibakód értéke 0.

252

Page 251: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

Ezt a kivételt kiváltó utasítás minden esetben újraindítható. A kivételkezelő vermébe eltárolt visszatérési cím arra az utasításra mutat, amelyet újra kell indítani. Általában, ez maga a kivételt okozó utasítás. Ugyanakkor, azon veremhiba esetén, amely egy "nincs jelen" jelzésű veremszegmens deszkriptor taszkkapcsolás közbeni betöltésekor jelentkezik, a mutatott utasítás a bejövő taszk első utasítása. Ha a veremhiba egy taszkkapcsolás közben lép fel, a szegmensregisztereket nem lehet a memória megcímzésére felhasználni. Egy taszkkapcsolás alatt, a szelektorértékek hamarabb kerülnek betöltésre a deszkriptorok ellenőrzésénél. Abban az esetben, ha veremkivétel generálódik, a fennmaradt szegmensregiszterek még nem lévén leellenőrizve, a használatuk kivételt okozhat. A veremhiba kivételkezelő rutinja nem "számíthat" arra, hogy a CS, SS, DS, ES, FS, illetve GS regiszterekben található szegmensszelektororokat felhasználhatja anélkül, hogy egy újabb kivételt ne okozna. A kivételkezelő minden egyes szegmensregisztert meg kell vizsgáljon, mielőtt megpróbálná folytatni a bejövő taszkot, különben a későbbiekben általános védelmi-hibák keletkezhetnek, olyan feltételek mellett, amelyek a diagnosztizálást még nehezebbé teszik. 3.9.9.13. 13-as számú megszakítás - Általános védelmi hiba (General Protection) Minden olyan védelemsértés, amely nem okoz egy másik kivételt, általános védelmi hiba kivételt eredményez. Ezek közé tartoznak: • A szegmens határ átlépése, a CS, DS, ES, FS, vagy GS szegmensek

használata közben. • A szegmens határ átlépése, egy deszkriptor-táblázat megcímzése

esetén. • Egy nem végrehajtható szegmensnek átadott vezérlés. • Egy csak-olvasható típusú adatszegmens vagy kódszegmens írása

253

Page 252: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

• Egy csak-végrehajtható típusú kódszegmens olvasása • Az SS regiszternek egy csak-olvasható szegmens szelektorával való

feltöltése (ha taszkkapcsolás alatt a szelektor egy TSS-ből származik, amely esetben egy érvénytelen TSS kivétel jelentkezik.)

• Egy rendszerszegmens szelektorának betöltése az SS, DS, ES, FS,

vagy GS regiszterekbe. • Egy csak-végrehajtható kódszegmens szelektorának betöltése a DS,

ES, FS, vagy GS regiszterekbe. • Egy végrehajtható szegmens szelektorának betöltése az SS regiszter

be. • A DS, ES, FS, vagy GS regiszterkel történő memória-hozzáférés, ha

azok a nullás deszkriptort tartalmazzák. • Egy foglalt (busy) taszkra való kapcsolás. • A privilégiumszabályok megsértése. • Az utasításhossz 15 Byte-nyi korlátjának túlhaladása (ez csak abban

az esetben történhet meg, ha egy utasítás elé redundáns prefixek kerülnek).

• A CR0 regiszter betöltése, ha a PG=1 (a lapozás engedélyezve van) és

PE=0 (a védelem le van tiltva). • Virtuális 8086-os üzemmódból, trap-kapuzott megszakítás vagy

kivétel, egy 0-tól eltérő privilegizálási szintű kezelő rutinra. • A CR4 regiszter fenntartott bitjeinek 1-re való átírása. Az általános védelmi kivétel egy hiba (fault). Egy általános védelmi hiba kivételre adott válaszként, a processzor lenyom a kivételkezelő vermére egy hibakódot. Ha a kivételt egy deszkriptor

254

Page 253: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

betöltése okozta, a hibakód ennek a deszkriptornak egy szelektorát tartalmazza. Különben a hibakód nulla. Egy hibakódon belüli szelektor forrásai a következők lehetnek: • Az utasítás egy operandusa. • Egy olyan kapu szelektora, amelyik az utasítás operandusa. • Egy taszkkapcsolásban résztvevő TSS-beli szelektor 3.9.9.14. 14-es számú megszakítás - Laphiba (Page Fault) Laphiba akkor jelenik meg, ha a lapozás engedélyezett (a CR0 regiszter PG bitje 1-es) és a processzor egy lineáris címnek fizikai címre való fordításakor, a következő feltételek egyikét észleli: • A címfodításhoz szükséges lapcímtár- vagy laptáblázat bejegyzés P

bitje 0-s, ami azt jelzi, hogy a laptáblázat, vagy az operandust tartalmazó lap nincs jelen a fizikai memóriában.

• A procedúra nem rendelkezik a kellő privilégiummal ahhoz, hogy a

megadott lapot elérhesse. Ha a laphiba oka egy lapszintű védelemsértés, a lapcímtárbeli hozzáférést jelző "A" bitek a hiba megjelenésével egyidőben lesznek beállítva. A laptáblázat hozzáférést jelző bitjei csak akkor kerülnek beállításra, ha nem lép fel lapszintű védelemsértés. A processzor két olyan információt biztosít a laphiba kezelőnek, amelyek segítik a kivétel diagnosztizálását, illetve helyreállítását (recover): • Egy verembeli hibakódot. A laphibákra adott hibakódoknak eltérő

formátumuk van, a többi kivétel hibakódjaihoz képest (lásd 3.73. ábra). A hibakód három dolgot közöl a kivételkezelővel:

255

Page 254: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

1. A kivételt egy betöltetlen (not-present) lap, egy hozzáférési jog megsértése, vagy egy fenntartott bit használata okozta-e.

2. A processzor felügyelőszinten működött-e a kivétel megjelenése

közben. 3. A kivételt előidéző memória-hozzáférés írás, vagy olvasás volt-e.

• A CR2 regiszter tartalmát. A processzor feltölti a CR2 regisztert azzal

a 32 bites lineáris címmel, amely a kivételt előidézte. A kivételkezelő ezt a címet arra használhatja, hogy lokalizálja a megfelelő lapcímtár, illetve laptáblázat bemeneteket. Ha a laphibakezelő végrehajtása közben egy újabb laphiba jön létre, a hibakezelő rutinnak el kell tárolni a CR2 regiszter tartalmát a verembe (push).

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

PRS

S

R_

U

V_

WFenntartva

P 0 A hiba oka egy nem jelenlévő lap volt 1 A hiba oka egy lapszint védelem megszegés volt W/R 0 A hibát okozó memória hozzáférés egy olvasás volt 1 A hibát okozó memória hozzáférés egy írás volt U/S 0 A hiba keletkezésekor a végrehajtás supervisor módban

történt. 1 A hiba keletkezésekor a végrehajtás user módban történt. RSV 0 A hibát egy beállított bit okozta a laptáblázat vagy a

lapcímtár egy fenntartott pozícióján 1 Egyéb

3.73. ábra: Laphiba hibakódok 3.9.9.14.1. Taszkkapcsolás alatti laphiba Egy taszkkapcsolás alatt a következő műveletek idéznek elő memória hozzáférést:

256

Page 255: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

• A kimenő taszk állapotának a taszk állapot-szegmensébe (TSS) való

írása. • A bejövő taszk TSS-deszkriptorának lokalizálása a GDT olvasásával. • A bejövő taszk TSS-ének olvasása, a benne levő szegmens-

deszkriptorok típusának ellenőrzése végett. • A bejövő taszk LDT-jének esetleges olvasása, az új TSS-ben tárolt

szegmensregiszterek ellenőrzése végett. Laphiba származhat bármely fentemlített művelet végrehajtásából. A két utolsó alpont esetén, a kivétel a bejövő taszk kontextusában jelenik meg. Az utasításmutató az új taszk következő utasítását jelöli ki, nem a taszkkapcsolást előidéző utasítást (vagy az utoljára végrehajtás alatt álló utasítást, mint a megszakítások esetében). Ha az operációs rendszer struktúrája megengedi, hogy a taszkkapcsolások idején laphibák jelenjenek meg, a laphibakezelőt taszkkapun keresztül kell meghívja. 3.9.9.14.2. Laphiba összeférhetetlen veremmutatóval Különös figyelmet kell fordítani annak biztosítására, hogy a laphiba ne késztesse a processzort egy érvénytelen veremmutató (SS:ESP) alkalmazására. A 16 bites processzorokra írt software-ek gyakran használnak egy utasítás-párt egy új veremre való áttéréshez, például: MOV SS, AX MOV SP, StackTop (verem teteje) Minthogy a második utasítás hozzáfér a memóriához, a 32 bites processzorok esetén lehetséges, hogy laphiba keletkezzen, miután az SS regiszterben levő szelektor megváltozott, de még mielőtt az SP regiszter tartalma elszenvedte volna a megfelelő módosításokat. Ebben a stádiumban, az SS:SP (vagy 32 bites programokban az SS:ESP)

257

Page 256: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

veremmutató két része, összeférhetetlen. Az új veremszegmenssel a régi veremmutató kerül alkalmazásra. A processzor nem alkalmaz összeférhetetlen veremmutatót, ha a laphiba kiszolgálása egy helyesen definiált veremre történő átváltást (stack switch) idéz elő, (tehát a kivételkezelő rutin egy taszk, vagy egy privilegizáltabb procedúra). Ugyanakkor, ha a laphiba ugyanazon a privilegizálási szinten van, és ugyanabban a taszkban található, mint a kivételkezelő rutin, a processzor megkíséreli alkalmazni az inkonzisztens veremmutató által kijelölt vermet. Azokban a lapozást használó rendszerekben, amelyek a laphibákat a hibázó taszk keretén belül (trap-, vagy megszakítás kapukkal) kezelik, a laphiba-kezelő rutinnal megegyező privilegizálási szinten futó software-ek számára ajánlott, hogy inkább az LSS utasítás segítségével inicializáljanak egy új vermet, mintsem a fentemlített utasításpárral. Ha a laphiba-kezelő rutin a 0-s privilegizálási szinten fut (normális esetben), a probléma csak a 0-s szinten szaladó programokra szűkül le, vagyis tipikusan az operációs rendszer kerneljére. 3.9.9.15. 16-os számú megszakítás - Lebegőpontos egység hiba, Floating-Point Error) A numerikus koprocesszor hiba egy lebegőpontos aritmetikai utasítás által kiváltott hibát jelez. A 16-os számú megszakítás csak akkor jöhet létre, ha a CR0 regiszterbeli NE bit 1-re van állítva. Ha NE=1, egy nem maszkolható lebegőpontos kivétel a 16-os megszakítást váltja ki, azonnal a következő nemvezérlő (non-control) lebegőpontos utasítás, vagy WAIT utasítás előtt. A 16-os megszakítás egy operációs rendszer-hívás, amely meghívja a kivételkezelő rutint. Ha NE=0 (és az IGNE# bemenet inaktív), egy nem maszkolt koprocesszor hiba azonnal a következő nemvezérlő (non-control) lebegőpontos utasítás, vagy WAIT utasítás előtt, lefagyásra (freeze) kényszeríti a processzort. A lefagyott processzor egy külső megszakításra vár, amelyet a külső hardware kell szolgáltasson, válaszként a 486-os,

258

Page 257: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

vagy Pentium processzor FERR# vonalán kimenő jelre ( a FERR# hasonlít az 387-es numerikus koprocesszor ERROR# vonalára). Az NE értékétől függetlenül, egy maszkolatlan numerikus kivétel aktiválja a 486-os és a Pentium processzorok FERR# vonalát. Ebben az esetben a külső megszakítás hívja meg a kivételkezelő rutint. Ha de az IGNE# bemenet aktív, a processzor figyelmen kívül hagyja a kivételt, és folytatja feladatát. A külső megszakítások általi hibajelentés a DOS-al való kompatibilitás érdekében támogatott. A numerikus hibák kezelésekor a processzornak két feladata van: • Amikor egy hibát (error) észlel, nem szabad megsértenie a numerikus

kontextust. • Törölnie kell a hibát, és meg kell kísérelnie a hiba helyreállítását

(recovery). Bár az eljárás, amellyel a programozók ezen feladatokat elláthatják, alkalmazásonként változik, mégis a kivételkezelők többsége magába foglalja a következő lépéseket: • Az FPU környezetének (vezérlő-, állapot-, és toldalék szók,

operandus- és utasítás mutatók) elmentése úgy, ahogyan az a kivétel pillanatában volt.

• Az állapotszó kivételt jelző bitjeinek törlése. • Az INTR, NMI, vagy SMI által letiltott megszakítások engedélyezése. • A kivétel identifikálása, az elmentett környezetbeli állapot-, és

vezérlőszó vizsgálata segítségével. • Néhány rendszer-függő művelet elvégzése, a kivétel helyreállítása

(rectify) érdekében. • Visszatérés a megszakított programba, és a normális vezérlés

folytatása.

259

Page 258: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.9.9.15.1. Numerikus kivételek kezelése A numerikus kivételeket kezelő rutinoknak számos formája létezhet. Ezek megváloztathatják az FPU aritmetikai és programozási szabályait. Ezek a módosítások újradefiniálhatják egy hiba (error) alapértelmezés szerinti kijavításának módját, megváltoztathatják az FPU megjelenését a programozók számára, vagy módosíthatják az FPU aritmetikai szabályainak definícióját. kivételekre adott válaszok módosításának egyike az volna, hogy a denormális aritmetika a memóriából betöltött denormálisokon legyen elvégezve. Egy megjelenésbeli változást a regiszterveremnek a memóriába való kiterjesztése jelentené, "végtelen" számú numerikus regiszter biztosításának érdekében. Az FPU aritmetikája átváltoztatható arra, hogy automatikusan kiterjessze a változók pontosságát és a tartományát, amikor ez túlhaladódik. Néhány lehetséges, alkalmazás-függő lehetőség: • Egy kivétel számláló inkrementálása, a későbbi kijelzés, vagy

kinyomtatás végett. • Diagnosztika-információk kinyomtatása, vagy kijelzése (például az

FPU környezete és regiszterei). • A további végrehajtás abortolása. • Egy diagnosztika érték (egy NaN) elmentése az eredményben, majd a

számítások folytatása. Fontos, hogy egy kivétel, az alkalmazástól függően, nem jelent minden esetben hibát (error). Amint a kivételkezelő kijavítja a kivételt előidéző feltételt, a kivételt okozó lebegőpontos utasítás újraindítható, ha ez megfelelő. Ugyanakkor, az IRET utasítást használva ez nem lehetséges, mert a trap a "vétkes" ESC utasítást követő ESC vagy WAIT utasításnál jelenik csak meg. A kivételkezelő meg kell szerezze a "vétkes" utasítás címét azon taszk belsejében, amely kezdeményezte azt, másolatot kell készítenie róla, a másolatot végre kell hajtania a "vétkes" taszk

260

Page 259: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

kontextusában, majd egy IRET utasítással vissza kell térjen az aktuális utasításláncba. A numerikus kivételt okozó feltétel kijavítása érdekében, a kivételkezelő fel kell ismerje pontosan az FPU azon állapotát, amelyben a kivételkezelő meghívásának pillanatában volt, majd képes kell legyen az FPU arra az állapotára visszakövetkeztetni, amely a kivétel kezdetén volt aktuális. Az FPU állapotának visszafejtéséhez a programozóknak tudniuk kell, hogy a különböző osztályú kivételek eltérő pillanatokban lesznek felismerve, a numerikus utasítás végrehajtása előtt, vagy azt követően. Az érvénytelen művelet, zéróval való osztás és denormális operandus kivételek egy művelet megkezdése előtt lesznek detektálva, míg a túlcsordulás, alulcsordulás, és a pontosság kivételek addig nem jelennek meg, amíg egy valódi eredmény nincs kiszámítva. Ha egy műveletkezdés előtti kivétel detektálódik, az FPU regiszterverme és memóriatára még nincs felújítva, és úgy tűnik, mintha a "vétkező" utasítás még nem lett volna végrehajtva. Amikor egy műveletkezdés utáni kivétel detektálódik, a regiszterverem és memória úgy néznek ki, mintha az utasítás befejeződött volna, tehát fölújíthatók. Ugyanakkor, egy store, vagy store-andpop típusú műveletben, a maszkolatlan túl/alulcsordulás műveletkezdés előtti kivételként van kezelve, a memória nem lesz felfrissítve, és a veremből semmi sem lesz kiemelve. 3.9.9.15.2. Szimultán kivételekre adott válaszok Az olyan estekben, amelyekben szimultán, többszörös kivételek keletkeznek, az FPU az alábbiakban következő elsőbbségi-lista alapján jelzi az egyik kivételt. Ez annyit jelent, hogy például egy SNaN zéróval való osztása "érvénytelen műveletet" eredményez, és nem "nullával való osztási hibát" ; a maszkolt eredmény a QNaN valódi végtelen (real infinite), és nem a végtelen ∞ . Egy denormális, vagy pontosság kivétel ugyanakkor, kísérhet egy numerikus alulcsordulást, vagy túlcsordulást. A numerikus kivételek közti sorrend a következő:

261

Page 260: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

1. Érvénytelen művelet kivétel, a következőképpen tovább osztva:

• verem alulcsordulás • verem túlcsordulás • nem támogatott formátumú operandus • SNaN operandus

2. QNaN operandus. Bár ez nem egy kivétel, ha egy operandus egy

QNaN, kezelése előnyt élvez az alacsonyabb prioritású kivételek előtt. 3. Bármely, fentebb nem említett kivétel, vagy nullával való osztás. 4. Denormális operandus. Ha le van maszkolva, a művelet végrehajtása

folytatódik, és ugyanakkor egy alacsonyabb prioritású kivétel is megjelenhet.

5. Numerikus alulcsordulás, vagy túlcsordulás. A pontatlan eredmény

(pontosság) flag is bejelölhető. 6. Pontatlan eredmény (pontosság-) kivétel. 3.9.9.16. 17-es számú megszakítás - Illeszkedés ellenőrzés ellenőrzési hiba (Alignment Check) Az illeszkedés ellenőrzési hiba kivétel a nem illesztett (unalign) operandusokhoz való hozzáférés esetén generálódhat. Például, egy páratlan Byte-címen tárolt szó, vagy egy duplaszónak egy olyan címen való tárolása, amelyik nem négynek többszöröse. A 3.74. ábra az adattípusok által igényelt illeszkedési feltételeket sorolja fel. Az illeszkedés ellenőrzés engedélyezéséhez a következő feltételek teljesítése szükséges: • a CR0 regiszterbeli AM bit magasra legyen állítva • az AC flag magasra legyen állítva • a CPL értéke 3 legyen (felhasználói mód)

262

Page 261: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

Adat típus A címnek oszthatónak kell lennie: WORD 2 DWORD 4 rövid REAL 4 hosszú REAL 8 TEMPREAL 8 Szelektor 2 48 bites szegmentált mutató 4 32 bites lap mutató 4 32 bites szegmentált mutató 2 48 bites pszeudo deszkriptor 4 FSTENV/FLDENV mentési terület

2 vagy 4, az operandusmérettől függően.

FSAVE/FSTOR mentési terület 2 vagy 4, az operandusmérettől függően.

Bit sztring 4

3.74. ábra: Adattípusok által igényelt illeszkedési feltételek Az illeszkedés ellenőrzés azon programok számára hasznos, amelyek a mutatók alsó két bitjét használják az általuk megcímzett adatstruktúra típusának azonosítására. Például, egy matematikai könyvtár szubrutinja elfogadhat numerikus adatstruktúrákra mutató pointereket. Ha e struktúra típusához az '10' (bináris) kódot társítjuk az erre a típusra mutató pointer legalsó két bitjén, a matematikai szubrutinok kijavíthatják a típuskódot -10 (bináris) eltolás hozzáadásával. Abban az esetben, ha a szubrutin helytelen mutatótípust kapna, egy illesztetlen (unaligned) hivatkozás jönne létre, amely kivételt generálna. Az illeszkedés ellenőrzés hiba kivételek csak felhasználói módban (3. privilégium szinten) generálódnak. Azok a memóriahivatkozások, amelyek alapértelmezése a 0. privilégium szint, mint például a szegmens-deszkriptorok betöltése, nem okozzák a fentemlített kivételt még abban az esetben sem, ha ezt egy felhasználói módbeli memóriahivatkozás okozná. Egy 48 bites pszeudo-deszkriptor (egy deszkriptor-táblázat bázisregiszter-tartalmának memóriabeli másolata) tárolása felhasználói módban, illeszkedés ellenőrzés hiba kivételt generálhat. Bár a felhasználói

263

Page 262: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

programok normális esetben nemigen tárolnak pszeudo-deszkriptorokat, a hiba mégis elkerülhető, a pszeudo-deszkriptornak egy páratlan szó címre való illesztésével (tehát egy olyan címre, amelynek 4-el való osztási maradéka 2). Az FSAVE és FRSTOR utasítások illesztetlen referenciákat (hozzáféréseket) állítanak elő, amelyek illeszkedésellenőrzés-hiba kivételeket okozhatnak. Ezekre az utasításokra a felhasználói programoknak ritkán van szükségük. 3.9.9.17. 18-as számú megszakítás - Processzortípus ellenőrzés (Machine Check) A processzortípus ellenőrzés modell-specifikus kivétel, amely csak a Pentium processzorokon létezik. 3.9.10. A kivételek összefoglalása A 3.75.ábra összefoglalja a Pentium processzor által felismert kivételeket.

Meghatározás Vektor szám

Visszatérési cím a hibára

mutat?

Kivétel típus

A kivétel forrása

Osztás nullával 0 Igen Hiba DIV és IDIV művelet

Debug kivétel 1 *1 *1 Akármilyen kód vagy adat hivatkozás

Töréspont 3 Nem Trap INT 3 művelet Túlcsordulás 4 Nem Trap INTO művelet Határsértés 5 Igen Hiba BOUND

művelet Érvénytelen op. kód

6 Igen Hiba Fenntartott műveleti kódok

264

Page 263: Otodik Generacios Processzorok_pentium

Védett üzemmódú kivételek és megszakítások

Eszköz nem elérhető

7 Igen Hiba ESC és WAIT művelet

Dupla hiba 8 Igen Abort Bármi Érvénytelen TSS 10 Igen2 Hiba JMP, CALL,

IRET művelet, megszakítások és kivételek

Szegmens nincs jelen

11 Igen2 Hiba Akármilyen művelet ami szegmenst vált

Verem hiba 12 Igen Hiba Verem művelet Általános védelmi hiba

13 Igen Hiba/ trap3

Akármilyen kód vagy adat hivatkozás

Laphiba 14 Igen Hiba Akármilyen kód vagy adat hivatkozás

FPU hiba 16 Igen Hiba4 ESC és WAIT művelet

Illeszkedés ellenőrzés

17 Igen Hiba Akármilyen adat hivatkozás

Géptípus ellenőrzés

18 - Modellfüggő

Software megszakítás

0-255 Nem Trap INT n művelet

3.75. ábra: Kivételek összefoglalása

Megjegyzések: 1. A nyomkövető kivételek trap-ek, vagy hibák lehetnek. Ez a kivétel a

DR6 regiszter tartalmát vizsgálja meg ahhoz, hogy megkülönböztesse a trap-eket a hibáktól.

2. A taszkkapcsolások közbeni újraindíthatóság feltételhez kötött.

265

Page 264: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3. Minden általános védelmi hiba újraindítható. Ha a hiba a kivételkezelő meghívására tett kísérlet közben jelentkezik, a megszakított program újraindítható, de a megszakítás maga elveszhet.

4. A lebegőpontos hibák nem lesznek jelentve, csak a hibát generáló

ESC utasítást követő első ESC vagy WAIT utasítás beérkezésekor. 3.9.11. Hibakódok összefoglalása A 3.75. ábra összesíti minden egyes kivételt követő hiba információt.

Meghatározás Vektor szám Hibakód van ? Osztási hiba 0 Nincs Debug kivétel 1 Nincs Töréspont 3 Nincs Túlcsordulás 4 Nincs Határellenörzés 5 Nincs Érvénytelen op. kód 6 Nincs Eszköz nem elérhető 7 Nincs Dupla hiba 8 Van, mindíg nulla Érvénytelen TSS 10 Van Szegmens nincs jelen 11 Van Verem hiba 12 Van Ált. védelmi hiba 13 Van Laphiba 14 Van, spec. formátum FPU hiba 16 Nincs Illeszkedés ellenőrzés

17 Van, mindíg nulla

Modell ellenőrzés 18 Modellfüggő Software megszakítás

0-255 Nincs

3.75. ábra: Hibakódok összefoglalása

266

Page 265: Otodik Generacios Processzorok_pentium

Rendszermenedzselő üzemmód

3.10. Rendszermenedzselő üzemmód A rendszermenedzselő üzemmód (SMM - System Management Mode) segíti a rendszerfejlesztőket az olyan rendkívül magas szintű rendszerfunkciók kialakításában, mint a fogyasztásmenedzsment vagy a biztonság, nemcsak az alkalmazói software, hanem maga az operációs rendszer számára is átlátszó módon. Az SMM a védett, valós, és 8086-os virtuális módokkal egyszinten levő, egyik fő üzemmód. Az SMM azonban úgy volt tervezve, hogy az alkalmazói software-ek és általános célú operációs rendszersoftware-ek nem, csak a firmware tudja használni. A 3.76. ábra azt mutatja be, hogy más üzemmódokból a processzor hogyan léphet be az SMM üzemmódba, illetve hogyan léphet ki abból. A külső SMI# jel a processzort arra kényszeríti, hogy az átkapcsoljon az SMM üzemmódba. Az SMM üzemmódból az RSM utasítással lehet kilépni. Az SMI# jel aktiválását egy hordozható számítógép esetében például a gép fedelének lecsukása okozhatja. Az SMM átlátszó az alkalmazói programok és az operációs rendszer számára, mivel: • Az SMM üzemmódba való belépés egyetlen útja egy külső jel által

kiváltott, nem maszkolható megszakítás. • A processzor egy különálló címtartományban levő SMM kód

végrehajtását kezdi meg, mely címtartomány neve rendszer-menedzsment-RAM (SMRAM).

• Az SMM üzemmódba való belépéskor a processzor a megszakított

program regiszter-állapotát az SMRAM-nak egy SMM állapottároló rekord nevezetű részébe menti.

• A normális esetben az operációs rendszer vagy az alkalmazások által

kezelt minden megszakítás az SMM üzemmódba való belépéskor letiltódik.

267

Page 266: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

• Egy speciális RSM utasítás az SMM állapot-rekordból viszszaállítja a processzor regisztereinek állapotát és a vezérlést visszaadja a megszakított programnak.

Az SMM abban hasonlít hasonlít a valós üzemmódhoz, hogy nincsenek privilégiumszintjei és nem végez címleképzést. Egy SMM program végrehajthat I/O és más rendszerutasításokat, és négy GByte- memóriát címezhet. 3.10.1. Az SMI megszakítás Amikor egy utasításhatáron az SMI# jelet felismeri, a processzor előbb kivárja, hogy minden tárolási művelet befejeződjön (a külsőleg függőben levőket is ide értve). Ezután elmenti a regiszterek állapotát az SMRAM-ba és megkezdi az SMM kezelő végrehajtását. Az SMI#-nek a debug kivételek és külső megszakításoknál nagyobb prioritása van. Ez azt jelenti, hogy ha az utasításhatáron e kivételek közül több mint egy jelenik meg, akkor csak az SMI lesz kiszolgálva, a debug kivétel vagy külső megszakítás nem. Az újabb SMI# vagy NMI kéréseket az SMM-ben levő processzor már nem veszi figyelembe. A CR4 regiszter gépellenőrzést engedélyező bitje szintén törlődik. Az SMM-ban megjelenő SMI# és NMI megszakítások betöltődnek ugyan, de csak akkor hajtódnak végre, amikor a processzor az RSM utasítás által kilép az SMM-ból.

268

Page 267: Otodik Generacios Processzorok_pentium

Rendszermenedzselő üzemmód

RESET

RESET

Valós címzési mód

PE=1PE=0

Megszakítás,kivétel

Taszkváltás,IRET

SMI

RSM

SMI

RSM

SMI

RSM

Védett mód

Virtuális 8086 mód

Rendszer menedzselőmód

3.76. ábra: Az üzemmód-állapotok közti átmenetek Az SMM-ba való belépéskor a kezelőket igénylő külső megszakítások letiltódnak (az EFLAGS regiszter IF bitje törlődik). Erre azért van szükség, mert az SMM-ban levő processzor egy külön címtartományt használ. Emiatt a megszakítás deszkriptor-táblázatban (IDT) tárolt vektorok nem alkalmazhatóak. A kivételek engedélyezéséhez az SMM program új megszakítás/kivétel vektorokat kell felépítsen. Az SMM megszakításvektor-táblázatának formátuma megegyezik a valós üzemmódban használtéval. Amíg a megszakításvektor-táblázatot helyesen fel nem építi, addig az SMM kezelőprogram nem generálhat kivételeket. Kivételek azonban még letiltott megszakítások esetén is keletkezhetnek. A belső megszakítások megjelenését csak a helyesen megírt software előzheti meg. Az új kivételvektorok beállítása után a belső kivételek kiszolgálhatók.

269

Page 268: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

Ugyancsak az SMM-be való belépéskor az lépésenkénti végrehajtás (az EFLAGS TF bitjének értéke nulla) és címtöréspont (a DR7 törölve van) kivételek is törlődnek. A processzor debug-lehetőségeinek maga az SMM-ben való hibakeresésre felhasználása érdekében az SMM kezelőnek előbb biztosítania kell, hogy az IDT-be egy megfelelő, elérhető kezelő legyen installálva, majd a debug regiszterekbe illetve az EFLAGS-be be kell töltenie a megfelelő értékeket. 3.10.2. Az SMM kezdeti állapota Miután a processzor felismerte az SMI# jelet és elmentette a regiszterek állapotait, saját állapotát a 3.77. ábrán bemutatott értékekre változtatja.

Regiszter Tartalom EFLAG 2 EIP 8000h CS szelektor 3000h, ez az érték a 30000h báziscím

inicializáló utasítását adja DS, ES, FS, GS, SS szelektorok

0

DS, ES, FS, GS, SS határ

0FFFFFFFFh

DS, ES, FS, GS, SS jellemzők

16 bites, felfelé növekvő

CR0 0, 2, 3 és 31. bitek törölve (PE, EM, TS, PG) CR4 0 CR6 Nem definiált CR7 400h GDTR, LDTR, IDTR, TSSR

Nem definiált

Modell specifikus regiszter

Nincs módosítva

3.77 ábra: Az SMM kezdeti állapota

270

Page 269: Otodik Generacios Processzorok_pentium

Rendszermenedzselő üzemmód

Az adatcache-ek kiürítéséért, az adat- valamint utasításcache-ek érvénytelenítéséért és ezeknek az SMM alatti letiltásáért a külső hardware felel. 3.10.2.1. Az SMM végrehajtása Az SMM kezelő végrehajtását a processzor a CS szegmens 8000H ofszetjétől kezdi. A kódszegmens báziscíme kezdetben 30000H, ez a cím azonban megváltoztatható. Az SMM kezelőjének meghívásakor a processzor CR0 regiszterének PE (védelem) és PG (lapozás) bitjei törlődnek, így a processzor a valós üzemmódhoz hasonló környezetbe kerül. Mivel a (CS-től különböző) szegmens-bázis törlődik és a szegmenshatárok 0FFFFFFFFH értékűre állítódnak, a címtartomány egyetlen lapos, nem szegmentált, 4GB-os lineáris tartományként kezelhető, a processzor azonban a címeket a valós üzemmódban használttal megegyező módon generálja. Amikor a szegmensszelektorba egy 16 bites érték töltődik, az érték 4 bittel balra tolódik és betöltődik a szegmens-bázisba. Az SMM-ben egy szegmensregiszter betöltése során a deszkriptor regiszterek rejtett részeiben a határ mező és az attribútumok nem módosulnak. Az operandusméret és címméret alapértelmezése 16 bit, a 4 GByte-os logikai címtartományban bárhol, az adatok közvetlen elérésére használhatók az operandusméret- és címméret-fölülíró prefixek. Az operandusméret-fölülíró prefixekkel együtt az SMM kezelő a vezérlésnek a négy GByte-os címtartomány bármelyik pontjára való átadására használhat ugrásokat, hívásokat és visszatéréseket. Megjegyzendők azonban a következő korlátozások: • Bármely vezérlésátadás, melynek nincs operandusméret-fölülíró

prefixe, az EIP regisztert annak alsó 16 bitjére csonkítja. • A valós üzemmódban használthoz hasonló báziscím-képzés miatt a

hosszú ugrások, hívások, megszakítások vagy kivételek a vezérlést

271

Page 270: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

nem adhatják át egy 20 bitesnél nagyobb méretű (azaz egy MByte-nál nagyobb) báziscímű szegmensre.

• Egy kivétel vagy megszakítás nem adhatja át a vezérlést egy 16

bitesnél (64 kByte-nál) nagyobb méretű szegmensre. • Ha a kivételek és megszakítások engedélyezve vannak, akkor a

visszatérési címeknek csak az alsó 16 Byte-ja kerül a veremre. Ha a megszakított procedúra ofszetje nagyobb, mint 64 kByte, akkor a megszakításkezelő, a vermen levő visszatérési címnek a software általi bizonyos módosítása nélkül, nem tudja visszaadni a vezérlést az illető procedúrának.

3.10.3. Az SMRAM processzor-állapot tároló formátuma Az SMRAM terület állapottároló rekordjának szerkezetét a 3.78 ábra mutatja be. A regiszterek fizikai helye ahhoz a CS-bázisba töltött értékhez képest relatívak, mely kezdetben 30000H, de megváltoztatható. A regiszterek abszolút helye: (CSbázis + RegiszterOfszet). Az FFA8H-FFFFH ofszeteken levő mezők az SMM# megszakítás pillanatában a processzor regiszter-állapotát tárolják. A fennmaradó biteket a következő részek mutatják be.

Regiszter ofszet Regiszter 0FFFC CR0 0FFF8 CR3 0FFF4 EFLAG 0FFF0 EIP 0FFEC EDI 0FFE8 ESI 0FFE4 EBP 0FFE0 ESP 0FFDC EBX 0FFD8 EDX 0FFD4 ECX

272

Page 271: Otodik Generacios Processzorok_pentium

Rendszermenedzselő üzemmód

0FFD0 EAX 0FFCC DR6 0FFC8 DR7 0FFC4 TR* 0FFC0 LDTR* 0FFBC GS* 0FFB8 FS* 0FFB4 DS* 0FFB0 SS* 0FFAC CS* 0FFA8 ES 0FFA7-0FF04 Fenntartva 0FF02 Leállás automatikus

újraindítása 0FF00 I/O trap újraindítása 0FEFC SMM reviziószám 0FEF8 Állapot tároló bázisa 0FEF7-0FE00 Fenntartva

3.78. ábra: Az állapottároló formátuma

Megjegyzések: • A FENNTARTOTT-ként bejelölt területeket az SMM kezelő nem

használhatja. E területekre való írás a processzor hibás működését eredményezheti. Az a software, amelyik ezeknek a területeknek a tartalmára alapoz, az elkövetkező processzor generációkkal inkompatibilis lehet.

• * A felső 2 Byte FENNTARTOTT. A 3.78. ábrán megnevezett regiszterek láthatók, tehát az SMM kezelő kiolvashatja értéküket az állapottároló rekordból. Ezek közül az adattételek közül az SMM egyeseket megváltoztathat és a megváltozott értékük a processzor regisztereibe az RSM utasítással tölthető be. A 3.79. ábra bemutatja, hogy mely adattételek változtathatók meg, és melyek nem. A táblázat még azt is megmutatja, hogy egyes regiszterértékek az

273

Page 272: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

állapottárolóba mentődnek, azonban nem láthatók. E tételek a fenntartott részeken tárolódnak, de helyük és formátumuk különböző processzor-verziók esetén más és más. A 3.79. ábra utolsó sora azokat a regisztereket mutatja, melyeket az SMI# és RSM nem tárol illetve állít vissza automatikusan. Ha az SMM kezelő megváltoztatja ezeket a regisztereket, akkor implicit módon el is kell tárolja, illetve vissza is kell állítsa őket.

Állapot adat Mentett és visszatöltött?

Olvasható? Írható?

EDI, ESI, ESP, EBX, EDX, ECS, EAX, EFLAG, EIP

Igen Igen Igen

CR0, CR3, DR6, DR7, TR, LDTR, GS, FS, DS, SS, CS, ES

Igen Igen Nem

CR1, CR2, CR4, A GDT láthatatlan deskriptor regiszterei, LDT, IDT, CS, DS, ES, FS, GS

Igen Nem Nem

DR0-DR7, FP regiszterek STn, FCS, FSW, címző szó, FP utasítás mutató, FP op. kód és operandus mutató

Nem Nem Nem

3.79. ábra: Állapot-beosztás

3.10.3.1. Az SMM revízió-azonosító (FEFCH ofszet) A 32 bites SMM revízió-azonosító megadja az SMM verziószámát és a processzor által nyújtott lehetőségeket. 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 68 7 5 4 3 2 1 0

SMM revizió szintFenntartva, értéke 0

I/O trap kiterjesztésSMM bázis relokáció

3.80. ábra: SMM revízió-azonosító

274

Page 273: Otodik Generacios Processzorok_pentium

Rendszermenedzselő üzemmód

Az SMM revízió-azonosító mezőit a 3.81. ábra mutatja. Az 1-re állított 16. vagy 17. bitek azt mutatják, hogy a processzoron az illető lehetőségek implementálva vannak.

Bitek Megjegyzés 0-15 Alap SMM verzió azonosító 16 A processzor támogatja az I/O trap újraindítást 17 A processzor támogatja az SRAM áthelyezését

3.81. ábra: SMM revízió-azonosító táblázat

Megjegyzés: Minden más bit fenntartott. 3.10.3.2. I/O trap-újraindítás (FF00H ofszet) Az I/O trap-újraindító slot lehetővé teszi az SMM számára, hogy az az RSM utasítást egy megszakított I/O utasítás automatikus újra történő végrehajtására bírja. Ha az RSM utasítás végrehajtásakor az I/O trap-újraindító slot az FFH értéket tartalmazza, akkor a processzor az SMI# által megszakított I/O utasítást automatikusan újra végrehajtja. Ha az RSM utasítás végrehajtásakor az I/O trap-újraindító slot a 00H értéket tartalmazza, akkor a processzor az SMI# által akkor a processzor nem hajtja végre újra az I/O utasítást. Az I/O trap-újraindító slot-ot az SMI# feldolgozásakor a processzor automatikusan nullával inicializálja. Az SMM kezelő csak akkor kell az I/O trap-újraindító slotot a 0FFH értékre állítsa, amikor az SMI# egy I/O utasításhatáron szakad meg egy trap által. Ha az RSM utasítás végrehajtásakor a processzor az I/O trap-újraindító slotban a 0FFH értéket találja, de a megszakított utasítás nem egy I/O utasítás, akkor a művelet eredménye kiszámíthatatlan.

275

Page 274: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.10.3.3. Felfüggesztett állapotból való automatikus újraindítás (FF02H ofszet) Ha felfüggesztett állapotában a processzor felismeri az SMI#-t, akkor a processzor a felfüggesztett állapotból való automatikus újraindítás Byte-ját 1-re állítja, egyébként törli azt. Ha ez a mező 1, akkor az SMM kezelő megváltoztathatja értékét annak érdekében, hogy ellenőrizze a processzornak a kezelőből az RSM utasítással való, a HLT utasítást folytató visszatérését. A lehetőségeket a 3.82. ábra mutatja. Érték a belépésnél Érték a kilépésanél CPU működés a kilépésnél

0 0 Visszatér a megszakított program következő utasítására

0 1 Kiszámíthatatlan 1 0 Visszatér a HLT utáni

utasításra 1 1 Visszatés a megszakított HLT

utasításra

3.82. ábra: Felfüggesztett állapotból való automatikus újraindítás 3.10.3.4. Az állapottároló bázisa (FEF8H ofszet) A processzornak egy olyan láthatatlan belső regisztere van, amelyik megadja az állapottároló rekord és az SMM kezelő első utasításának fizikai báziscímét. Az SMRAM relokációját támogató processzorok (a Pentium is ilyen) e regiszter tartalmát az SMI# jel feldolgozása alatt az állapottároló-bázisba mentik. Az RSM utasítás végrehajtásakor a Pentium processzor viszszatölti belső regisztereinek tartalmát az állapottároló-bázisból. Így lehetővé válik e regiszter tartalmának megváltoztatása. Az állapottároló-bázis és a processzor belső, fenntartott regiszterében tárolt kezdeti érték 030000H.

276

Page 275: Otodik Generacios Processzorok_pentium

Rendszermenedzselő üzemmód

Ez a már meglévő SMM rendszerekkel való kompatibilitás érdekében van így, melyeknél az alapértelmezésben szereplő SMRAM terület minimálisan a 38000H címnél kezdődő 32 kByte-nyi részként van definiálva. Most, hogy az SMRAM helye változó lehet, az SMRAM terület egy minimálisan 32 kByte méretű, az [8000H + SCbázis] címen kezdődő területként van definiálva. 3.10.4. Az SMRAM relokációja Az SMM revízió-azonosító megadja, hogy a processzor támogatja az SMRAM relokációját vagy sem. Az SMRAM nem cache-elhető címekre való relokálása megelőzheti azt, hogy az SMI# feldolgozása megzavarja a cache tartalmát. Az SMRAM-relokáció megvalósítása az SMRAM állapot-tárolójának egy lokációja és egy láthatatlan belső regiszter felhasználásával történik. A 4 Byte-os állapottároló-bázis a processzor által az SMM-be való belépéskor felhasznált láthatatlan belső regiszternek felel meg. Az SMM állapottároló és az SMM kezelő első utasításának helyét határozza meg. Egy SMI# kiszolgálásakor a processzor láthatatlan belső regiszterének tartalma az állapottároló-bázis mezőben lesz tárolva. Egy RSM utasítás végrehajtásakor a processzor a láthatatlan regisztert az állapottároló-bázisból tölti fel. Az SMM kezelő megváltoztathatja az állapottároló-bázis mező értékét az állapottároló rekordban. Ezután, amikor újabb SMI#-k generálódnak, az SMM állapottároló és a kódszegmens-bázisok számára generált lokációk számára a processzor az új értéket használja. Megjegyzendő, hogy az INIT vonal aktiválása a belső állapottároló-bázisregiszter tartalmát nem változtatja meg. Ugyancsak megjegyzendő, hogy amikor a processzor az új állapottároló-bázist feltölti, a változtatás nincs hatással a CS szelektorra.

277

Page 276: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.10.5. Visszatérés az SMM-ből Az RSM utasítás kilép az SMM-ből és visszaadja a vezérlést a megszakított programnak. Az RSM utasítás csak az SMM-ben hajtható végre. Végrehajtására az SMM-en kívül tett kísérlet érvénytelen-opkód kivételt okoz. Az RSM utasítás végrehajtásakor a processzor előzőleg (az SMM-be való belépéskor) elmentett állapota visszaállítódik és a vezérlés visszakerül a megszakított programra. Ha a processzor egy érvénytelen állapot-információt detektál, akkor a lekapcsolt állapotba vált át. Ez csak a következő esetekben történhet meg: • Az állapottároló bázis mezőben tárolt érték nem egy 32 kByte-hoz

illesztett cím. • A CR4 regiszter egyik fenntartott bitjének értéke 1. • A CR0 valamelyik bitkombinációja illegális, pontosabban (PG=1 és

PE=0) vagy (NW=1 és CD=0). Lekapcsolt állapotban a processzor egy NMI megszakítás megjelenéséig vagy a reszetelésig megszakítja az utasítások végrehajtását. Hogy a lekapcsolt állapotba való belépését jelezze, a processzor egy speciális buszciklust generál. Ha az SMM kezelő a rendszernek olyan állapotát változtatta meg, amelyet az RSM nem állít vissza (ilyenek például a lebegőpontos regiszterek), akkor azt az állapotot még az RSM végrehajtása előtt vissza kell állítsa.

278

Page 277: Otodik Generacios Processzorok_pentium

8086-os virtuális üzemmód

3.11. 8086-os virtuális üzemmód A Pentium processzor támogatja egy vagy több 8086 vagy 8088 program védett módú környezetben való végrehajtását. Ebben a környezetben egy 8086 program egy 8086-os virtuális taszk részeként fut. A 8086-os virtuális üzemmód kihasználja a védett mód által a multitaszking számára nyújtott támogatást. A 8086-os programokat futtató 8086-os virtuális taszkokból nemcsak hogy több is lehet, hanem ezek a Pentium processzor más taszkjaival is multitaszkolhatók. A 8086-os virtuális taszkok célja az, hogy a 8086 proceszszorra írt program számára egy "virtuális gép"-et emuláljanak. Egy teljes virtuális gép hardware-ből és rendszersoftware-ből áll. A 8086 processzor emulációját a software által felhasznált hardware valósítja meg, a következőképpen: • A hardware egy virtuális regiszterkészletet (a TSS-en keresztül),

virtuális memóriát (a taszk lineáris címtartományának első MByte-ját), és a megszakítások virtuális támogatását biztosítja, ezenkívül közvetlenül végrehajt minden olyan utasítást, mely az előbbiekben említett regisztereket és címtartományt használja.

• A software a virtuális gép külső interfészét (I/O, megszakítások és

kivételek) a tágabb környezettel (amelyben maga is fut) konzisztens módon vezérli. A software választhat azon lehetőségek között, hogy a I/O-t, a megszakításokat és a kivételkezelést maga emulálja, vagy ezeknek a software közbelépése nélküli végrehajtását a hardware-re bízza.

A 8086-os virtuális gépeket támogató software neve 8086-os virtuális felügyelőprogram. A Pentium processzor saját 8086-os virtuális működési módjának olyan kiterjesztéseit tartalmazza, melyek az alkalmazások teljesítményét azáltal növelik meg, hogy kiküszöbölik az egyes műveletek emulálása miatt keletkező, a felügyelőprogramnak jelentett hibákat. A virtuális mód kiterjesztéséről a Pentium processzoron több információ a függelékben található.

279

Page 278: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

3.11.1. 8086 CPU kód végrehajtása A processzor akkor müködik 8086-os virtuális üzemmódban, ha az EFLAGS regiszter VM (virtual machine) bitje 1-re van állítva. E flaget a processzor két alkalommal teszteli: 1. Egy szegmensregiszter feltöltésekor annak kiderítése érdekében, hogy

szükség van-e a 8086 stílusú címátalakításra vagy sem. 2. Egy utasítás dekódolásakor, annak meghatározása érdekében, hogy

mely utasítások érzékenyek az IOPL-re és hogy mely utasításokat nem támogat (a valós üzemmódhoz hasonlóan).

3.11.1.1. Regiszterek és utasítások A 8086-os virtuális üzemmódban rendelkezésre álló regiszterkészlet magába foglalja a 8086 processzor összes regiszterét, valamint a 8086 processzor után bevezetett új regisztereket (FS és GS). Olyan utasítások állnak rendelkezésre, melyek közvetlenül a szegmensregiszterekkel dolgoznak. Az 10FFEFH feletti lineáris címek a V86 felügyelőprogram, az operációs rendszer, valamint a többi rendszersoftware rendelkezésére állnak. A felügyelőprogramnak is szüksége lehet adatszegmens-deszkriptorokra, mivel elemeznie kell a 8086 programnak a címtartomány első MByte-jában található megszakításvektor-táblázatát és más részeit. A 8086 operációs rendszer implementálására általában két választási lehetőség van: 1. A 8086 operációs rendszer a 8086 program részeként fut. Ez a

megközelítés a következő esetekben előnyös:

• A 8086 alkalmazás kódja megváltoztatja az operációs rendszert. • Nincs elég idő a a 8086 operációs rendszernek egy Pentium CPU

operációs rendszerként történő újraimplementálására.

280

Page 279: Otodik Generacios Processzorok_pentium

8086-os virtuális üzemmód

2. A 8086 operációs rendszer a V86 felügyelőprogramban van

implementálva vagy emulálva. Ez a megközelítés a következő esetekben előnyös:

• Az operációs rendszer funkciói több 8086-os virtuális taszk között

könnyebben koordinálhatók. • A 8086 operációs rendszer funkciói Pentium CPU rendszerhívásokkal

könnyen emulálhatók. Megjegyzendő, hogy a 8086 processzor operációs rendszerének implementálására választott módnak különböző 8086 operációs rendszerek felhasználása esetén különböző 8086-os virtuális taszkjai lesznek. 3.11.2.1. Lapozás a 8086-os virtuális taszkok esetében Egyetlen 8086-os virtuális taszknak sincs szüksége lapozásra, a lapozás azonban hasznos vagy szükséges lehet a következő esetekben: • Több 8086-os virtuális taszk képzése. Minden egyes taszk a lineáris

címek alsó MByte-ját más és más fizikai címtartományra kell leképezze.

• Az 1 MByte-nál jelentkező címcsonkítás emulálása. A 8086 család

tagjai 1 MByte-nál nagyobb címet is megadhatnak. Például egy 0FFFFH értékű szelektor és egy 0FFFFH értékű ofszet által meghatározott tényleges cím értéke 10FFEFH (1 MByte plusz 65519 Byte). A 8086 processzor, mivel csak 20 bites címeket tud képezni, levágja a legmagasabb bitet, tehát 0FFFEH-ra csonkítja ezt a címet. A Pentium processzor az ilyen címeket nem csonkítja. Ha a 8086 programok valamelyike függ a címcsonkítástól, egy 8086-os virtuális taszkban ugyanez a hatás érhető el az 100000H és 110000H illetve a 0 és 100000H közti lineáris címeknek ugyanarra a fizikai címre történő leképezésével.

281

Page 280: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

• A fizikai címtartománynál nagyobb lineáris címtartomány képzése. • Multitaszkingban futó több 8086 program számára közös 8086

operációs rendszer vagy ROM kód megosztása. • Csapda állítás a memóriába leképezett I/O eszközöknek, illetve ezek

átirányítása. 3.11.2.2. Védelem egy 8086-os virtuális taszkon belül Egy 8086 program szegmensei közt nem kötelező a védelem. A 8086-os virtuális taszkban futó rendszersoftware-nek a 8086 alkalmazói programmal szemben való védelmére a software-tervezők a következőket kell figyelembe vegyék: • Minden egyes taszk lineáris címtartományának első MByte-ját (plusz

64 kByte-ot) a 8086 processzorra írt program számára kell lefoglalni. Egy 8086 processzortaszk nem generálhat e tartományon kívül eső címeket.

• A virtuális gép felügyelőprogramjának és a minden egyes 8086-os

virtuális taszk címtartományában levő rendszersoftware védelmére az U/S bitet kell használni. Ha a processzor 8086-os virtuális üzemmódban van, akkor a CPL értéke 3 (legkevésbé privilegizált); ezért egy 8086 processzorra írt programnak csak felhasználói privilégiumai vannak. Ha a virtuális gép felügyelőprogramja lapjainak felügyelői privilégiumai vannak, akkor ezekhez a 8086 program nem férhet hozzá.

3.11.3. Belépés a 8086-os virtuális üzemmódba és az abból való kilépés A 3.83. ábra összefoglalja egy 8086 programba való belépés és az abból való kilépés módozatait. A 8086-os virtuális üzemmódba való belépés a VM flag 1-re állítása által történik. Ez kétféleképpen valósítható meg:

282

Page 281: Otodik Generacios Processzorok_pentium

8086-os virtuális üzemmód

1. Egy taszkra való átkapcsolás az új TSS-ből betölti az EFLAGS

regiszter képét. Az új taszk TSS-e nem 16, hanem 32 bites kell legyen, mivel a 16 bites TSS nem tölti fel az EFLAGS felső, a VM flaget tartalmazó szavát. Az EFLAGS regiszter új tartalmában 1-re állított VM flag azt jelenti, hogy az új taszk 8086 utasításokat hajt végre, ezért a szegmensregiszterek TSS-ből való feltöltésekor a processzor 8086 stílusban alakítja ki a báziscímet.

2. Egy taszk procedúrájában található IRET utasítás feltölti az EFLAGS

regisztert a veremből. Az 1-re állított VM flag azt jelenti, hogy a procedúra, amelyre a vezérlés visszaadódik, egy 8086 procedúra. Az IRET utasítás végrehajtásakor a CPL értéke 0 kell legyen, ellenkező esetben a processzor nem változtatja meg a VM állapotát.

Belépés azinicializálásba

Taszkváltásvagy IRET

8086 program(V86 mód)

Megszakítás, kivétel

IRET

Taszkváltás

TaszkváltásEgyéb CPU taszk (védett mód)

V86 monitor(védett mód)

Taszkváltás

Taszkváltás

3.83. ábra: Belépés a 8086-os virtuális üzemmódba és az abból való

kilépés A 8086-os virtuális üzemmódba taszkátkapcsolással való belépés esetén a szegmensregiszterek a TSS-ből töltődnek fel, a VM flag beállítására egy IRET utasítást használva fel, a szegmensregiszterek a PL0 verem szegmensregisztereiből töltődnek fel (lásd a 3.84. ábrát).

283

Page 282: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

Megszakítás vagy kivétel fellépte esetén a processzor kilép a 8086-os virtuális üzemmódból. Ilyenkor két eset lehetséges: 1. A megszakítás vagy kivétel egy taszkátkapcsolást okoz. Egy 8086-os

virtuális taszkról bármilyen más taszkra való átkapcsolás esetén az EFLAGS regiszter feltöltődik az új taszk TSS-éből. Ha az új TSS 32 bites és az EFLAGS új tartalmának VM flagje törölve van, vagy ha az új TSS 16 bites, akkor a processzor törli az EFLAGS regiszter VM flagjét, a védett módú címalakot felhasználva az új TSS-ből feltölti a szegmensregisztereket, és védett módban megkezdi az új taszk utasításának végrehajtását.

2. A megszakítás vagy kivétel egy 0. privilégiumszintű

(legprivilegizáltabb) procedúrát hív meg. A processzor tárolja az EFLAGS regiszter aktuális tartalmát, majd törli a VM flaget. A megszakítás- vagy kivételkezelő emiatt "natív" 32 bites védett-módú kódként fut. Ha a megszakítás vagy kivétel egy hasonló szegmensben vagy 0-tól különböző privilégiumszintű szegmensben levő procedúrát hív meg, akkor a processzor általános védelmi hibát generál, a hibakód annak a kódszegmensnek a szelektora, melyre a hívás vonatkozott.

Nem használt

Régi GS

Régi FS

Régi DS

Régi ES

Régi SS

Régi ESP

Régi EFLAG

Régi CS

Régi EIP Új ESP

ESP a TSS-ből Nem használt

Régi GS

Régi FS

Régi DS

Régi ES

Régi SS

Régi ESP

Régi EFLAG

Régi CS

Régi EIP

Új ESP

ESP a TSS-ből

Hibakód

HibakóddalHibakód nélkül

284

Page 283: Otodik Generacios Processzorok_pentium

8086-os virtuális üzemmód

3.84. ábra: A 0. privilégiumszintű verem állapota 8086-os virtuális módban, a megszakítást követően

A rendszersoftware- nem változtatja meg közvetlenül a VM flag állapotát, ehelyett megváltoztatja a vermen vagy a TSS-ben tárolt EFLAGS képének egyes bitjeinek állapotát. Amikor az első 8086-os virtuális taszkot felépíti, a 8086-os virtuális felügyelőprogram az EFLAGS-nek a vermen vagy a TSS-ben levő képének VM bitjét 1-re állítja. A megszakítás- és kivételkezelők elemezhetik a vermen levő VM flag állapotát. Ha a megszakított procedúra 8086-os virtuális módban futott, akkor a kezelőnek esetleg szüksége lehet a 8086-os virtuális felügyelőprogram maghívására. 3.11.3.1. Taszkátkapcsolások általi tranzíciók Egy 8086-os virtuális taszkba illetve abból való átkapcsolásnak az oka a következő három közül az egyik: 1. Egy taszkkaput meghívó megszakítás. 2. A 32 bites operációs rendszer ütemezőjének egy akciója. 3. IRET utasítás végrehajtása 1-re állított NT flag esetén. Az előbbi esetek bármelyikében a processzor az új TSS-ben levő képnek megfelelően megváltoztatja az EFLAGS regiszter VM flagjének állapotát. Ha az új TSS 16 bites, akkor az EFLAGS regiszter felső szava nincs a TSS-ben, ebben az esetben a processzor törli a VM flaget. A processzor a VM flaget még azelőtt módosítja, hogy a szegmensregisztereket az új TSS-ből feltöltené. A VM flag új beállítása meghatározza azt, hogy a processzor az új szegmensregiszter-képeket 8086, 80286 vagy 32 bites szelektorokként értelmezi. 3.11.3.2. Átmenet trap- és megszakításkapukon keresztül A trap- és megszakításkapukat meghívó kivételek és megszakítások nyomán a processzor kiléphet a 8086-os virtuális

285

Page 284: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

üzemmódból. A kivétel vagy megszakítás egy IRET utasítás végrehajtásával tér vissza a 8086 programba. A kivételek és megszakítások háromféleképpen kezelhetők: 1. A 8086-os virtuális felügyelőprogram által. 2. A 8086-os virtuális felügyelőprogram átadhatja a vezérlést a 8086

program saját megszakításkezelőjére. 3. Egy védett módú megszakításkiszolgáló rutin által. Ha a megszakítást vagy kivételt a felügyelőprogram kell kezelje és ha az EFLAGS vermen tárolt képében a VM flag 1-re van állítva, akkor a megszakításkezelő átadja a vezérlést a felügyelőprogramnak. A felügyelőprogram az első két módszer egyikét használja. Ha nincs szükség arra, hogy a megszakítást vagy kivételt a felügyelőprogram kezelje, akkor a 3-ra állítható IOPL lehetővé teszi, hogy minden virtuális módú megszakítást a védett módú megszakításrutin kezeljen. Mivel egy 8086 program a 8086 processzoron való futtatásra volt tervezve, ezért ennek egy 8086-os virtuális taszkban 8086 stílusú megszakításvektor-táblázata van, mely a 0 lineáris címen kezdődik. Ezért a felügyelőprogram közbelépését és a védett módba való átkapcsolást igénylő kivételek és megszakítások esetén a processzor ezt a táblázatot nem használja közvetlenül, ehelyett a kezelőket az IDT-n keresztül hívja meg. 8086-os virtuális módban egy megszakítás vagy kivétel számára az IDT bejegyzése vagy-vagy alapon a következőket kell tartalmazza: • Egy taszkkaput. • Egy 32 bites trapkaput (14-es deszkriptortípus) vagy egy 32 bites

megszakításkaput (15-es deszkriptortípus), mely egy nem megegyező, 0. privilégiumszintű (legprivilegizáltabb) kódszegmensre kell mutasson.

A 32 bites trap- vagy megszakításkapukat használó megszakítások és kivételek a 0. privilégiumszintet használják. A szegmensregiszterek

286

Page 285: Otodik Generacios Processzorok_pentium

8086-os virtuális üzemmód

tartalma e privilégiumszint vermén lesznek tárolva. Egy 8086 programot futtató 8086-os virtuális taszk esetén a futás során bekövetkező kivétel vagy megszakítás után a verem állapotát a 3.84. ábra szemlélteti. Miután a processzor a 8086-os szegmensregisztereket elmenti a 0. privilégiumszint vermére, a kezelő procedúra futtatása előtt törli a szegmensregisztereket. Ez lehetővé teszi a megszakításkezelő számára, hogy az biztonságosan elmentse és visszaállítsa a DS, ES, FS és GS regiszterek tartalmát úgy, mintha azok a Pentium CPU szelektorai lennének. A rendes taszkok vagy 8086-os virtuális taszkok által meghívott megszakításkezelők a regiszterek elmentésére és visszaállítására bármely taszk esetén ugyanazt a kódrészt használhatják. E regisztereknek az IRET utasítás végrehajtása előtti törlése nem okoz trap-et a kivételkezelőben. A szegmensregiszterekben értékeket váró vagy visszaadni akaró megszakítás-kezelők a regisztereknek a 0. privilégiumszint vermére mentett képét kell használniuk. Az olyan megszakításkezelők, melyeknek tudniuk kell, hogy a megszakítás 8086-os virtuális módban lépett fel vagy sem, megvizsgálhatják az EFLAGS regiszter eltárolt tartalmának VM flagjét. Egy megszakítás vagy kivétel visszaküldése a 8086 programnak a következő lépésekből áll: 1. A 8086 megszakításvektor felhasználása a megfelelő kezelő

procedúra helyének megállapítására. 2. A 8086 program FLAGS, CS és IP értékeinek tárolása a 3.

(legkevésbé privilegizált) privilégiumszint vermén. 3. A visszatérési kapcsolat lecserélése a 0. privilégiumszint vermén úgy,

hogy az a 3. privilégiumszinten levő kezelő procedúrára mutasson. 4. A vezérlésnek a kezelőre való átadása, egy IRET utasítás

végrehajtásával. 5. Amikor a 3. privilégiumszinten levő kezelő IRET utasítása újból

meghívja a 8086-os virtuális felügyelőprogramot, a visszatérési kapcsolat visszaállítása a 0. privilégiumszint vermén úgy, hogy az az

287

Page 286: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

288

eredeti, megszakított, 3. privilégiumszinten levő procedúrára mutasson.

6. A vezérlésnek a megszakított procedúrának való visszaadása, egy

IRET utasítás végrehajtásával. Ha az IOPL 3-ra van állítva és a megszakításkapu DPL-je szintén 3-ra, akkor az INT n utasítások a megadott vektorszámmal egy trap által megszakadnak. Az olyan megszakításvektorok, melyeknek IDT kapuja 3-ra van állítva, megvizsgálhatják az EFLAGS veremre mentett képének a VM bitjét annak megállapítása céljából, hogy a megszakítást vissza kell-e téríteni a felügyelőprogramhoz vagy át kell adni a 8086 program megszakításkezelőjének. 3.11.4. Érzékeny utasítások Amikor a Pentium processzor 8086-os virtuális üzemmódban működik, a CLI, STI, PUSHF, POPF, INT n, és IRET utasítások érzékenyek az IOPL-re. Az IOPL-re védett üzemmódban érzékeny IN, INS, OUT és OUTS utasítások a 8086-os virtuális üzemmódban nem érzékenyek. A 8086-os virtuális módban érzékeny utasítások teljes felsorolása a következő: CLI - Megszakítást engedélyező bit törlése STI - Megszakítást engedélyező bit 1-re állítása PUSHF - Flagek veremre helyezése POPF - Flagek leemelése a veremről INT n - Software-megszakítás IRET - Visszatérés megszakításból 8086-os virtuális módban való futás alatt a CPL értéke mindig 3. Ha az IOPL értéke kisebb mint 3, a fenti utasítások végrehajtására tett próbálkozás általános védelmi hibát okoz. Ezen utasítások az IOPL-re azért érzékenyek, hogy lehetőséget adhassanak a 8086-os virtuális felügyelőprogramnak arra, hogy az a hatásukat emulálhassa. Ezen utasítások működését akkor, amikor a virtuális mód kiterjesztése működésben van, a függelék tárgyalja.

Page 287: Otodik Generacios Processzorok_pentium

8086-os virtuális üzemmód

289

3.11.5. Virtuális megszakítások támogatása Számos, nem multitaszking rendszerekre írt 8086 program a megszakítások vezérlése érdekében az IF flaget állítja. Multitaszking környezetben ez problémák forrása lehet. Emiatt a 386 és 486 processzorokon futó felügyelőprogramok a software-ből egy virtuális megszakításflaget állítnak. Az IF flaget állító minden utasítás a felügyelőprogramra adja át a vezérlést, az ezeken a processzorokon való emuláció céljából. A Pentium processzornak a virtuális megszakításflag-támogatásáról több információ a függelékben található. 3.11.6. A 8086 operációs rendszerhívások emulációja Számos 8086 operációs rendszerhívás a paramétereknek a veremre való helyezése, majd egy INT n utasítás végrehajtása által történik. Az INT n utasítás érzékeny az IOPL-re amiatt, hogy lehetővé tegye az, hogy a 8086-os virtuális felügyelőprogram emulálni tudja a 8086 operációs rendszer funkcióit, vagy a megszakítást visszaküldhesse a 8086 operációs rendszerhez. Ha az IOPL<3, az INT n utasításokat a felügyelőprogram fogja el. Ha IOPL=3, akkor a megszakításokat a védett módú megszakításkezelő rutin szolgálja ki, a 486 processzorral kompatibilis módon. A 386 és 486 processzorokon a 8086-os virtuális üzemmódban végrehajtott minden INT n utasítást a felügyelőprogram kell elfogjon, amikor az IOPL<3. A Pentium proceszszornak a megszakításkezelést támogató virtuális módú kiterjesztéséről információk a függelékben találhatók. A 3.85. ábra meghatározza, hogy a 8086-os virtuális módban az IOPL értékére alapozva a processzor milyen műveleteket fog végezni.

Page 288: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

290

IOPL Processzor művelet

=3 Megszakítása a V86 módból a védett módba Törli a VM és a TF flaget Ha a szolgáltatás megszakítás kapun keresztül történik,

törli az IF flaget PL0 értékei lecserélődnek a TSS értékeire Elmenti a GS, FS, DS és ES regisztereket a PL0 veremre Nullára állítja a GS, FS, DS és ES regisztereket Elmenti megszakított taszk SS, EIP, EFLAG, CS és EIP

regisztereit a PL0 veremre Beállítja CS és EIP értékeit a megszakíitás kapu alapján

<3 Általános védelmi kivétel

3. 85. ábra: A software-megszakítás műveletei 3.11.7. Virtuális I/O Számos, nem multitaszking rendszerekre írt 8086 program az I/O portokhoz közvetlen módon fér hozzá. Multitaszking környezetben ez problémák forrása lehet. Ha ugyanahhoz a porthoz több mint egy program fér hozzá, ezek megzavarhatják egymást. Legtöbb multitaszking rendszer megköveteli azt, hogy az alkalmazói programok a portokat az operációs rendszeren keresztül érjék el. Ez egyszerűbb, központosított vezérlést eredményez. Az I/O védelmet a processzor olyan I/O-k létrehozásával valósítja meg, melyek kompatibilisek a környezettel és átlátszóak a 8086 programok számára. Az I/O portok védelmét a tervezők a következőkben felsorolt, különböző szempontok figyelembevételével valósíthatják meg: • Az I/O közvetlen végrehajtására tett minden egyes kísérlet esetén meg

kell védeni az I/O címtartományt és kivételeket kell generálni. • A 8086 programot hagyni kell, hogy az I/O-t közvetlenül végezze el.

Page 289: Otodik Generacios Processzorok_pentium

8086-os virtuális üzemmód

291

• Bizonyos I/O portok elérésére tett kísérletek esetén kivételeket kell generálni.

• Bizonyos, a memóriába leképezett I/O portok elérésére tett kísérletek

esetén kivételeket kell generálni. Az I/O portokhoz való hozzáférést vezérlő módszer attól függ, hogy a hozzáférések I/O-ra vagy a memóriába vannak leképezve. 3.11.7.1. I/O-ra leképezett I/O A bizonyos I/O címek elérésére tett kísérletek esetén kivételek generálására az I/O engedélyező bittérkép használható. Minden egyes 8086-os virtuális taszk I/O engedélyező bittérképe meghatározza, hogy az adott taszk esetében mely I/O címek generálnak kivételeket. Mivel minden taszknak más és más I/O engedélyező bittérképe lehet, különböző taszkok esetében a kivételeket generáló I/O címek különbözhetnek. A védett módtól ez abban különbözik, hogy az IOPL-t senki nem vizsgálja meg. 3.11.7.2. Memóriába leképezett I/O A memóriába leképezett I/O-t használó rendszerekben a processzor lapozási lehetőségei felhasználhatók az I/O portokhoz való hozzáférési kísérletek esetén kivételek generálására. A 8086-os virtuális felügyelőprogram a memóriába leképezett I/O vezérlésére a lapozást a következőképpen használhatja: • Az I/O műveletek végrehajtását igénylő taszkok lineáris

címtartományának egy részét az I/O portok által használt fizikai címtartományra képezi le. Az I/O portokat (különböző lapokon) különböző címekre téve, a lapozó mechanizmus megvalósíthatja a taszkok egymástól való elszigetelését.

• A lineáris címtartomány egy részét olyan lapokra képezi le, melyek

nincsenek jelen. Így ahányszor a taszk megkísérli egy I/O művelet

Page 290: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

292

végrehajtását ezeken a lapokon, egy kivétel generálódik. A rendszersoftware- ezután majd értelmezheti a megpróbált I/O műveletet.

Az I/O tartomány software-emulációja bizonyos körülmények közt az operációs rendszer részéről túl sok közbelépést igényel. Ilyenkor lehetséges az, hogy csak az első I/O hozzáférés megkísérlése okozzon kivételt. A rendszersoftware- ezután eldöntheti, hogy az I/O vezérlésének kizárólagos joga igeiglenesen átadható-e egy programnak vagy sem. Ha igen, akkor az I/O védelmét megszünteti és a program számára lehetővé teszi, hogy az teljes sebességgel fusson. 3.11.7.3. Különleges I/O pufferek Az intelligens kontrollerek pufferei (például egy bittérképes keretpuffer) a lapok leképezésével szintén emulálhatók. A puffer lineáris tartománya minden egyes 8086-os virtuális taszk esetében más és más fizikai tartományra képezhető le. A 8086-os virtuális felügyelőprogram azt vezérli, hogy melyik virtuális puffert kell a fizikai címtartományban levő valós pufferbe másolni. 3.11.8. Különbségek a 8086 CPU-hoz képest 8086-os virtuális üzemmódban általában a 8086 és 8088 processzorokra írt programok futnak. A következő felsorolás bemutatja a 8086 processzor és a Pentium processzor valamint más 32 bites processzorok 8086-os virtuális üzemmódja közti kisebb eltéréseket. 1. Az utasítások végrehajtásához szükséges órajelek száma. A 32 bites

processzorokon legtöbb utasítás kevesebb órajel alatt hajtódik végre, mint a 8086 processzoron. A leginkább befolyásolt területek a következők:

• Az I/O műveletek alkalmával az I/O eszközök által igényelt

késleltetések.

Page 291: Otodik Generacios Processzorok_pentium

8086-os virtuális üzemmód

293

• A 8087 koprocesszorral párhuzamosan működő 8086 processzor esetében feltételezett késleltetések.

2. Az osztáskivételek a DIV utasításra mutatnak. A Pentium processzor

esetében az osztáskivételek mindig a hibát okozó utasításra mutató CS:IP értéket mentik el. A 8086 processzornál a CS:IP a következő utasításra mutat.

3. Meghatározatlan 8086 processzor-opkódok. A 8086 processzor

esetében nem definiált opkódok a Pentium processzoron vagy érvénytelen-opkód kivételt generálnak, vagy a Pentium számára definiált új utasításként hajtódnak végre.

4. A PUSH SP által a veremre helyezett érték. A PUSH SP utasítás

végrehajtásakor a Pentium processzor más adatot helyez a veremre, mint a 8086. A Pentium processzor az SP-nek a csökkentés előtti értékét helyezi a veremre, míg a 8086 a csökkentés utáni értékét. Ha a veremre helyezett adatra szükség van, akkor a PUSH SP utasítást a következő három utasítással kell helyettesíteni:

PUSH BP MOV BP, SP XCHG BP, [BP]

Ez a kód a Pentiumon úgy működik, mint a PUSH SP a 8086 processzoron.

5. Léptetés vagy forgatás több mint 31 bittel. A Pentium processzor a

léptetés és forgatás számlálóinak csak az alsó 5 bitjét veszi figyelembe. Ez a számláló értékét legtöbb 31-re korlátozza.

6. Redundáns prefixek. A Pentium processzor az utasítások hosszát 15

Byte-ra korlátozza. E határ megsértésére az egyetlen lehetőség az utasítás előtti redundáns prefixek használata. Az utasításhossz-határ megsértése esetén általános védelmi kivétel generálódik. A 8086 processzor nem korlátozza az utasítások hosszát.

Page 292: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

294

7. A 0 vagy 65535 értékű ofszetet átlépő operandus. A 8086 processzoron egy, a 65535 ofszetet (például a 65535 ofszetre egy szót másoló MOV) vagy 0 ofszetet (például egy szó kiemelése a veremból egy PUSH által, amikor az SP regiszter értéke 1) átlépő operandushoz való hozzáférés esetén az ofszet modulo 65535 alapon megcsonkul. A Pentium processzor ebben az esetben egy kivételt generál, általános védelmi kivételt, ha a szegmens egy adatszegmens (azaz a szegmenset a CS, DS, ES, FS, vagy GS regiszterek címzik), vagy veremkivételt, ha a szegmens egy veremszegmens (melyet az SS regiszter címez).

8. A 65535 ofszetet átlépő sorozatos végrehajtás. A 8086 processzor

esetében, ha az utasítások sorozatos végre hajtása a 65535 ofszet átlépése után is folytatódik, akkor a processzor a következő utasítást ugyanazon szegmens 0 ofszetjéről tölti be. A Pentium processzor ebben az esetben általános védelmi kivételt generál.

9. A LOCK használata csak bizonyos utasításokra van korlátozva. A

LOCK prefix és az általa vezérelt jel kizárólag annak megelőzésére használható, hogy más buszvezérlők az adatátviteli műveletet megszakítsák. A LOCK prefix csak a memóriát módosító, következő Pentium utasításokkal használható. A LOCK bármilyen más utasítással (vagy az alábbiakban felsoroltakkal abban az esetben, ha azok nem a memóriát módosítják) való használata érvénytelen-opkód kivételt eredményez.

• Bitteszt és -változtatás: a BTS, BTR és BTC utasítások. • Csere: az XCHG, XADD, CMPXCHG és CMPXCHG8B

utasítások (az XCHG esetében nincs szükség a LOCK prefixre). • Egyoperandusú aritmetikai és logikai: INC, DEC, NOT és NEG

utasítások. • Kétoperandusú aritmetikai és logikai: ADD, ADC, SUB, SBB,

AND, OR és XOR utasítások.

10. Lépésenkénti végrehajtás külső megszakításkezelők. A Pentium processzor lépésenkénti végrehajtás kivételeinek prioritása

Page 293: Otodik Generacios Processzorok_pentium

8086-os virtuális üzemmód

295

különbözik a 8086 processzorétól. Ez a változtatás megelőzi hogy a külső megszakításkezelő is léptetve legyen akkor, amikor a program megszakított. A Pentium processzor lépésenkénti végrehajtás kivételének minden más külső megszakításnál nagyobb prioritása van. Az NT utasítás vagy egy kivétel által meghívott megszakításkezelőt a Pentium azonban még mindig lépésenként hajt végre.

11. IDIV kivételek a 80H és 8000H hányadosok esetében. Az IDIV

utasítás hányadosaként a Pentium képes a legkisebb negatív szám generálására. A 8086 processzor ehelyett azonban osztáshiba kivételt generál.

12. Flagek a veremben. Az EFLAGS regiszter PUSH utasítás,

megszakítások, vagy kivételek által tárolt tartalma a 8086 processzoron tárolttól a 12.-től 15.-ig terjedő bitekben különbözik. A 8086 processzoron ezek a bitek úgy tárolódnak, mintha 1-re lettek volna állítva, a Pentiumon azonban 8086-os virtuális módban a 15. bit értéke mindig 0 és a 12.-től 14.-ig terjedő bitekben mindig az utoljára beléjük töltött érték van.

13. Az NMI kezelőt megszakító NMI. Miután a Pentium processzor egy

NMI kivételt elfogad, a következő IRET utasítás végrehajtásáig maszkolja az NMI megszakítást.

14. A lebegőpontos-hiba kivételt hívó lebegőpontos hibák. A

lebegőpontos-hiba kivételek a Pentium processzoron meghívják a lebegőpontos-hiba kivétel kezelőjét. Ha a 8086 processzor a 8087 megszakítás számára más kivételt használ, akkor mindkét kivételvektor a lebegőpontos-hiba kivétel kezelőjére kell mutasson. A Pentium processzornak olyan jelei vannak, melyek külső logika hozzáadásával támogatják a számos személyi számítógépen használt megszakítás-kezelő mechanizmus emulációjának a felhasználó által definiált hibajelentéseit.

15. A numerikus kivételek meg kell engedjék a prefixek használatát. A

Pentium processzoron a lebegőpontos kivételek számára lementett CS és IP regiszterek az ESC utasítás előtt esetleg jelenlevő prefixekre

Page 294: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

296

mutatnak. A 8086 processzoron az elmentett CS:IP az ESC utasításra mutat.

16. A Lebegőpontos Egység (FPU) nem használja a megszakítás-

kontrollert. A Pentium processzornak küldött lebegőpontos hibajel nem halad át a megszakításkontrolleren (A 8087 koprocesszor INT jele viszont áthalad). A koprocesszor-hiba kivétel kezelőjéből egyes utasításokat törölni kell, amennyiben azok a megszakításkezelőt használják. A Pentium processzornak olyan jelei vannak, melyek külső logika hozzáadásával támogatják a számos személyi számítógépen használt megszakításkezelő mechanizmus emulációjának a felhasználó által definiált hibajelentéseit.

17. A busz tartására adott válasz. A 8086 és Intel286 processzoroktól

eltérően a Pentium processzor válaszol a buszvezérlés átvevésére irányuló, más lehetséges buszvezérlőktől (például DMA kontrollertől) érkező kérésekre egy olyan nem illeszkedő operandus részeinek átvitele esetén, mint például egy dupla szót képező két szó.

18. A 8086-os virtuális üzemmódban a CPL értéke 3. A 8086 processzor

nem támogatja a védelmet, így CPL-je sincs. A 8086-os virtuális mód egy 3 értékű CPL-t használ, mely megakadályozza a privilegizált utasítások végrehajtását. Ezek a következők:

• LIDT utasítás • LGDT utasítás • LMSW utasítás • A MOV utasításnak a vezérlőregiszterek feltöltésére és

elmentésére szolgáló speciális alakjai. • CLTS utasítás • HLT utasítás • INVD utasítás • WBINVD utasítás • INVLPG utasítás • RDMSR utasítás • WRMSR utasítás • RSM utasítás

Page 295: Otodik Generacios Processzorok_pentium

8086-os virtuális üzemmód

297

A fenti utasítások a processzornak az inicializálását követő valós üzemmódjában hajthatók végre. Lehetővé teszik a rendszer-adatstruktúrák (például a deszkriptortáblázatok) inicializálását a védett módba való belépés előtt. Mivel a 8086-os virtuális üzemmódba csak védett módból lehet belépni, ezek a struktúrák a belépéskor már inicializálva vannak.

19. A denormált kivétel kezelése különbözik. A kivételkezelés

különbségeinek részletei a 23. fejezetben találhatók. 3.11.9. Különbségek a 286 CPU-hoz képest A 8086-os virtuális üzemmód és az Intel286 valós üzemmódja közti különbségek az alkalmazások és az operációs rendszer közti interfészre vannak hatással. Az alkalmazás a 3. privilégiumszinten (felhszanálói módban) fut, így a védett privilégiumú utasítások és architekturális lehetőségek használatára tett minden kísérlet a 8086-os virtuális felügyelőprogramot fogja meghívni. A felügyelőprogram elemzi ezeket a hívásokat és emulálja őket. 3.11.9.1. Privilégiumszint A 8086-os virtuális módban futó programok privilégiumszintje 3 (felhasználói mód), mely megakadályozza a privilegizált utasítások végrehajtását. A privilegizált utasítások a következők:

• LIDT utasítás • LGDT utasítás • LMSW utasítás • A MOV utasításnak a vezérlő- és debugregiszterek feltöltésére és

elmentésére szolgáló speciális alakjai. • CLTS utasítás • HLT utasítás • INVD utasítás • WBINVD utasítás • INVLPG utasítás

Page 296: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

298

• RDMSR utasítás • WRMSR utasítás • RSM utasítás

A 8086-os virtuális módba csak védett módból lehet belépni, így ennek nincs szüksége ezeknek az utasításoknak a végrehajtására. Míg a 8086-os virtuális üzemmódban nem, addig valós üzemmódban ezek az utasítások végrehajthatók. 3.11.9.2. A busz lezárása A 286 processzor a buszlezáró funkciót a 386, 486 és Pentium processzoroktól eltérő módon implementálja. Ez a tény a 8086 programok számára attól függően lehet észrevehető vagy sem, hogy a 8086-os virtuális felügyelőprogram a LOCK prefixet hogyan kezeli. Az LOCK prefix-szel ellátott utasítások érzékenyek az IOPL-re, a software-tervezők tetszés szerint emulálhatják őket. Ezért ha a 8086 programoknak a LOCK közvetlen végrehajtása engedélyezve van, a memória lezárásának a 8086 processzorra jellemző módját használó programok a Pentium és más 32 bites processzorokon lehet, hogy nem fognak megfelelően futni. A LOCK prefix és az általa vezérelt buszjel kizárólag annak megelőzésére használható, hogy más buszvezérlők az adatátviteli műveletet megszakítsák. A LOCK prefix csak a memóriát módosító, következő Pentium utasításokkal használható. A LOCK bármilyen más utasítással (vagy az alábbiakban felsoroltakkal abban az esetben, ha azok nem a memóriát módosítják, például ha a céloperandus egy regiszter) való használata érvénytelen-opkód kivételt eredményez.

• Bitteszt és -változtatás: a BTS, BTR és BTC utasítások. • Csere: az XCHG, XADD, CMPXCHG és CMPXCHG8B

utasítások (az XCHG esetében nincs szükség a LOCK prefixre). • Egyoperandusú aritmetikai és logikai: INC, DEC, NOT és NEG

utasítások.

Page 297: Otodik Generacios Processzorok_pentium

8086-os virtuális üzemmód

299

• Kétoperandusú aritmetikai és logikai: ADD, ADC, SUB, SBB, AND, OR és XOR utasítások.

A lezárt utasítások garantáltan csak a céloperandus által megadott memóriarészt zárják le, egyes esetekben azonban nagyobb részeket is lezárhatnak. A 8086 és 286 processzoroktól eltérően a Pentium processzor válaszol a buszvezérlés átvevésére irányuló, más lehetséges buszvezérlőktől (például DMA kontrollertől) érkező kérésekre egy olyan nem illeszkedő operandus részeinek átvitele esetén, mint például egy dupla szót képező két szó. 3.11.10. Különbségek a 386 és 486 CPU-hoz képest A valós üzemmód az Intel386, Intel486 és Pentium processzorokon ugyanúgy viselkedik. Amikor a virtuális módú kiterjesztés le van tiltva (a CR4 VME bitjének értéke 0), akkor a Pentium processzor 8086-os virtuális üzemmódjának viselkedése a 386 és 486 processzorokével megegyező. A virtuális módú kiterjesztés engedélyezésével (a CR4 VME bitjének értéke 1) a Pentium processzor 8086-os virtuális üzemmódjának teljesítménye jelentős mértékben megnő. E kiterjesztésekkel kapcsolatos információk a függelékben találhatók. A maximális teljesítmény elérése érdekében a Pentium processzorra portált programok engedélyezett cache-el kell fussanak.

Page 298: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

300

Ábra- és példajegyzék 1.1. ábra: A Pentium processzor blokkvázlata .............................. 12 1.2. ábra: Az INTEGER egység .................................................... 13 1.3. ábra: A PIPELINE-ok belső felépítésének blokkvázlata ....... 14 1.4. ábra: Cache-vonal állapotai a MESI protokoll szerint ........... 16 1.5. ábra: Az FPU pipeline-ja........................................................ 19 1.6. ábra: Cache kezelési modellek ............................................... 20 1.7. ábra: DRAM idődiagramok.................................................... 21 1.8. ábra: Az M1- es és a Pentium processzorok pipelinejainak

összehasonlítása ........................................................... 24 1.9. ábra: Az M1-es definiálatlan CACHE-e bármilyen

arányban tartalmazhat adatot és utasítást. Az utasításvonal CACHE pedig az INTEGER egység által leginkább használt utasításokat tárolja................. 27

1.10. ábra: Az M1-es processzor szuperpipeline-okból felépített INTEGER egysége........................................ 29

1.11. ábra: Kiugrás a végrehajtási sorrendből. Az M1-es processzorban az egyik pipeline végrehajtási sorában lévő utasításnak nem kell megvárnia a másik pipeline lassúbb utasítását. Kiugorva a végrehajtási sorból, időt lehet megtakarítani a vérehajtás sor................................................................ 30

1.12. ábra: Nx586 alapú IBM PC kompatibilis számítógép felépítése NxVL vagy NxPCI rendszerinterface chip felhasználásával. A matematikai processzor külön tokban helyezkedik el, míg a másodszintű cache vezérlője a processzorlapkán kapott helyet.................. 32

1.13. ábra: A NexGen szabadalmaztatott RISC86-os architektúrája dinamikusan fordítja az összetett X86-os (CISC) utasításokatRISC86-os utasításokká, így tehát kihasználhatja a RISC utasítások sebességi előnyeit. ........................................................................ 34

3.1. ábra: Szegmentált címzés ....................................................... 64 3.2. ábra: Alkalmazások számára elérhető regiszterkészlet .......... 66 3.3. ábra: Szegmentált memória.................................................... 68 3.4. ábra: A verem működése........................................................ 71 3.5. ábra: Az EFLAGS regiszter ................................................... 72

Page 299: Otodik Generacios Processzorok_pentium

Ábra- és példajegyzék

301

3.6. ábra: Állapotbitek................................................................... 73 3.7. ábra: A vezérlő regiszterek felépítése .................................... 78 3.8. ábra: Nyomkövető regiszterek ............................................... 83 3.9. ábra: Az EDX regiszter tartalma reszetelés után.................... 87 3.10. ábra: A CR0 regiszter tartalma reszetelés után .................... 88 3.11. ábra: A processzor állapota a reszetelést követően.............. 90 3.12. ábra: A processzor állapota a reszetet követően .................. 100 3.13. ábra: Az algoritmus és a forrásszöveg ezzel kapcsolatos

sorainak száma ............................................................. 101 3.14. ábra: A BLD és az ASM forrásállomány közti

összefüggés .................................................................. 104 3-1 példa: STARTUP.ASM .......................................................... 104 3-2 példa: MAIN.ASM ................................................................. 113 3.15. ábra: A TEMP_GDT létrehozása és a védett módba való

átkapcsolás (a forrásszöveg 162-172 sorai) ................. 115 3.16. ábra: A GDT, IDT és TSS ROM-ból RAM-ba másolása

(a forrásszöveg 196-261 sorai)..................................... 115 3.17. ábra: Átkapcsolás a taszkra (a forrásszöveg 282 296

sorai)............................................................................. 116 3-3 példa: Az alkalmazás lefordítására és felépítésére szolgáló

parancsköteg-állomány ................................................ 117 3-4 példa: Build-állomány............................................................. 117 3.18. ábra: Címek lefordítása ........................................................ 120 3.19. ábra: Kivételek és megszakítások ........................................ 123 3.20. ábra: Memória kezelő regiszterek ........................................ 125 3.21. ábra: Sík modell ................................................................... 132 3.22. ábra: Védett sík modell ........................................................ 134 3.23. ábra: Multiszegmens modell ................................................ 135 3.24. ábra: TI BIT - A deszkriptor tábla kiválasztása ................... 137 3.25. ábra: Szegmens fordítás ....................................................... 138 3.26. ábra: Szegmens regiszterek .................................................. 139 3.27. ábra: Szegmens szelektor ..................................................... 140 3.28. ábra: Szegmens deszkriptorok.............................................. 142 3.29. ábra: Alkalmazási szegmens típusok ................................... 145 3.30. ábra: Szegmens deszkriptor (a szegmens nincs jelen) ......... 148 3.31. ábra: Deszkriptor táblázatok ................................................ 149 3.32. ábra: Pszeudó deszkriptor formátum.................................... 150 3.33. ábra: A lineáris cím formátuma............................................ 152

Page 300: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

302

3.34. ábra: Lapfordítás .................................................................. 153 3.35. ábra: A lapcímtár formátuma és a laptáblázatok elemei a

4K-s lapokhoz. ............................................................. 154 3.36. ábra: Laptáblázat bejegyzés formátuma nem jelenlévő

lapoknál ........................................................................ 155 3.37. ábra: Kombinált szegmens- és lapcím fordítás .................... 160 3.38. ábra: minden egyes szegmensnek biztosítani kell saját

laptáblázatot ................................................................. 161 3.40. ábra: Rendszer szegmens- és kapu típusok .......................... 164 3.39. ábra: Védett módban használt deszkriptor mezők ............... 166 3.41. ábra: Védelmi gyűrűk........................................................... 171 3.42. ábra: Privilégium ellenőrzés adathozzáféréseknél ............... 172 3.43. ábra: Privilégium ellenőrzés taszkkapu nélküli

vezérlésátadásoknál...................................................... 175 3.44. ábra: Call kapu ..................................................................... 177 3.45. ábra: A call kapu mechanizmusa.......................................... 178 3.46. ábra: Privilégium ellenörzés call kapuval történő

vezérlésátadásnál.......................................................... 180 3.47. ábra: Kezdeti stack pointerek egy TSS-ben ......................... 182 3.48. ábra: Stack keret szintek közötti hívás alatt ......................... 184 3.49. ábra: Szintek közötti visszatérés ellenőrzés ......................... 187 3.50. ábra: Érvényes deszzkriptor típusok LSL műveletekhez ..... 191 3.51. ábra: Egy laptáblázat bejegyzés védelmi mezői................... 195 3.52. ábra: Kombinált lapcímtár és laptáblázat védelem .............. 198 3.53. ábra: 32 bites taszk állapot szegmens................................... 203 3.54. ábra: TSS Deszkriptor .......................................................... 204 3.55. ábra: Taszk regiszter ............................................................ 207 3.56. ábra: Taszk kapudeszkriptor ................................................ 208 3.57. ábra: Taszkokra jellemző taszk kapuk ................................. 209 3.58. ábra: Taszkváltás alatti ellenörzés........................................ 213 3.59. ábra: Beágyazott taszkok...................................................... 215 3.60. ábra: A taszkváltások hatása a Busy, NT és LINK

mezőkre ........................................................................ 216 3.61 ábra: Lineáris átfedés a fizikai memóriában ......................... 221 3.62. ábra: Kivételek és megszakításvektorok .............................. 224 3.63. ábra: Kivételek és megszakítások egymás közötti

prioritása....................................................................... 229

Page 301: Otodik Generacios Processzorok_pentium

Ábra- és példajegyzék

303

3.64. ábra: IDT lokalizálása a memóriában az IDTR segítségével .................................................................. 230

3.65. ábra: IDT kapudeszkriptor ................................................... 232 3.66. ábra: Megszakítás procedura hívás ...................................... 234 3.67. ábra: Verem keret egy megszakítás vagy kivétel után ......... 235 3.68. ábra: Megszakítás taszkkapcsolás ........................................ 238 3.69. ábra: Hibakód ....................................................................... 240 3.70. ábra: Megszakítás és kivétel osztályok ................................ 244 3.71. ábra: Dupla hiba viszonyok.................................................. 245 3.72. ábra: Érvénytelen TSS állapotok.......................................... 247 3.73. ábra: Laphiba hibakódok...................................................... 253 3.74. ábra: Adattípusok által igényelt illeszkedési feltételek........ 260 3.75. ábra: Kivételek összefoglalása ............................................. 262 3.75. ábra: Hibakódok összefoglalása........................................... 263 3.76. ábra: Az üzemmód-állapotok közti átmenetek..................... 266 3.77 ábra: Az SMM kezdeti állapota............................................. 267 3.78. ábra: Az állapottároló formátuma ........................................ 270 3.79. ábra: Állapot-beosztás.......................................................... 271 3.80. ábra: SMM revízió-azonosító............................................... 271 3.81. ábra: SMM revízió-azonosító táblázat ................................. 272 3.82. ábra: Felfüggesztett állapotból való automatikus

újraindítás..................................................................... 273 3.83. ábra: Belépés a 8086-os virtuális üzemmódba és az abból

való kilépés................................................................... 280 3.84. ábra: A 0. privilégiumszintű verem állapota 8086-os

virtuális módban, a megszakítást követően.................. 281 3. 85. ábra: A software-megszakítás műveletei ............................ 287

Page 302: Otodik Generacios Processzorok_pentium

Általános CPU programozási információk

304

Előzetes a második kötet tartalmából Címzésmódok - amit, és amivel címezhetünk FPU - felépítés, szerkezet - veremkezelés - működés, kivételek - adatformátumok, pontosság - párhuzamos kezelés Optimalizáció - hogy a programjaink jobbak legyenek I/O kezelés - portkezelési lehetőségek Trace, debug - a hibák felderítése

Lehetőségek - az ötödik generációs processzorok által nyújtott

további lehetőségek Utasításkészlet - A Pentium processzor teljes utasításkészlete Függelékek - A P54 Pentium processzor részletesebb blokkvázlata és egyéb adatai - A PowerPC 601, 603, 604 processzorok

blokkvázlatai, és egyéb adataik Products mentioned in this book are mentioned for identification purposes only. Product names appearing in this book may or may not be registered trade marks or copyrights of their respective companies.