Virtuell DOS-maskin

En virtuell DOS-maskin (VDM) gör det möjligt för datoranvändare att köra 16-bitars eller 32-bitars DOS- och 16-bitars Windows-program på 32-bitarsdatorer när ett annat operativsystem redan används på hårdvaran.

 

Översikt

Virtuella DOS-maskiner använder normalt det virtuella 8086-läget i Intel 80386-processorn (eller senare), vilket gör det möjligt för många 8086-program att fungera genom att översätta operativsystemets kommandon så att programmen tror att de körs på en 8086. Operativsystemet kan sedan emulera DOS-programvaran.

VDM:er som Windows 3.x 386 Enhanced Mode kan lägga till stöd för att använda 16-/32-bitars programvara i skyddat läge om de använder DOS Protected Mode Interface (DPMI).

Om ett DOS-program i en VDM behöver använda en perifer enhet ger Windows DOS-programmet en virtuell enhetsdrivrutin (VDD) som emulerar maskinvaran med kommandon som operativsystemet som körs på kan förstå.

 

DOS VDM:er

DOS VDM:erna dök upp i Windows/386 2.01 1987 och fanns även i Windows 3.x, om du använde 386 Enhanced Mode, samt i 95, 98, 98 SE och Me.

I likhet med Windows 3.x kan du med VDM köra många DOS-program samtidigt om du använder EMM386 /MULTI-alternativet. Digital Research/Novell har arbetat på ett liknande system sedan 1991 under kodnamnet "Vladivar" (ursprungligen en enhetsdrivrutin KRNL386.SYS och inte en del av EMM386). Det gjordes för nästa version av DR DOS, som släpptes som Novell DOS 7 1994, men det användes också i deras "Star Trek"-projekt, som de slutade arbeta med innan det avslutades.

 

OS/2 MVDM

VDM:er som kallas MVDM (Multiple Virtual DOS Machine) används i OS/2 2.0 och senare. OS/2 MVDM är bättre än NTVDM på många sätt, till exempel med blockenheter. Medan OS/2 1.x emulerade DOS 3.0 emulerade 2.x DOS 5.0.

Att köra Windows 3.1-program i OS/2 ser ut som XP-läge i Windows 7, men den teknik som används är mycket annorlunda. En "gäst" VDM tillåter program att använda diskarna i det OS/2- eller NT-operativsystem som kör VDM:en. Program i en VDM kan använda namngivna pipes för att tala med sin "värd". []

 

Windows NTVDM

NTVDM ingår i alla x86-versioner av Windows som tillverkas på NT och låter 16-bitars Windows- och 16-/32-bitars DOS-program köras. Det ingår inte i 64-bitarsversioner (se Begränsningar). ntvdm.exe hjälper till att emulera de API:er som behövs för att köra 16-bitars DOS- och Windows-program.

NTVDM använder NTIO.SYS och NTDOS.SYS, som kör en ändrad version av COMMAND.COM. 16-bitarssystemfilerna är mindre versioner av sina motsvarigheter till MS-DOS 5.0, inklusive IO.SYS, MSDOS.SYS och COMMAND.COM, som tar bort förskjutningar med FAT-filsystemet och som också kan anropa 32-bits NTVDM om det behövs. NTDOS gav ursprungligen en DOS-version 30.00 till program, men detta ändrades snart till 5.00 för att fler program skulle kunna köras utan att ändras Det finns dock många nyare MS-DOS-funktioner och kommandon som lagts till i MS-DOS-versionerna 6.x och i Windows 9x och som inte finns där.

16-bitarsprogram körs separat i en 32-bitarsprocess i NTVDM. Om du markerar "Kör i separat minnesutrymme" i dialogrutan Kör eller i programmets genväg skapas istället en ny process. NTVDM emulerar BIOS-funktioner, Windows 3.1-kärnan och dess 16-bitars API.

32-bitars DOS-emulering används för DPMI och för att använda 32-bitars minne. wowexec.exe är emulatorprocessen för 16-bitars Windows. Windows 2000 lade till Sound Blaster 2.0-emulering till 32-bitars NTVDM. Virtuella enhetsdrivrutiner för 16-bitar och DOS kan inte köras. Win16-program kan kommunicera med andra delar av Windows med hjälp av OLE, DDE och named pipes.

Eftersom det virtuella 8086-läget inte är tillgängligt på icke-x86-processorer var NTVDM en fullständig emulator för NT på dessa arkitekturer. NT 3.51 kunde endast använda 80286, men sedan NT 4.0 har 486-emulering lagts till.

Säkerhetsfrågor

I januari 2010 upptäckte Googles säkerhetsforskare Tavis Ormandy ett stort säkerhetsproblem i NTVDM-systemet som gjorde det möjligt för icke-administratörer att öka sina behörigheter till SYSTEM-nivån. Ormandy hävdade att det var ett problem för alla x86-versioner av Windows NT efter 1993. 32-bitarsversioner av NT 3.X/4.0, 2000, XP, 2003, Vista, 2008 och 7 berördes. Ormandy publicerade hur problemet fungerar. Innan Microsoft kunde åtgärda det kunde man stänga av stödet för 16-bitarsprogram för att lösa problemet, men det gjorde att man inte kunde köra 16-bitarsprogram. x64 Windows hade aldrig det här problemet eftersom det inte använder NTVDM. Efter att ha tillämpat de säkerhetsrättelser som Microsoft gjorde tillgängliga kunde NTVDM aktiveras på ett säkert sätt.

Begränsningar

NTVDM och wowexec hade begränsningar på Windows XP och senare på grund av en begränsning för GDI-objekt per session, vilket kunde leda till att GDI-handtag flyttades två bitar till höger när 32 till 16 bitar ändrades. Handlingar kunde därför inte vara större än 14 bitar, så 16-bitarsprogram med en GDI-handling som var större än 16384 kraschade.

På x86-64-processorer är det virtuella 8086-läget endast tillgängligt som ett gammalt underläge (om man kör ett 32-bitars operativsystem), men inte i 64-bitars långläge, vilket är anledningen till att NTVDM inte ingår i 64-bitarsversioner av Windows, så 16-bitars program kan inte köras i 64-bitars Windows. Du behöver Windows XP Mode eller liknande virtualiseringsprogram för att köra 16-bitars program i ett 64-bitars operativsystem.

NTVDM kan inte köra DOS-spel på dagens datorer. Emulering finns endast för enkla kringutrustning. Ljudet i NTVDM kan till exempel vara begränsat. Windows NT uppdaterar endast skärmen några gånger per sekund när DOS-program skriver på den, och de kan inte emulera grafikalternativ med hög upplösning. Eftersom programvaran körs med processorns hastighet stannar alla tidsslingor för tidigt. Detta gör antingen att spel körs för snabbt eller att programvaran inte ser vissa emulerade hårdvaruperiferier, eftersom den inte kan vänta så länge på ett svar.

 

Relaterade sidor

 

AlegsaOnline.com - 2020 / 2023 - License CC3