Máquina virtual DOS
Una máquina virtual de DOS (VDM) permite a los usuarios de ordenadores ejecutar programas de DOS de 16 o 32 bits y de Windows de 16 bits en ordenadores de 32 bits cuando ya existe un sistema operativo diferente que utiliza el hardware.
Resumen
Las máquinas virtuales de DOS utilizan normalmente el modo virtual 8086 del procesador Intel 80386 (o posterior), lo que permite que muchas aplicaciones 8086 funcionen traduciendo los comandos del sistema operativo para hacer creer a las aplicaciones que se están ejecutando en un 8086. El sistema operativo puede entonces emular el software del DOS.
Los VDM, como el modo mejorado de Windows 3.x 386, pueden añadir soporte para el uso de software de modo protegido de 16/32 bits si utilizan la interfaz de modo protegido de DOS (DPMI).
Si un programa DOS en un VDM necesita utilizar un periférico, Windows le dará al programa DOS un controlador de dispositivo virtual (VDD) que emula el hardware utilizando comandos que el sistema operativo en el que se está ejecutando puede entender.
DOS VDMs
Los VDM de DOS aparecieron en Windows/386 2.01 en 1987 y también estaban en Windows 3.x, si se utilizaba el modo mejorado 386, así como en 95, 98, 98 SE y Me.
Al igual que en Windows 3.x, los VDM pueden permitirle ejecutar muchas aplicaciones DOS a la vez si utiliza la opción EMM386 /MULTI. Digital Research / Novell estaba trabajando en un sistema similar desde 1991 bajo el nombre en clave "Vladivar" (originalmente un controlador de dispositivo KRNL386.SYS y no parte de EMM386). Se hizo para la siguiente versión de DR DOS, lanzada como Novell DOS 7 en 1994, pero también se utilizó en su proyecto "Star Trek", en el que dejaron de trabajar antes de terminarlo.
OS/2 MVDM
Los VDMs llamados MVDM (Multiple Virtual DOS Machine) se utilizan en OS/2 2.0 y posteriores. Las MVDM de OS/2 son mejores que las NTVDM en muchos aspectos, por ejemplo con los dispositivos de bloque. Mientras que el OS/2 1.x emulaba el DOS 3.0, el 2.x emulaba el DOS 5.0.
La ejecución de aplicaciones de Windows 3.1 en OS/2 es similar al modo XP en Windows 7, pero las tecnologías utilizadas son muy diferentes. Un VDM "invitado" permite a los programas utilizar los discos del sistema operativo OS/2 o NT que está ejecutando el VDM. Las aplicaciones en un VDM pueden usar tuberías con nombre para hablar con su "anfitrión". []
Windows NTVDM
NTVDM está incluido en todas las versiones x86 de Windows realizadas en NT, y permite ejecutar aplicaciones Windows de 16 bits y DOS de 16/32 bits. No se incluye con las versiones de 64 bits (ver Limitaciones). ntvdm.exe ayuda a emular las APIs necesarias para ejecutar aplicaciones DOS y Windows de 16 bits.
NTVDM utiliza NTIO.SYS y NTDOS.SYS, que ejecuta una versión modificada de COMMAND.COM. Los archivos de sistema de 16 bits son versiones más pequeñas de sus homólogos de MS-DOS 5.0, incluyendo IO.SYS, MSDOS.SYS y COMMAND.COM, que eliminan los sesgos con el sistema de archivos FAT y también pueden llamar al NTVDM de 32 bits si es necesario. NTDOS originalmente dio una versión de DOS de 30.00 a los programas, pero esto pronto fue cambiado a 5.00 para permitir que más programas se ejecuten sin ser cambiados Sin embargo, hay muchas funciones y comandos más nuevos de MS-DOS añadidos a las versiones 6.x de MS-DOS y en Windows 9x que no están allí.
Los programas de 16 bits se ejecutan por separado dentro de un proceso NTVDM de 32 bits. Si se marca la opción "Ejecutar en un espacio de memoria separado" en el cuadro de diálogo Ejecutar o en el acceso directo del programa, se crea un nuevo proceso en su lugar. NTVDM emula las funciones de la BIOS, el kernel de Windows 3.1 y su API de 16 bits.
La emulación de DOS de 32 bits se utiliza para DPMI y para utilizar la memoria de 32 bits. wowexec.exe es el proceso de emulación para Windows de 16 bits. Windows 2000 añadió la emulación de Sound Blaster 2.0 a NTVDM de 32 bits. Los controladores de dispositivos virtuales de 16 bits y DOS no se pueden ejecutar. Los programas Win16 pueden comunicarse con otras partes de Windows utilizando OLE, DDE y named pipes.
Como el modo virtual 8086 no está disponible en los procesadores no x86, NTVDM era un emulador completo para NT en estas arquitecturas. NT 3.51 sólo podía 80286, pero desde NT 4.0 se añadió la emulación de 486.
Cuestiones de seguridad
En enero de 2010, el investigador de seguridad de Google Tavis Ormandy descubrió un gran problema de seguridad en el sistema NTVDM que permitía a los no administradores aumentar sus permisos hasta el nivel de SISTEMA. Ormandy afirmó que era un problema para todas las versiones x86 de Windows NT posteriores a 1993. Las versiones de 32 bits de NT 3.X/4.0, 2000, XP, 2003, Vista, 2008 y 7 estaban afectadas. Ormandy publicó cómo funciona el problema. Antes de que Microsoft pudiera solucionarlo, se podía desactivar el soporte de aplicaciones de 16 bits para resolver el problema, pero esto hacía que no se pudieran ejecutar programas de 16 bits. x64 Windows nunca tuvo este problema porque no utiliza NTVDM. Después de aplicar las correcciones de seguridad que Microsoft puso a disposición, NTVDM podía activarse con seguridad.
Limitaciones
NTVDM y wowexec tenían limitaciones en Windows XP y posteriores debido a un límite de objetos GDI por sesión, que podía provocar que los manejadores GDI se movieran dos bits a la derecha al cambiar de 32 a 16 bits. Por lo tanto, los manejadores no podían ser mayores de 14 bits, por lo que los programas de 16 bits con un manejador GDI mayor de 16384 se bloqueaban.
En las CPU x86-64, el modo virtual 8086 sólo está disponible como submodo heredado (si se ejecuta un sistema operativo de 32 bits), pero no en el modo largo de 64 bits, razón por la cual NTVDM no se incluye con las versiones de 64 bits de Windows, por lo que las aplicaciones de 16 bits no pueden ejecutarse en Windows de 64 bits. Necesitará Windows XP Mode o un software de virtualización similar para ejecutar programas de 16 bits dentro de un sistema operativo de 64 bits.
NTVDM no puede ejecutar juegos de DOS en los ordenadores actuales. La emulación sólo se proporciona para los periféricos simples. Por ejemplo, el sonido en NTVDM puede ser limitado. Windows NT sólo actualiza la pantalla unas pocas veces por segundo cuando los programas de DOS escriben en ella, y no pueden emular las opciones gráficas de alta resolución. Como el software se ejecuta a la velocidad de la CPU, todos los bucles de sincronización se detienen demasiado pronto. Esto hace que los juegos se ejecuten demasiado rápido, o hace que el software no vea algunos periféricos de hardware emulados, porque no puede esperar tanto tiempo para una respuesta.