Kontakty Webpage přednášky: – Slajdy (MS PowerPoint): –ftp://ulita.ms.mff.cuni.cz/predn/PRG017 Technické informace (manuály ap.): –ftp://ulita.ms.mff.cuni.cz/techdoc/index.html Mail:
Mód virtuální 8086 (V86) Motivace: –„Lepší“ reálný mód –Mód činnosti procesoru, který: umožňuje vykonávat 16-bitový (8086) kód nevylučuje implementaci bezpečného OS neomezuje využívání moderních rysů 32-bitové architektury na úrovni OS Kudy na to: –„Lokální“ mód: Nedefinuje celkové chování procesoru (jako RM, PM), ale je pouze atributem tásku(ů) v rámci chráněného módu Ostatní tásky mohou pracovat ve standardním (typicky 32-bitovém) chráněném režimu
Ovládání módu V86 Procesor pracuje v módu V86, je-li na nastaven bit EFLAGS[VM] =1 Jde o 17. bit registru EFLAGS, tj. není dosažitelný 16-bitovými akcemi Jedná se o jeden ze speciálních příznaků registru EFLAGS : –K dispozici jsou pouze striktně limitované prostředky pro jeho změnu. Ta je možná pouze: při přepnutí tásků, pokud je bit EFLAGS[VM] v TSS cílového tásku nastaven vykonáním instrukce IRETD při CPL=0 Ve všech jiných případech modifikace registru EFLAGS se VM chová jako „tiše chráněný“ bit - tj. jeho hodnota se nemění, výjimka se nekoná –Speciálně platí, že bit VM nelze nastavit: Instrukcí POPFD bez ohledu na aktuální CPL Instrukcí IRETD při CPL>0 (s výjimkou případu EFLAGS[NT] =1) Speciálně k bitu VM přistupuje i instrukce PUSHFD - hodnotu bitu VM na zásobník uloží vždy jako 0, bez ohledu na skutečný stav nebo CPL
Přehled vlastností V86 16-bitový mód - 16-bitové operandy, 16-bitové adresové módy Segmentace pracuje stejně jako v RM: procesor nepoužívá tabulky deskriptorů, obsahem segmentových registrů není selektor, ale část bázové adresy segmentu CPL=3 IOPL nemá vliv na I/O operace, ale pouze na manipulaci s EFLAGS[IF] Instrukce explicitně se odvolávající na tabulky deskriptorů nelze vykonat ( LTR, STR, LLDT, SLDT, LAR, LSL, ARPL, VERR, VERW ) - procesor je „nezná“ Systém ochran pracuje téměř stejně jako v PM Systém přerušení pracuje téměř stejně jako v PM K dispozici jsou i další vlastnosti 32-bitové architektury - především stránkování
Struktura V86 32-bitový TSS –Musí být 32-bitový, 16-bitový nemá EFLAGS s VM 8086 program Monitor V86 –Obsluha výjímek a přerušení, emulování I/O –CPL=0 –Přístup do paměti OS –Celý OS se nechá na 8086 programu –Služby emulovány monitorem pomocí stávajících služeb 32-bitového OS
Správa paměti podrobněji "Segmentace" stejná jako v RM (a téměř stejná jako u 8086) Rozdíl proti RM: procesor pracuje s CPL=3 –Vzhledem s segmentaci žádný rozdíl, V86 tásk se nedokáže odvolat na nějaký prioritou nedostupný deskriptor Na rozdíl od RM je v režimu V86 možné použít stránkování Důvodem pro využití stránkování může být: –Virtualizace paměti (více V86 tásků) –Sdílení ROM –Řešení problémů kompatibility (A20 line) –Paměťově mapované I/O
Přechody z/do VM86 - 1
Přechody z/do VM Task switch –CALL nebo JMP, v cílovém TSS je VM=1 –IRET s NT=1 2.HW přerušení/výjímka, INTn při IOPL=3 3.#GP způsobená INTn, IRET, POPF, PUSHF, IN, OUT při IOPL<3 4.Normální návrat z obsluhy přerušení/výjímky v chráněném módu 5.Návrat z monitoru pro přesměrování přerušení/výjímky do VM86 6.Vnitřní přesměrování INTn při IOPL<3 a bit přesměrování nastaven
VM86 I/O Ochrana všech portů Povolení všech portů Výjímka při přístupu na specifický port –Využití bitmapy přístupu v TSS Výjímka při přístupu na specifický paměťově mapovaný port –Využití stránkování
Obsluha přerušení VM86 Třída 1 –Všechny procesorem generované výjímky, všechna HW přerušení –Obslouženy obsluhou v chráněném režimu Třída 2 –Maskovatelná HW přerušení při VME=1 Třída 3 –Přerušení pomocí INTn Pro třídy 2 a 3 navíc využívám –IOPL řídí chování při práci s EFLAGS[IF], EFLAGS[VIF], EFLAGS[VIP] –CR4[VME] – rozšíření VM –Mapa přesměrování SW přerušení –Podpora virtuálních přerušení
Obsluha přerušení VM86 – Třída 1 Obsluha výjímky/přerušení v chráněném režimu pomocí trap- nebo interrupt-gate –Průzkumem zásobníku zjistím stav EFLAGS[VM] –Obsluha v chráněném režimu –Vyvolání monitoru –Přesměrování virtuálním monitorem zpět do VM Obsluha výjímky/přerušení ve VM86 –Po přesměrování monitorem Obsluha výjímky/přerušení pomocí task-gate
Záznam na zásobníku při obsluze přerušení branou přerušení v módu V86
Obsluha přerušení VM86 – Třída 2 VME=1 a IOPL<3 povolí VIF a VIP Zjednodušení emulace operací s IF (PUSHF, POPF, CLI, STI) VIF virtualizuje IF, operace pracující s IF pracují s VIF VIP je pouze záznam o čekajícím maskovatelném přerušení –CPU jej pouze čte –OS do něj zapisuje Obsluha přerušení: –Uloží stav na zásobník CPL0, na něm je IOPL=3, VIF->IF, VM=0 –Monitor přečte VIF VIF=0 – monitor nastaví VIP VIF=1 – monitor „provede“ přerušení Obsluha STI –VIP=0 – nastaví se VIF=1 –VIP=1 – vyvolá se #GP
Obsluha přerušení VM86 – Třída 3 MetVMEIOPLBitAkce 103XObsluha v chráněném režimu 20<3XVyvolání #GP 31<31Vyvolání #GP, podpora VIP, VIF 4131Stejně jako Přesměrováno na obsluhu <30Přesměrováno na obsluhu 8086, podpora VIP, VIF
Mapa přesměrování přerušení VM86