Las máquinas virtuales DOS ( VDM ) se refieren a una tecnología que permite ejecutar programas DOS de 16 bits/32 bits y Windows de 16 bits cuando ya hay otro sistema operativo ejecutándose y controlando el hardware.
Las máquinas DOS virtuales pueden funcionar exclusivamente a través de métodos de emulación de software típicos (por ejemplo, recompilación dinámica ) o pueden confiar en el modo virtual 8086 del procesador Intel 80386 , que permite que el software 8086 en modo real se ejecute en un entorno controlado al capturar todas las operaciones que implican el acceso a hardware protegido y reenviarlas al sistema operativo normal (como excepciones ). El sistema operativo puede entonces realizar una emulación y reanudar la ejecución del software DOS.
Los VDM generalmente también implementan soporte para ejecutar software de modo protegido de 16 y 32 bits ( extensores DOS ), que debe cumplir con la Interfaz de modo protegido DOS (DPMI). [1]
Cuando un programa DOS que se ejecuta dentro de un VDM necesita acceder a un periférico, Windows lo permitirá directamente (raramente) o le presentará al programa DOS un controlador de dispositivo virtual (VDD) que emula el hardware utilizando funciones del sistema operativo. Un VDM tendrá sistemáticamente emulaciones para los controladores de interrupción Intel 8259A , los chips temporizadores 8254 , el controlador DMA 8237, etc. [1]
En enero de 1985, Digital Research junto con Intel presentaron una versión preliminar de Concurrent DOS 286 1.0 , [2] una versión de Concurrent DOS capaz de ejecutar programas DOS en modo real en el modo protegido del 80286. [2] Sin embargo, el método ideado en los chips de procesadores de paso B-1 dejó de funcionar en mayo de 1985 en los pasos C-1 y posteriores poco antes de que Digital Research estuviera a punto de lanzar el producto. Aunque con el paso E-1 Intel comenzó a abordar los problemas en agosto de 1985, de modo que el "modo de emulación 8086" de Digital Research volvió a funcionar utilizando la instrucción de procesador LOADALL no documentada , [3] [4] era demasiado lento para ser práctico. Los cambios de microcódigo para el paso E-2 mejoraron la velocidad nuevamente. [5] [6] Esta implementación temprana puede verse como un predecesor de las máquinas DOS virtuales reales.
Finalmente, Concurrent DOS 286 pasó de ser un posible sistema operativo de escritorio a convertirse en FlexOS 286 para uso industrial en 1986. [7] [8] IBM también lo licenció para su sistema operativo 4680 en 1986. [9] [10]
Cuando el 80386 de Intel con su modo 8086 virtual estuvo disponible (como muestras desde octubre de 1985 y en cantidades desde junio de 1986), Digital Research pasó a utilizarlo para ejecutar programas DOS en modo real en máquinas DOS virtuales en modo protegido bajo Concurrent DOS 386 1.0 (febrero de 1987) [11] y FlexOS 386 1.0 (junio de 1987). [12] Sin embargo, la arquitectura de estos sistemas operativos multitarea multiusuario en modo protegido no estaba basada en DOS por sí misma.
El DOS 386 concurrente se desarrolló posteriormente para convertirse en el DOS multiusuario (desde 1991) y REAL/32 (desde 1995). FlexOS 386 se convirtió posteriormente en el sistema operativo 4690 en 1993.
A diferencia de estos sistemas operativos en modo protegido, DOS, por defecto, es un sistema operativo en modo real, que cambia al modo protegido y al modo virtual 86 sólo en nombre de los administradores de memoria y los extensores DOS para proporcionar acceso a la memoria extendida o mapear la memoria en el primer megabyte, al que pueden acceder los programas DOS normales.
Las máquinas virtuales DOS basadas en DOS aparecieron con Windows/386 2.01 de Microsoft en septiembre de 1987. [13] Las máquinas virtuales DOS basadas en DOS también estaban presentes en Windows 3.0 , 3.1x y Windows para Trabajo en Grupo 3.1x que se ejecutaban en modo mejorado 386 , así como en Windows 95 , 98 , 98 SE y ME . Una de las características de estas soluciones que se ejecutan sobre DOS es que la disposición de la memoria que se muestra dentro de las máquinas virtuales DOS son instancias virtuales del sistema DOS y la configuración del controlador DOS se ejecuta antes de que se cargue el multitarea, y que las solicitudes que no se pueden manejar en modo protegido se pasan al dominio del sistema para que las ejecute el sistema DOS subyacente.
Similar al modo mejorado de Windows 3.x 386 en arquitectura, EMM386 3.xx de Novell DOS 7 , [1] [14] Caldera OpenDOS 7.01 , [14] [15] DR-DOS 7.02 [16] (y posteriores) también usa VDM basados en DOS para soportar multitarea preventiva de múltiples aplicaciones DOS, cuando EMM386 /MULTIse usa la opción. [14] [15] [ 16] Este componente ha estado en desarrollo en Digital Research / Novell desde 1991 [nb 1] bajo el nombre clave "Vladivar" (originalmente un controlador de dispositivo separado KRNL386.SYS[1] [14] en lugar de un módulo de EMM386). Aunque fue desarrollado principalmente para la siguiente versión principal de DR DOS, lanzada como Novell DOS 7 en 1994, [1] [14] también se utilizó en los proyectos DR DOS "Panther" y " Star Trek " que nunca se lanzaron en 1992/1993.
Desde 1992, se utilizan máquinas DOS virtuales múltiples (MVDM) en OS/2 2.0 y versiones posteriores. [1] [4] Las MVDM de OS/2 son considerablemente más potentes que las NTVDM. Por ejemplo, se admiten dispositivos de bloque y se pueden iniciar varias versiones de DOS en una MVDM de OS/2. [17] Mientras que el sistema DOS de OS/2 1.x se basaba en DOS 3.0, las MVDM de OS/2 2.x emulan DOS 5.0. [1]
La integración perfecta de aplicaciones Win32 de Windows 3.1 y posteriores en OS/2 es un concepto que parece similar a la integración perfecta del modo XP basado en Windows Virtual PC en Windows 7. Un redirector en un VDM o NTVDM "invitado" permite el acceso a los discos del "host" de OS/2 o NT. Las aplicaciones en un "invitado" pueden utilizar canales con nombre para comunicarse con su "host". [18]
Debido a una limitación técnica, las aplicaciones DOS y Windows de 16 bits bajo OS/2 no podían ver más de 2 GB de espacio en el disco duro; [19] esto se solucionó en ArcaOS 5.0.4. [20]
NTVDM es un componente de sistema de todas las ediciones IA-32 de la familia Windows NT desde 1993 con el lanzamiento de Windows NT 3.1 . Permite la ejecución de aplicaciones Windows de 16 bits y DOS de 16 bits/32 bits. El ejecutable de modo usuario de Windows NT de 32 bits que forma la base para un único entorno DOS (o Windows 3.x ) se llama ntvdm.exe . [1]
Para ejecutar programas DOS, NTVDM carga NTIO.SYS que a su vez carga NTDOS.SYS , que ejecuta un COMMAND.COM modificado para ejecutar la aplicación que se pasó a NTVDM como argumento de línea de comandos. Los archivos del sistema de modo real de 16 bits son derivaciones simplificadas de sus equivalentes MS-DOS 5.0 IO.SYS , MSDOS.SYS y COMMAND.COM [1] con todas las suposiciones cableadas en el sistema de archivos FAT eliminadas y usando el código de operación no válido 0xC4 0xC4 para bajar al NTVDM de 32 bits para manejar las solicitudes. [1] Originalmente, NTDOS informaba una versión DOS de 30.00 a los programas, [1] pero esto pronto cambió para informar una versión de 5.00 at y 5.50 at para permitir que más programas se ejecuten sin modificaciones. [1] Esto es cierto incluso en las versiones más nuevas de Windows; Faltan muchas funciones y comandos adicionales de MS-DOS introducidos en las versiones 6.x de MS-DOS y en Windows 9x .INT 21h/AH=30h
INT 21h/AX=3306h
Las aplicaciones de Windows de 16 bits se ejecutan de forma predeterminada en su propio subproceso dentro de un único proceso NTVDM. Aunque NTVDM es en sí mismo un proceso de 32 bits y realiza múltiples tareas de forma preventiva con respecto al resto del sistema, las aplicaciones de 16 bits que lo componen realizan múltiples tareas de forma cooperativa entre sí. Cuando se marca la opción "Ejecutar en un espacio de memoria independiente" en el cuadro Ejecutar o en el archivo de acceso directo de la aplicación, cada aplicación de Windows de 16 bits obtiene su propio proceso NTVDM y, por lo tanto, realiza múltiples tareas de forma preventiva con respecto a otros procesos, incluidas otras aplicaciones de Windows de 16 bits. NTVDM emula las llamadas y tablas del BIOS, así como el núcleo de Windows 3.1 y los stubs de API de 16 bits. [21] La capa de traducción de WoW de 32 bits procesa rutinas de API de 16 bits.
La emulación de DOS de 32 bits está presente para la Interfaz de Modo Protegido de DOS (DPMI) y el acceso a memoria de 32 bits. Esta capa convierte las llamadas de memoria extendida y expandida necesarias para las funciones de DOS en llamadas de memoria de Windows NT. wowexec.exe es la capa de emulación que emula Windows de 16 bits. Windows 2000 y Windows XP agregaron la emulación de Sound Blaster 2.0. [22] Los controladores de dispositivos virtuales de 16 bits y los controladores de dispositivos de bloque de DOS (por ejemplo, discos RAM) no son compatibles. La comunicación entre procesos con otros subsistemas puede realizarse a través de OLE , DDE y canalizaciones con nombre .
Dado que el modo 8086 virtual no está disponible en procesadores que no estén basados en x86 (más específicamente, MIPS , DEC Alpha y PowerPC ), NTVDM se implementa como un emulador completo en estas versiones de NT, utilizando código con licencia de SoftPC de Insignia . [23] [1] Hasta Windows NT 3.51 , solo está disponible la emulación 80286. Con Windows NT 4.0 , se agregó la emulación 486. [24]
NTVDM no está incluido en las versiones de 64 bits de Windows ni en las versiones basadas en ARM32, como Windows RT o Windows 10 IoT Core. La última versión de Windows que incluye el componente es Windows 10 , ya que Windows 11 dejó de ofrecer compatibilidad con procesadores de 32 bits .
Los siguientes comandos son parte del subsistema MS-DOS de Windows XP. [18]
En enero de 2010, el investigador de seguridad de Google Tavis Ormandy reveló una falla de seguridad grave en la implementación de VDM de Windows NT que permitía a los usuarios sin privilegios escalar sus privilegios al nivel de SISTEMA , señalado como aplicable a la seguridad de todas las versiones x86 del núcleo de Windows NT desde 1993. Esto incluía todas las versiones de 32 bits de Windows NT, 2000, XP, Server 2003, Vista, Server 2008 y Windows 7. [25] Ormandy publicó un exploit de prueba de concepto para la vulnerabilidad. [26] Antes del lanzamiento de un parche de seguridad por parte de Microsoft, la solución alternativa para este problema era desactivar el soporte de aplicaciones de 16 bits, lo que impedía que se ejecutaran programas más antiguos (aquellos escritos para DOS y Windows 3.1). Las versiones de 64 bits de Windows no se ven afectadas ya que el subsistema NTVDM no está incluido. [27] [28] Una vez que se aplicaron los parches de seguridad de Microsoft a los sistemas operativos afectados, el VDM se pudo volver a habilitar de forma segura. [nb 2]
Existe una limitación en el subsistema de 16 bits de Windows XP (pero no en versiones anteriores de Windows NT) debido al aumento del límite por sesión para los objetos GDI, lo que hace que los identificadores GDI se desplacen dos bits hacia la derecha al convertirlos de 32 a 16 bits. [29] Como resultado, el identificador real no puede ser mayor que 14 bits y, en consecuencia, las aplicaciones de 16 bits a las que el sistema GDI les sirve un identificador mayor que 16384 se bloquean y finalizan con un mensaje de error. [29]
En general, VDM y tecnologías similares no ejecutan satisfactoriamente la mayoría de los juegos DOS antiguos en las computadoras actuales. La emulación solo se proporciona para los periféricos más básicos, a menudo implementados de manera incompleta [ cita requerida ] . Por ejemplo, la emulación de sonido en NTVDM es muy limitada. Las versiones de la familia NT de Windows solo actualizan la pantalla real unas pocas veces por segundo cuando un programa DOS escribe en ella, y no emulan modos gráficos de mayor resolución. Debido a que el software se ejecuta principalmente de forma nativa a la velocidad de la CPU del host, todos los bucles de tiempo expirarán prematuramente. Esto hace que un juego se ejecute demasiado rápido o que el software ni siquiera note los periféricos de hardware emulados, porque no espera lo suficiente una respuesta.
En una CPU x86-64 , el modo 8086 virtual está disponible como submodo solo en su modo heredado (para ejecutar sistemas operativos de 16 y 32 bits), no en el modo largo nativo de 64 bits . [30] NTVDM no es compatible con las ediciones x86-64 de Windows, [31] incluidos los programas DOS, [32] porque NTVDM usa el modo de CPU VM86 en lugar de la Tabla de descriptores locales para habilitar el segmento de 16 bits requerido para el direccionamiento. [33] NTVDM tampoco está disponible en las versiones AArch64 (o ARM64) de Windows (como Windows RT ), porque Microsoft no lanzó un emulador completo para este conjunto de instrucciones incompatible como lo hizo en arquitecturas incompatibles anteriores.
Aunque NTVDM no es compatible con las versiones x86-64 y AArch64 de Windows, aún se pueden ejecutar utilizando software de virtualización , como Windows XP Mode en versiones no domésticas de Windows 7 o VMware Workstation . Otros métodos incluyen el uso de NTVDMx64, [34] un puerto no oficial de la implementación emulada de NTVDM del código fuente filtrado de Windows NT 4.0 para plataformas que no sean x86, [23] u OTVDM (WineVDM), un intérprete de Windows de 16 bits basado en la emulación i386 de MAME y la parte de 16 bits de la popular capa de compatibilidad de Windows, Wine (consulte la sección sobre WineVDM a continuación). [35]
Wine y CrossOver para Linux y Mac OS X incluyen un VDM , conocido como WineVDM (también conocido como OTVDM). También se ha adaptado al propio Windows, ya que las versiones de 64 bits de Windows no incluyen el subsistema NTVDM (véase más arriba). [36]
"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\AppCompat\VDMDisallowed"=dword:00000000
.{{cite book}}
: |work=
ignorado ( ayuda ) (NB. NWDOSTIP.TXT es un trabajo exhaustivo sobre Novell DOS 7 y OpenDOS 7.01 , que incluye la descripción de muchas características y elementos internos no documentados. Es parte de la colección MPDOSTIP.ZIP aún más grande del autor, mantenida hasta 2001 y distribuida en muchos sitios en ese momento. El enlace proporcionado apunta a una versión anterior convertida a HTML del archivo NWDOSTIP.TXT). mpdostip.zip{{cite web}}
: CS1 maint: unfit URL (link)