Virtuellt 8086-läge
Virtuellt 8086 -läge (V86, VM86, ibland bara virtuellt läge ) är ett adresseringsläge för x86 -familjens processorer som är kompatibelt med familjens stamfader - Intel 8086-processorn . Det är ett underläge av skyddat . Dök först upp i 80386-processorn och var främst avsedd att skapa den så kallade. "virtuella DOS - maskiner", virtuella miljöer för exekvering av applikationer av operativsystemet MS-DOS som dominerade världen av persondatorer vid den tiden. Det är det första försöket från Intel Corporation att introducera hårdvaruvirtualiseringstekniker i sina processorer .
Funktioner
Den virtuella 8086-uppgiften är en normal uppgift i skyddat läge med följande funktioner:
- Läget aktiveras genom att sätta EFLAGS.VM-flaggan med hjälp av en privilegierad instruktion (IRET, JMP <task>) (ett oprivilegierat POPF-kommando, även när det körs på privilegienivå 0, ändrar inte tillståndet för denna flagga).
- Adressen är, liksom real mode , en tvåkomponents, bestående av ett 16-bitars 16-byte styckenummer som ger segmentets basadress och en 16-bitars offset inom segmentet;
- Baserat på adressformatet kan endast den lägsta megabyten i minnet (+65520 HMA-byte) adresseras; Men på grund av personsökning kan godtyckliga minnessidor mappas till detta område, vilket möjliggör multitasking för DOS-uppgifter;
- Uppgiften körs med de lägsta privilegierna i ring 3.
- Avbrott hanteras av normalt skyddat läge OS-hanterare. Avbrottsvektortabellen vid adress 0 används inte (såvida inte VME-tillägget är aktivt). En operativsystemmodul, ofta kallad en V86-bildskärm, kan emulera ett avbrott i real-mode genom att programmera åtkomst till denna tabell;
- Värdet på EFLAGS.IOPL-fältet ändras. I V86-läge används den för att fånga upp vissa instruktioner (CLI, STI, PUSHF, POPF, INT, IRET), och I/O-avlyssning kräver användning av en portaktiverad bitmapp i uppgiftsstatussegmentet;
Tillägg
Från och med Pentium-processorn introducerades valfria funktioner i V86-läge: en avbrottsomdirigeringstabell och virtualisering av avbrottsflaggan. Nu kunde processorn, utan OS-intervention, direkt använda avbrottsvektortabellen vid adress 0, och inte för alla avbrott, utan bara för de som operativsystemet tillät att använda en speciell bitmapp (liknande en I/O-karta) i uppgiften statussegment. Interrupt flag virtualisering minskar också antalet undantag som behöver hanteras av operativsystemet, vilket i sin tur påverkar den övergripande prestandan.
V86 och x86-64
x86-64-processorer stöder endast V86 i äldre läge, inte långt läge. I långt läge ignoreras EFLAGS.VM-flaggan helt enkelt. Därför, för att stödja virtuella DOS-uppgifter, krävs byte till äldre läge, tillsammans med en dubbel återställning av MMU . Och eftersom rollen för DOS och dess applikationer i stort sett har försvunnit nuförtiden, inkluderar inte x86-64-operativsystem den här typen av V86-stöd. Vissa moderna maskinvaruvirtualiseringsverktyg låter dig dock virtualisera både verkligt läge och V86, vilket resulterar i dubbel virtualisering.
Stöd för operativsystem
- MS-DOS - I DOS användes V86-läge för att emulera utökat minne enligt LIM/EMS-standarden med en speciell EMM386- drivrutin . Eftersom sidöversättning är möjlig i det här läget, till skillnad från det riktiga, emulerades utökat minne genom att visa ytterligare minne i UMB/EMS-adressfönstret. Dessutom tillät föraren att placera data och inhemska program i UMB-adresser.
- OS / 2 - OS / 2 inkluderade en vanlig virtuell DOS-maskin.
- Windows - Från och med version 3.0 introducerade Windows 386 förbättrat läge, vilket gjorde att du kunde skapa V86-uppgifter för DOS-program ("DOS i ett fönster").
- Linux - Linux / x86 OS stöder vm86()-systemanropet, som aktivt används av DOSEMU- programmet - en gratis implementering av en virtuell DOS-maskin (nyligen ersatt av DOSBox-emulatorn , eftersom emulering, trots de stora resurskostnaderna, mer exakt simulerar driften av en dator, vilket var viktigt för den tidens program, ganska ofta med direkt hänvisning till hårdvaran).
- FreeBSD - FreeBSD/i386 har V86-stöd och ett inbyggt doscmd-program, som har mycket färre funktioner än DOSEMU, och därför praktiskt taget inte används.