32 bites Intel mikroprocesszorok
Üzemmódok védett üzemmód valós üzemmód virtuális 8086-os üzemmód alap működési mód valós üzemmód 8086-os programozási környezetet biztosít, néhány kiegészítéssel virtuális 8086-os üzemmód védett, multitasking környezetben biztosít valós módra írt programok futtatásához szimulált környezetet rendszerfelügyeleti üzemmód
Feladatok hardver támogatás biztosítása memória kezelés szoftver modulok védelme multitasking megszakítás és kivételkezelés multiprocesszoros rendszer cache kezelés hard erőforrások és tápegység kezelés debug hatékonyság követés
Regiszterek
Regiszterkészlet programozható regiszter a szegmensregiszterek kivételével 32 bites regiszterek
Felhasználói regiszterek 8 általános regiszter: utasítás mutató: EIP 6 szegmensregiszter: CS, SS, DS, ES, FS, GS állapotregiszter: EFLAGS
EFLAGS regiszter
Regiszterek és adatszerkezetek
Rendszerregiszterek
Vezérlőregiszterek
CR0 (1) PE – Protect Enable – PE=1 védett üzemmód MP – Monitor coProcessor EM – Emulate Math coprocessor TS – Task Switched – taskváltásnál TS=1 – a kopr. meghívásakor kiváltja a kopr. állapotának kimentését ET – Extension Type – 1 NE – Numeric Exception NE = 1 – lebegőpontos kivételkor INT 16h NE = 0 – DOS kompatibilis üzemmód WP – Write Protect – írásvédett lapra történő írás engedélyezése a rendszer számára
CR0 (2) AM – Alignment Mask – engedélyezi az automatikus illeszkedésellenőrzést, ha az EFLAGS AC bitje kéri NW – No Write-through – cache használat engedélyezése (Pentium 4-től nem használt) CD – Cache Disable – a cache töltése nem engedélyezett (olvasásnál ha nincs cache találat nem frissíti a cache-t) – cache üzemszerű működése: CD=0 és NW=0 PG – Paging Enable – lapozás engedélyezése (csak védett üzemmódban)
CR1-3 CR1 – fenntartott CR2 – a legutóbbi virtuális cím (lineáris cím), amely laphibát okozott CR3 – lapcímtár címe (20 bit) PWD – Page-level Writes Transparent – cache írásmód használata lapozásnál WME – Virtual-8086 Mode Extensions – engedélyezi a virtuális mód kiterjesztések használatát (pl. VIF)
CR4 különböző architekturális kiterjesztések engedélyezése PVI – Protected-Mode Virtual Interrupts TSD –Time Stamp Disable DE – Debugging Extensions PSE – Page Size Extensions PAE – Physical Address Extension – 36 bites memória címzés engedélyezése lapozásnál MCE – Machine-Check Enable PGE – Page Global Enable PCE – Performance-Monitoring Counter Enable OSFXSR – Operating System Support for FXSAVE and FXRSTOR instructions OSXMMEXCPT – Operating System Support for Unmasked SIMD Floating-Point Exceptions
Nyomkövető regiszterek DR0–DR3 – négy független hardware töréspontot (breakpoint) definiál – lineáris cím DR4, DR5 – fenntartott DR6 – Debug Status Register – az utolsó debug kivétel felléptekor teljesült feltételek DR7 – Debug Control Register
Lebegőpontos regiszterek
FPU - állapotregiszter
FPU – vezérlőregiszter (Control Word)
FPU – toldalékszó regiszter (Tag Word) minden általános regiszter tartalmát két bit jellemzi
Mutató regiszterek az utolsó végrehajtott nem vezérlő utasításra mutatnak (lehetővé teszik a hibát generáló utasítás lokalizálását) utasítás pointer regiszter operandus pointer regiszter 48 bites regiszterek (offset 0-31, szegmens 32-47) utasítás kód – Floating Point Opcode – 10 bit
Mentés lebegőpontos regiszterek mentése memóriába
Memóriaszervezés
Virtuális memória kezelés
Címterület az a címterület, amit a processzor címezni képes 4 Gbyte – 232 kiterjeszthető 64 Gbyte-ra – 236
Logikai és lineáris címek
Szegmens szelektor Index – a deszkriptortáblához a szegmensregiszterek tartalmazzák
Szegmensregiszterek
Szegmens deszkriptor
Kód és adatszegmens típusok
Deszkriptortáblák
Lapozás lineáris címet fordít fizikai címre fix méretű fizikai blokkok, nincs felaprózódás cím – lapkeret név + offset a lapozást a CR0 regiszter PG bitje engedélyezi lapok mérete 4 KB, ha a PDE-ben PS=0 4 MB, ha a PDE-ben PS=1 4 KB-os lapok esetén két szintes táblázatok lapcímtár – laptáblázat címe laptáblázat – 1024 bemenet, mindegyik egy fizikai lap címe lapcímtár címe – CR3 regiszter
Lapozás
Lapcímtár bemenet (PDE)
Laptáblázat bemenet(PTE)
TLB – Translation Lookaside Buffer a lapozó egység belső cache memóriája (tartalommal címezhető) Leggyakrabban használt PTE és PDT-k CR3 betöltésekor, illetve lapcímtár vagy laptáblázat módosításakor ki kell üríteni. lineáris cím fordításakor először itt keresi az információt a címek kb. 98%-ában találat
Védelem
Védelmi rendszer szegmens és lapszintű védelmet is biztosít minden memória hivatkozásnál ellenőrzi, hogy a védelmi feltételek teljesülnek-e az ellenőrzéseket a címek fordításával egyidőben végzi, így nincs hatásfok veszteség kivétel lép fel, ha nem teljesülnek a feltételek védelmi rendszer ellenőrzései: határellenőrzés típusellenőrzés privilégiumszint ellenőrzés címezhető tartomány korlátozása eljárás belépési pontok korlátozása utasítások használatának korlátozása
Védelmi szintek
Védelmi szintek (2) CPL – Current Privilege Level – a végrehajtott task privilégiumszintje, a CS és SS regiszterek 0 és 1-es bitje DPL – Descriptor Privilege Level – egy szegmens vagy kapu privilégiumszintje – a szegmens deszkriptorban RPL – Requested Privilege Level – megkívánt privilégiumszint – szelektorban
Ellenőrzés adatszegmensek esetén
Példa
Közvetlen CALL és JMP szegmensen belül mindig megengedett azonos privilégiumszinten levő szegmensek között megengedett magasabb privilégiumszinten levő „conforming” kódszegmensre megengedett – magmarad a hívó kódot tartalmazó szegmens privilégiumszintje, nem történik veremváltás
Közvetlen CALL és JMP
Példa
Kapuk Ellenőrzött hozzáférést biztosítanak különböző privilégiumszinten levő kódszegmensekhez lehetnek Call kapuk Trap kapuk Interrupt kapuk Task kapuk
Call kapuk lehetővé teszik a különböző privilégiumszinten levő szegmensek közti vezérlésátadást lehetővé teszik a 16 és 32 bites szegmensek közti kommunikációt
Call kapuk a kapu meghatározza az eljárás belépési pontját, a CALL utasításban levő offset nem számít amikor call kapun keresztül egy magasabb privilégiumszintű eljárást hívunk meg a CPL a meghívott szegmens privilégiumszintje lesz magasabb privilégiumszintre történő váltáskor a magasabb szintű verembe kerül: SS, ESP, (Param. Count duplaszó), CS, EIP
Call kapuk használata
Call kapuk – példa
Megszakításkezelés a megszakításvektor az Interrupt Descriptor Table (IDT) tartalmazhat: task-kapu deszkriptorokat, megszakítás-kapu deszkriptorokat, trap-kapu deszkriptorokat kezdőcíme az IDTR regiszterben
IDT
Megszakítás-kapu törli az EFLAGS regiszter IF bitjét (letiltja az újabb megszakításokat)
Trap-kapu nem törli az EFLAGS regiszter IF bitjét (nem tiltja le az újabb megszakításokat)
Task kezelés task váltáskor az aktuális task állapotát le kell menteni minden taskhoz tartozik egy task állapot szegmens – TSS (Task State Segment), ahova a szükséges információkat lementi a rendszer az aktuális TSS-re a TR (Task Register) mutat
Task kezelés
Task állapot szegmens – TSS
TSS deszkriptor
Task kapu
Forrás IA-32 Intel® Architecture Software Developer's Manual, Volume 3: System Programming Guide ftp://download.intel.com/design/Pentium4/manuals/25366817.pdf Volume 1: Basic Architecture ftp://download.intel.com/design/Pentium4/manuals/25366517.pdf