Virtuel 8086-tilstand
Virtuel 8086 -tilstand (V86, VM86, nogle gange bare virtuel tilstand ) er en adresseringstilstand for x86 -familieprocessorer, der er kompatibel med familiens stamfader - Intel 8086-processoren . Det er en undertilstand af beskyttet . Dukkede først op i 80386-processoren og var primært beregnet til at skabe den såkaldte. "virtuelle DOS - maskiner", virtuelle miljøer til at udføre applikationer af MS-DOS-operativsystemet, der dominerede verden af personlige computere på det tidspunkt. Det er Intel Corporations første forsøg på at introducere hardwarevirtualiseringsteknologier i sine processorer .
Funktioner
Den virtuelle 8086-opgave er en normal beskyttet tilstandsopgave med følgende funktioner:
- Tilstanden aktiveres ved at indstille EFLAGS.VM-flaget ved hjælp af en privilegeret instruktion (IRET, JMP <task>) (en uprivilegeret POPF-kommando, selv når den udføres på privilegieniveau 0, ændrer ikke tilstanden af dette flag).
- Adressen er, ligesom real mode , en to-komponent, bestående af et 16-bit 16-byte afsnitsnummer, der giver segmentets basisadresse og en 16-bit offset inden for segmentet;
- Baseret på adresseformatet kan kun den laveste megabyte hukommelse (+65520 HMA bytes) adresseres; Men på grund af personsøgning kan vilkårlige hukommelsessider tilknyttes dette område, hvilket tillader multitasking for DOS-opgaver;
- Opgaven kører med de laveste privilegier i ring 3.
- Afbrydelser håndteres af normale OS-handlere med beskyttet tilstand. Interrupt-vektortabellen på adresse 0 bruges ikke (medmindre VME-udvidelsen er aktiv). Et operativsystemmodul, der ofte omtales som en V86-skærm, kan efterligne en afbrydelse i real-mode ved programmæssig adgang til denne tabel;
- Værdien af feltet EFLAGS.IOPL ændres. I V86-tilstand bruges den til at opsnappe nogle instruktioner (CLI, STI, PUSHF, POPF, INT, IRET), og I/O-aflytning kræver brug af en portaktiveret bitmap i opgavestatussegmentet;
Udvidelser
Startende med Pentium-processoren blev valgfrie funktioner introduceret i V86-tilstand: en interrupt-omdirigeringstabel og virtualisering af interrupt-flaget. Nu kunne processoren, uden OS-intervention, direkte bruge interrupt-vektortabellen på adresse 0, og ikke til alle interrupts, men kun for dem, som operativsystemet tillod ved at bruge en speciel bitmap (ligner et I/O-kort) i opgaven statussegment. Interrupt flag virtualisering reducerer også antallet af undtagelser, der skal håndteres af operativsystemet, hvilket igen påvirker den samlede ydeevne.
V86 og x86-64
x86-64-processorer understøtter kun V86 i ældre tilstand, ikke lang tilstand. I lang tilstand ignoreres EFLAGS.VM flaget simpelthen. For at understøtte virtuelle DOS-opgaver er det derfor nødvendigt at skifte til ældre tilstand, kombineret med en dobbelt nulstilling af MMU'en . Og da rollen som DOS og dets applikationer stort set er forsvundet i disse dage, inkluderer x86-64-operativsystemer ikke denne form for V86-understøttelse. Nogle moderne hardwarevirtualiseringsværktøjer giver dig dog mulighed for at virtualisere både real mode og V86, hvilket resulterer i dobbelt virtualisering.
Understøttelse af operativsystem
- MS-DOS - I DOS blev V86-tilstand brugt til at emulere udvidet hukommelse i henhold til LIM/EMS-standarden ved hjælp af en speciel EMM386 -driver . Da sideoversættelse er mulig i denne tilstand, i modsætning til den rigtige, blev udvidet hukommelse emuleret ved at vise yderligere hukommelse i UMB/EMS-adressevinduet. Desuden tillod chaufføren at placere data og residente programmer i UMB-adresser.
- OS / 2 - OS / 2 inkluderede en almindelig virtuel DOS-maskine.
- Windows - Startende med version 3.0 introducerede Windows 386 avanceret tilstand, som gav dig mulighed for at oprette V86-opgaver til DOS-programmer ("DOS i et vindue").
- Linux - Linux / x86 OS understøtter vm86()-systemkaldet, som bruges aktivt af DOSEMU- programmet - en gratis implementering af en virtuel DOS-maskine (for nylig afløst af DOSBox-emulatoren , da emulering, på trods af de store ressourceomkostninger, mere præcist simulerer driften af en computer, hvilket var vigtigt for programmer på den tid, ret ofte med direkte henvisning til hardwaren).
- FreeBSD - FreeBSD/i386 har V86-understøttelse og et indbygget doscmd-program, som har meget færre funktioner end DOSEMU, og derfor praktisk talt ikke bruges.