Virtuaalinen DOS-kone
Virtuaalinen DOS-kone (Virtual DOS machine, VDM) antaa tietokoneiden käyttäjille mahdollisuuden suorittaa 16- tai 32-bittisiä DOS- ja 16-bittisiä Windows-ohjelmia 32-bittisillä tietokoneilla, kun laitteistoa käyttää jo toinen käyttöjärjestelmä.
Yleiskatsaus
Virtuaaliset DOS-koneet käyttävät yleensä Intel 80386 (tai uudemman) prosessorin virtuaalista 8086-tilaa, jolloin monet 8086-sovellukset voivat toimia kääntämällä käyttöjärjestelmän komentoja siten, että sovellukset luulevat, että ne toimivat 8086:lla. Käyttöjärjestelmä voi sitten emuloida DOS-ohjelmistoa.
VDM:t, kuten Windows 3.x 386 Enhanced Mode, voivat lisätä tuen 16-/32-bittisten suojatun tilan ohjelmistojen käytölle, jos ne käyttävät DOS Protected Mode Interface (DPMI) -rajapintaa.
Jos VDM:ssä olevan DOS-ohjelman on käytettävä oheislaitetta, Windows antaa DOS-ohjelmalle virtuaalisen laiteajurin (VDD), joka emuloi laitteistoa käyttämällä komentoja, joita käyttöjärjestelmä ymmärtää.
DOS VDM:t
DOS VDM:t ilmestyivät Windows/386 2.01:ssä vuonna 1987, ja ne olivat myös Windows 3.x:ssä, jos käytit 386 Enhanced Modea, sekä 95:ssä, 98:ssa, 98 SE:ssä ja Me:ssä.
Windows 3.x:n tapaan VDM:n avulla voit käyttää useita DOS-sovelluksia samanaikaisesti, jos käytät EMM386 /MULTI-vaihtoehtoa. Digital Research / Novell työskenteli samanlaisen järjestelmän parissa vuodesta 1991 koodinimellä "Vladivar" (alun perin laiteajuri KRNL386.SYS eikä osa EMM386:ta). Se tehtiin DR DOS:n seuraavaa versiota varten, joka julkaistiin nimellä Novell DOS 7 vuonna 1994, mutta sitä käytettiin myös heidän "Star Trek"-projektissaan, jonka työstäminen lopetettiin ennen sen valmistumista.
OS/2 MVDM
VDM:iä nimeltä MVDM (Multiple Virtual DOS Machine) käytetään OS/2 2.0:ssa ja uudemmissa versioissa. OS/2:n MVDM:t ovat monin tavoin parempia kuin NTVDM:t, esimerkiksi lohkolaitteiden osalta. OS/2 1.x emuloi DOS 3.0:aa, 2.x emuloi DOS 5.0:aa.
Windows 3.1 -sovellusten käyttäminen OS/2:ssä näyttää samankaltaiselta kuin XP Mode Windows 7:ssä, mutta käytetyt tekniikat ovat hyvin erilaisia. Vieras VDM sallii ohjelmien käyttää VDM:ää käyttävän OS/2- tai NT-käyttöjärjestelmän levyjä. VDM:ssä olevat sovellukset voivat käyttää nimettyjä putkia keskustellakseen "isäntänsä" kanssa. . []
Windows NTVDM
NTVDM sisältyy kaikkiin NT:llä tehtyihin x86-versioihin Windowsista, ja sen avulla voidaan ajaa 16-bittisiä Windows- ja 16-/32-bittisiä DOS-sovelluksia. Se ei sisälly 64-bittisiin versioihin (katso Rajoitukset). ntvdm.exe auttaa emuloimaan 16-bittisten DOS- ja Windows-sovellusten suorittamiseen tarvittavia API:ita.
NTVDM käyttää NTIO.SYS- ja NTDOS.SYS-ohjelmia, jotka ajavat COMMAND.COM-ohjelman muutettua versiota. 16-bittiset järjestelmätiedostot ovat pienempiä versioita MS-DOS 5.0:n vastaavista tiedostoista, kuten IO.SYS, MSDOS.SYS ja COMMAND.COM, jotka poistavat FAT-tiedostojärjestelmään liittyvät vääristymät ja voivat tarvittaessa kutsua myös 32-bittistä NTVDM:ää. NTDOS antoi alun perin ohjelmille DOS-version 30.00, mutta tämä muutettiin pian 5.00:ksi, jotta useampia ohjelmia voitaisiin ajaa ilman muutoksia. MS-DOS-versioihin 6.x ja Windows 9x:ään on kuitenkin lisätty monia uudempia MS-DOS:n toimintoja ja komentoja, joita MS-DOS:ssa ei ole.
16-bittiset ohjelmat suoritetaan erikseen yhdessä 32-bittisessä NTVDM-prosessissa. Kun ohjelman Suorita-valintaikkunassa tai pikakuvakkeessa valitaan "Suorita erillisessä muistialueessa", luodaan sen sijaan uusi prosessi. NTVDM emuloi BIOS-toimintoja, Windows 3.1:n ytimen ja sen 16-bittisen API:n.
32-bittistä DOS-emulaatiota käytetään DPMI:tä ja 32-bittisen muistin käyttöä varten. wowexec.exe on 16-bittisen Windowsin emulaatioprosessi. Windows 2000 lisäsi Sound Blaster 2.0 -emuloinnin 32-bittiseen NTVDM:ään. 16-bittisiä ja DOS-virtuaalisia laiteajureita ei voi ajaa. Win16-ohjelmat voivat kommunikoida Windowsin muiden osien kanssa OLE:n, DDE:n ja nimettyjen putkien avulla.
Koska virtuaalinen 8086-tila ei ole käytettävissä muissa kuin x86-prosessoreissa, NTVDM oli täydellinen emulaattori NT:lle näillä arkkitehtuureilla. NT 3.51 pystyi vain 80286:een, mutta NT 4.0:sta lähtien siihen lisättiin 486-emulointi.
Turvallisuuskysymykset
Tammikuussa 2010 Googlen tietoturvatutkija Tavis Ormandy löysi suuren tietoturvaongelman NTVDM-järjestelmässä, joka sallii muiden kuin järjestelmänvalvojien nostaa käyttöoikeutensa SYSTEM-tasolle. Ormandy väitti, että ongelma koski kaikkia Windows NT:n x86-versioita vuoden 1993 jälkeen. Vaikutus koski 32-bittisiä versioita NT 3.X/4.0, 2000, XP, 2003, Vista, 2008 ja 7. Ormandy julkaisi, miten ongelma toimii. Ennen kuin Microsoft pystyi korjaamaan ongelman, 16-bittisten sovellusten tuen saattoi kytkeä pois päältä ongelman ratkaisemiseksi, mutta se aiheutti sen, että 16-bittisiä ohjelmia ei voinut ajaa. x64 Windowsissa ei koskaan ollut tätä ongelmaa, koska se ei käytä NTVDM:ää. Kun Microsoftin tekemät tietoturvakorjaukset oli otettu käyttöön, NTVDM voitiin ottaa turvallisesti käyttöön.
Rajoitukset
NTVDM:llä ja wowexecillä oli rajoituksia Windows XP:ssä ja sitä uudemmissa versioissa GDI-objektien istuntokohtaisen rajoituksen vuoksi, mikä saattoi aiheuttaa sen, että GDI-kädensijat siirrettiin kaksi bittiä oikealle, kun 32-bittisestä siirryttiin 16-bittiseen. Kahvat eivät siis voineet olla suurempia kuin 14 bittiä, joten 16-bittiset ohjelmat, joissa GDI-kahva oli suurempi kuin 16384, kaatuivat.
x86-64-suorittimissa virtuaalinen 8086-tila on käytettävissä vain legacy-alitilana (jos käytössä on 32-bittinen käyttöjärjestelmä), mutta ei 64-bittisessä pitkässä tilassa, minkä vuoksi NTVDM ei sisälly 64-bittisiin Windows-versioihin, joten 16-bittisiä sovelluksia ei voi käyttää 64-bittisessä Windowsissa. Tarvitset Windows XP Mode -tilan tai vastaavan virtualisointiohjelmiston, jos haluat ajaa 16-bittisiä ohjelmia 64-bittisessä käyttöjärjestelmässä.
NTVDM ei voi ajaa DOS-pelejä nykypäivän tietokoneilla. Emulointia tarjotaan vain yksinkertaisille oheislaitteille. Esimerkiksi ääntä voidaan rajoittaa NTVDM:ssä. Windows NT päivittää näyttöä vain muutaman kerran sekunnissa, kun DOS-ohjelmat kirjoittavat siihen, eikä niillä voida emuloida korkean resoluution grafiikkavaihtoehtoja. Koska ohjelmistot toimivat suorittimen nopeudella, kaikki ajoitussilmukat pysähtyvät liian aikaisin. Tämä joko saa pelit toimimaan liian nopeasti tai aiheuttaa sen, että ohjelmisto ei näe joitakin emuloituja laitteiston oheislaitteita, koska se ei voi odottaa vastausta niin kauan.