Virtuální režim 8086
Virtuální režim 8086 (V86, VM86, někdy jen virtuální režim ) je režim adresování pro procesory rodiny x86 kompatibilní s předchůdcem rodiny - procesorem Intel 8086 . Je to podmód chráněného . Poprvé se objevil v procesoru 80386 a byl určen hlavně k vytvoření tzv. „virtuální DOS stroje“, virtuální prostředí pro spouštění aplikací operačního systému MS-DOS, který v té době ovládal svět osobních počítačů. Jde o první pokus společnosti Intel Corporation zavést technologie hardwarové virtualizace do svých procesorů .
Funkce
Virtuální úloha 8086 je normální úloha v chráněném režimu s následujícími funkcemi:
- Režim se aktivuje nastavením příznaku EFLAGS.VM pomocí privilegované instrukce (IRET, JMP <úloha>) (neprivilegovaný příkaz POPF, i když je spuštěn na úrovni oprávnění 0, nemění stav tohoto příznaku).
- Adresa, stejně jako skutečný režim , je dvousložková a skládá se z 16bitového 16bajtového čísla odstavce udávajícího základní adresu segmentu a 16bitového offsetu v rámci segmentu;
- Na základě formátu adresy lze adresovat pouze nejnižší megabajt paměti (+65520 HMA bajtů); díky stránkování však mohou být na tuto oblast mapovány libovolné stránky paměti, což umožňuje multitasking pro úlohy DOS;
- Úloha běží s nejnižšími oprávněními v kruhu 3.
- Přerušení jsou zpracována běžnými obslužnými rutinami OS v chráněném režimu. Tabulka vektorů přerušení na adrese 0 se nepoužívá (pokud není aktivní rozšíření VME). Modul operačního systému, často označovaný jako monitor V86, může emulovat přerušení v reálném režimu programovým přístupem k této tabulce;
- Hodnota pole EFLAGS.IOPL se změní. V režimu V86 se používá k zachycení některých instrukcí (CLI, STI, PUSHF, POPF, INT, IRET) a zachycení I/O vyžaduje použití bitmapy povolení portu v segmentu stavu úlohy;
Rozšíření
Počínaje procesorem Pentium byly v režimu V86 zavedeny volitelné funkce: tabulka přesměrování přerušení a virtualizace příznaku přerušení. Nyní mohl procesor bez zásahu OS přímo použít tabulku vektorů přerušení na adrese 0, a ne pro všechna přerušení, ale pouze pro ta, která operační systém umožňoval pomocí speciální bitmapy (podobné I/O mapě) v úloze. stavový segment. Virtualizace příznaků přerušení také snižuje počet výjimek, které musí operační systém zpracovávat, což následně ovlivňuje celkový výkon.
V86 a x86-64
Procesory x86-64 podporují pouze V86 ve starším režimu, nikoli v dlouhém režimu. V dlouhém režimu je příznak EFLAGS.VM jednoduše ignorován. Pro podporu virtuálních úloh DOSu je tedy nutné přepnutí do staršího režimu spolu s dvojitým resetem MMU . A protože role DOSu a jeho aplikací v dnešní době do značné míry zmizela, operační systémy x86-64 tento druh podpory V86 nezahrnují. Některé moderní hardwarové virtualizační nástroje však umožňují virtualizovat jak reálný režim, tak V86, což vede k duální virtualizaci.
Podpora operačního systému
- MS-DOS - V DOSu byl režim V86 použit k emulaci rozšířené paměti podle standardu LIM/EMS pomocí speciálního ovladače EMM386 . Protože je v tomto režimu možný překlad stránek, na rozdíl od skutečného, byla rozšířená paměť emulována zobrazením další paměti v okně adresy UMB/EMS. Ovladač také umožnil umístit data a rezidentní programy na adresy UMB.
- OS / 2 - OS / 2 obsahoval běžný virtuální DOS stroj.
- Windows – Počínaje verzí 3.0 zavedl systém Windows pokročilý režim 386, který vám umožňoval vytvářet úlohy V86 pro programy DOS ("DOS v okně").
- Linux - OS Linux / x86 podporuje systémové volání vm86(), které aktivně používá program DOSEMU - bezplatná implementace virtuálního stroje DOS (nedávno nahrazen emulátorem DOSBox , protože emulace, navzdory vysokým nákladům na zdroje, je přesnější simuluje provoz počítače, což bylo důležité pro tehdejší programy, často odkazující přímo na hardware).
- FreeBSD - FreeBSD/i386 má podporu V86 a vestavěný program doscmd, který má mnohem méně funkcí než DOSEMU, a proto se prakticky nepoužívá.