Máquina DOS virtual ( VDM ) se refiere a la ejecución de 16 bits / 32 bits DOS bajo Windows de 32 bits a través de COMMAND.COM.
Descripción general
Las máquinas DOS virtuales pueden funcionar exclusivamente a través de métodos típicos de emulación de software (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 mediante la captura de todas las operaciones que implican el acceso hardware protegido y reenviarlos al sistema operativo normal (como excepciones ). A continuación, el sistema operativo puede realizar una emulación y reanudar la ejecución del software DOS.
Los VDM generalmente también implementan soporte para ejecutar software en modo protegido de 16 y 32 bits ( extensores de DOS ), que debe ajustarse a la Interfaz de modo protegido de DOS (DPMI). [1]
Cuando un programa de DOS que se ejecuta dentro de un VDM necesita acceder a un periférico, Windows lo permitirá directamente (raramente) o presentará el programa de DOS con un controlador de dispositivo virtual (VDD) que emula el hardware usando las funciones del sistema operativo. Un VDM tendrá emulaciones sistemáticamente para los controladores de interrupción Intel 8259A , los chips temporizadores 8254 , el controlador DMA 8237, etc. [1]
Modo de emulación concurrente de DOS 8086
En enero de 1985, Digital Research junto con Intel presentó una versión preliminar de Concurrent DOS 286 1.0 , [2] una versión de Concurrent DOS capaz de ejecutar programas de DOS en modo real en el modo protegido del 80286 . [2] El método ideado en chips de procesador paso a paso B-1, sin embargo, en mayo de 1985 dejó de funcionar en el C-1 y los pasos posteriores del procesador poco antes de que Digital Research estuviera a punto de lanzar el producto. Aunque con el paso de E-1 Intel comenzó a abordar los problemas en agosto de 1985, el "modo de emulación 8086" de Digital Research funcionó nuevamente utilizando la instrucción del procesador LOADALL sin documentar , [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, DOS 286 concurrente fue reelaborado desde un posible sistema operativo de escritorio para convertirse en FlexOS 286 para uso industrial en 1986. [7] [8] También recibió la licencia de IBM para su sistema operativo 4680 en 1986. [9] [10]
Cuando el 80386 de Intel con su modo virtual 8086 estuvo disponible (como muestras desde octubre de 1985 y en cantidades desde junio de 1986), Digital Research cambió para usarlo para ejecutar programas DOS en modo real en máquinas DOS virtuales en modo protegido bajo Concurrent DOS 386 1.0 (febrero 1987) [11] y FlexOS 386 1.0 (junio de 1987). [12] Sin embargo, la arquitectura de estos sistemas operativos multiusuario multitarea en modo protegido no estaba basada en DOS por sí mismos.
El DOS 386 concurrente se desarrolló más tarde para convertirse en DOS multiusuario (desde 1991) y REAL / 32 (desde 1995). FlexOS 386 más tarde se convirtió en 4690 OS en 1993.
VDM basados en DOS
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 solo en nombre de los administradores de memoria y extensores de DOS para proporcionar acceso a la memoria extendida o al mapa en memoria en el primer megabyte, que es accesible para los programas normales de DOS.
VDM basados en DOS aparecieron con Microsoft Windows / 386 2.01 en septiembre de 1987. [13] máquinas virtuales DOS basados en DOS también estuvieron presentes en Windows 3.0 , 3.1x y de Windows para trabajo en grupo 3.1 x que se ejecuta 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 el diseño de memoria que se muestra dentro de las máquinas DOS virtuales 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 transmiten al dominio del sistema para ser ejecutados por 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 posterior) también usa VDM basados en DOS para admitir la multitarea preventiva de múltiples aplicaciones de DOS, cuando EMM386 /MULTIse utiliza la opción. [14] [15] [16] Este componente ha estado en desarrollo en Digital Research / Novell desde 1991 [nb 1] bajo el nombre en clave "Vladivar" (originalmente un controlador de dispositivo separado KRNL386.SYS[1] [14] en lugar de un módulo de EMM386 ). Aunque se desarrolló principalmente para la próxima versión principal de DR DOS, lanzada como Novell DOS 7 en 1994, [1] [14] también se usó en el proyecto DR DOS "Panther" y " Star Trek " nunca lanzado en 1992/1993.
OS / 2 MVDM
Los VDM llamados MVDM (Multiple Virtual DOS Machine) se utilizan en OS / 2 2.0 y posteriores desde 1992. [1] [4] Los MVDM de OS / 2 son considerablemente más potentes que NTVDM . Por ejemplo, se admiten dispositivos de bloque y se pueden iniciar varias versiones de DOS en un MVDM de OS / 2. [17] Mientras que el cuadro DOS de OS / 2 1.x se basaba en DOS 3.0, los MVDM de OS / 2 2.x emulan DOS 5.0. [1]
La integración perfecta de las aplicaciones de Windows 3.1 y posteriores Win32s en OS / 2 es un concepto que parece similar en la superficie a la integración perfecta del modo XP basado en Windows Virtual PC en Windows 7 . Un redirector en un VDM "invitado" o NTVDM permite el acceso a los discos del "host" OS / 2 o NT. Las aplicaciones en un "invitado" pueden utilizar canalizaciones con nombre para comunicarse con su "host". [18]
Debido a una limitación técnica, las aplicaciones de DOS y Windows de 16 bits bajo OS / 2 no pudieron ver más de 2GB de espacio en el disco duro, [19] esto se corrigió en ArcaOS 5.0.4. [20]
Windows NTVDM
NTVDM es un componente del sistema de todas las ediciones IA-32 de la familia Windows NT desde 1993 que permite la ejecución de aplicaciones de Windows de 16 bits y DOS de 16 bits / 32 bits. No se incluye con las versiones de 64 bits. Se llama al ejecutable en modo de usuario de Windows NT de 32 bits que forma la base para un único entorno DOS (o Windows 3.x ) ntvdm.exe. [1]
Para ejecutar programas de DOS, NTVDM carga, NTIO.SYSque a su vez carga NTDOS.SYS, que ejecuta una modificación COMMAND.COMpara ejecutar la aplicación que se pasó a NTVDM como argumento de línea de comandos. Los archivos del sistema en modo real de 16 bits se desnudaron derivaciones de sus MS-DOS 5.0 equivalentes IO.SYS, MSDOS.SYSy COMMAND.COM[1] con todos los supuestos cableados en el sistema de archivos FAT eliminado y utilizando el código de operación no válida 0xC4 0xC4 a bop hacia abajo en el 32 -bit NTVDM para manejar las solicitudes. [1] Originalmente, NTDOS reportó una versión de DOS de 30.00 a los programas, [1] pero esto pronto se cambió para reportar una versión de 5.00 at INT 21h/AH=30hy 5.50 at INT 21h/AX=3306hpara permitir que más programas se ejecutaran sin modificaciones. [1] Esto es cierto incluso en las últimas versiones de Windows; faltan muchas funciones y comandos de MS-DOS adicionales introducidos en las versiones 6.xy en Windows 9x de MS-DOS .
Todas las aplicaciones de Windows de 16 bits se ejecutan de forma predeterminada en su propio hilo dentro de un solo proceso NTVDM. Aunque NTVDM en sí es un proceso de 32 bits y de forma preventiva multitarea con respecto al resto del sistema, las aplicaciones de 16 bits dentro de él son multitarea cooperativamente entre sí. Cuando la opción "Ejecutar en un espacio de memoria separado" está marcada 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, es multitarea preventiva con respecto a otros procesos, incluidos otros de 16 bits. bit aplicaciones de Windows. NTVDM emula las llamadas y tablas del BIOS, así como el kernel de Windows 3.1 y los stubs de API de 16 bits. [21] La capa de traducción WoW de 32 bits procesa rutinas 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 la memoria de 32 bits. Esta capa convierte las llamadas de memoria extendidas y expandidas necesarias para funciones de DOS en llamadas de memoria de Windows NT. wowexec.exees la capa de emulación que emula Windows de 16 bits. Windows 2000 y Windows XP agregaron la emulación Sound Blaster 2.0. [22] Los controladores de dispositivos virtuales de 16 bits y los controladores de dispositivos de bloques DOS (por ejemplo, discos RAM) no son compatibles. La comunicación entre procesos con otros subsistemas puede tener lugar a través de OLE , DDE y canalizaciones con nombre .
Dado que el modo virtual 8086 no está disponible en procesadores no basados en x86 (más específicamente, MIPS , DEC Alpha y PowerPC ), NTVDM se implementó 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 estaba disponible la emulación 80286. Con Windows NT 4.0 , se agregó la emulación 486 . [24]
Comandos
La siguiente lista de comandos es parte del subsistema MS-DOS de Windows XP. [18]
- ADJUNTAR
- DEPURAR
- EDITAR
- EDLIN
- EXE2BIN
- ABRIR
- FORCEDOS
- GRÁFICOS
- LOADFIX
- CARGA ALTA (LH)
- MEM
- NLSFUNC
- SETVER
- CUOTA
Problema de seguridad
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 , que se señaló como aplicable a la seguridad de todas las versiones x86 del kernel de Windows NT desde 1993. 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 para este problema era desactivar el soporte de aplicaciones de 16 bits, lo que impedía la ejecución de programas más antiguos (aquellos escritos para DOS y Windows 3.1). Las versiones de 64 bits de Windows no se vieron afectadas porque el subsistema NTVDM no está instalado de forma predeterminada. [27] [28] Una vez que se aplicaron los parches de seguridad de Microsoft a los sistemas operativos afectados, el VDM podría reactivarse de forma segura. [nb 2]
Limitaciones
Existe una limitación en el subsistema de 16 bits de Windows XP (pero no en las versiones anteriores de Windows NT) debido al límite elevado por sesión para los objetos GDI que hace que los identificadores GDI se desplacen hacia la derecha en dos bits, al convertirlos de 32 a 16 bits. [29] Como resultado, el identificador real no puede ser mayor de 14 bits y, en consecuencia, las aplicaciones de 16 bits que reciben un identificador mayor que 16384 por el bloqueo del sistema GDI y terminan con un mensaje de error. [29]
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]
El NTVDM no es compatible con las ediciones x86-64 de Windows, [31] incluidos los programas de DOS, [32] porque NTVDM usa el modo de CPU VM86 en lugar de la tabla de descriptor local para habilitar el segmento de 16 bits requerido para el direccionamiento [33] y AArch64 porque Microsoft no lanzó un emulador completo para este conjunto de instrucciones incompatibles como lo hizo en la arquitectura incompatible anterior. Sin embargo, aún se pueden ejecutar utilizando software de virtualización , como VMware Workstation , o instalando NTVDMx64, un puerto no oficial de la implementación emulada más antigua de NTVDM que se proporcionó en NT 4 para plataformas que no son x86. [23] Otra opción es 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 . [34]
En general, VDM y tecnologías similares no ejecutan satisfactoriamente la mayoría de los juegos DOS más antiguos en las computadoras actuales. La emulación solo se proporciona para los periféricos más básicos, a menudo implementados de forma incompleta [ cita requerida ] . Por ejemplo, la emulación de sonido en NTVDM es muy limitada. Las versiones de Windows de la familia NT solo actualizan la pantalla real unas pocas veces por segundo cuando un programa de DOS escribe en ella, y no emulan modos de 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 ciclos de tiempo expirarán prematuramente. Esto hace que un juego se ejecute demasiado rápido o hace que el software ni siquiera note los periféricos de hardware emulados, porque no espera lo suficiente para recibir una respuesta.
Ver también
- Comparación de software de virtualización de plataformas
- DESQview 386 (desde 1988)
- Vino (software)
- DOSBox
- DOSEMU
- Fusionar (software)
- Lista de componentes de Microsoft Windows
- Hipervisor
- Windows en Windows (WoW)
- Máquina virtual (VM)
Notas
- ^ KRNL386.SYS de DR DOS "Panther" tiene cadenas de copyright "1991,1992".
- ^ Un VDM deshabilitado se puede volver a habilitar estableciendo la clave de registro correspondiente en
"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\AppCompat\VDMDisallowed"=dword:00000000
.
Referencias
- ^ a b c d e f g h i j k l m Schulman, Andrew; Brown, Ralf D .; Maxey, David; Michels, Raymond J .; Kyle, Jim (1994) [noviembre de 1993]. DOS sin documentar: una guía del programador para las funciones y estructuras de datos reservadas de MS-DOS, expandida para incluir MS-DOS 6, Novell DOS y Windows 3.1 (2 ed.). Reading, Massachusetts: Addison Wesley . ISBN 0-201-63287-X.(xviii + 856 + vi páginas, disquete de 3,5 pulgadas) Errata: [1] [2]
- ^ a b "DOS-286 concurrente desafía a Unix" . Revista BYTE . 10 (5): 375-377. Mayo de 1985. Archivado desde el original el 14 de septiembre de 2018 . Consultado el 23 de enero de 2017 . [3]
- ^ "DOS 68K 1.2 concurrente - Kit de desarrollo para Motorola VME / 10 - Disco 2" . 6 de agosto de 1986 [8 de abril de 1986] . Consultado el 13 de septiembre de 2018 .(NB. Este paquete también incluye algunos archivos de encabezado de DOS 286 simultáneos , incluido STRUCT.H que menciona explícitamente LOADALL para la "emulación 8086").
- ^ a b Deitel, Harvey M .; Kogan, Michael S. (1992). El diseño de OS / 2 . Addison-Wesley . ISBN 0-201-54889-5.
- ^ Foster, Edward (13 de mayo de 1985). "Super DOS espera el nuevo 80286 - DOS 286 concurrente - retrasado hasta que Intel actualice el chip - ofrece la potencia de Xenix y la compatibilidad con IBM PC" . InfoWorld . InfoWorld Media Group . 7 (19): 17-18. ISSN 0199-6649 . Archivado desde el original el 3 de abril de 2019 . Consultado el 3 de abril de 2019 .
- ^ Foster, Edward (26 de agosto de 1985). "Intel muestra un nuevo chip 80286: el futuro del DOS 286 concurrente de DRI aún no está claro después de la reparación del procesador" . InfoWorld . InfoWorld Media Group . 7 (34): 21. ISSN 0199-6649 . Archivado desde el original el 3 de abril de 2019 . Consultado el 3 de abril de 2019 .
- ^ Suplemento FlexOS para computadoras basadas en Intel iAPX 286 (PDF) . 1.3 (1 ed.). Digital Research, Inc., noviembre de 1986. Archivado desde el original el 3 de abril de 2019 . Consultado el 14 de agosto de 2018 .
- ^ CBR, ed. (15 de enero de 1987). "Digital Research lanza el sistema operativo de fabricación en tiempo real FlexOS 286" . Revisión de negocios informáticos . Archivado desde el original el 18 de enero de 2013 . Consultado el 15 de septiembre de 2018 .
- ^ Calvo, Melissa; Forbes, Jim (10 de febrero de 1986). "IBM para utilizar un sistema operativo DRI" . InfoWorld . Archivado desde el original el 3 de abril de 2019 . Consultado el 6 de septiembre de 2011 .
- ^ "IBM selecciona Concurrent DOS-286 para PC AT sistema minorista" (PDF) . Revista europea . Investigación digital (18): 1. marzo de 1986. Archivado (PDF) desde el original el 3 de abril de 2019 . Consultado el 15 de septiembre de 2018 .
- ^ Weiss, Jiri (16 de febrero de 1987). "DRI para liberar el sistema operativo multiusuario 80386" . InfoWorld . 9 (7): 1, 8. Archivado desde el original el 3 de abril de 2019 . Consultado el 22 de enero de 2017 . [4]
- ^ CBR, ed. (3 de junio de 1987). "Digital Research muestra FlexOS 386 en tiempo real" . Revisión de negocios informáticos . Archivado desde el original el 28 de junio de 2013 . Consultado el 6 de septiembre de 2011 .
- ^ Necasek, Michal (21 de mayo de 2011). "Windows / 386 2.01" . Museo OS / 2. Archivado desde el original el 2 de abril de 2019 . Consultado el 2 de abril de 2019 .
- ^ a b c d e Paul, Matthias R. (30 de julio de 1997) [1 de mayo de 1994]. NWDOS-TIPs - Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds . MPDOSTIP . Release 157 (en alemán) (3 ed.). Archivado desde el original el 3 de noviembre de 2016 . Consultado el 6 de septiembre de 2014 .(NB. NWDOSTIP.TXT es un trabajo completo sobre Novell DOS 7 y OpenDOS 7.01 , que incluye la descripción de muchas características y funciones internas no documentadas. Es parte de la colección MPDOSTIP.ZIP aún más grande del autor, mantenida hasta 2001 y distribuida en muchos sitios en El enlace proporcionado apunta a una versión anterior convertida en HTML del archivo NWDOSTIP.TXT.) mpdostip.zip
- ^ a b OpenDOS Developer's Reference Series - OpenDOS Multitasking API Guide - Guía del programador . Reino Unido: Caldera, Inc. Agosto de 1997. Caldera Part No. 200-DOMG-004. Archivado desde el original el 10 de septiembre de 2017 . Consultado el 2 de noviembre de 2016 .
- ^ a b Guía del usuario de Caldera DR-DOS 7.02 . Caldera, Inc. 1998 [1993, 1997]. Archivado desde el original el 5 de noviembre de 2016 . Consultado el 6 de septiembre de 2014 .
- ^ "Técnicas de configuración de shell de lugar de trabajo OS / 2" (PDF) . Libro rojo de IBM . 1994. págs. 68–80. Archivado desde el original (PDF) el 20 de marzo de 2012 . Consultado el 5 de julio de 2011 .
- ^ a b "Comandos del subsistema MS-DOS" . Microsoft .
- ^ "¿Por qué mis sesiones de DOS y Win-OS / 2 no pueden ver más de 2 GB de espacio libre?" . Consultado el 3 de septiembre de 2020 .
- ^ "Notas de la versión de ArcaOS" . Consultado el 3 de septiembre de 2020 .
- ^ "Capítulo 27 - Compatibilidad y migración de Windows" . Kit de recursos de Windows NT 4.0 . Microsoft . Consultado el 19 de julio de 2017 .
- ^ Schulman, Jerold (4 de diciembre de 2002). "¿Cómo soluciono problemas de programas de MS-DOS que se ejecutan en Windows XP?" . ITPro Windows . Consultado el 19 de julio de 2017 .
- ^ a b "leecher1337 / ntvdmx64" . GitHub . Consultado el 3 de noviembre de 2018 .
- ^ "INFO: Cómo maneja Windows los cálculos de punto flotante" . Soporte de Microsoft . 2006-11-21. Archivado desde el original el 24 de febrero de 2013 . Consultado el 19 de julio de 2017 .
- ^ "Boletín de seguridad de Microsoft MS10-015 - Importante: las vulnerabilidades en el kernel de Windows podrían permitir la elevación de privilegios (977165)" . Security TechCenter . Microsoft . 2010-03-17 . Consultado el 2 de noviembre de 2012 .
- ^ Ormandy, Tavis (19 de enero de 2010). "El controlador de trampas de Microsoft Windows NT #GP permite a los usuarios cambiar la pila del núcleo" . CVE-2010-0232 . Divulgación completa . Consultado el 13 de abril de 2013 .
- ^ Farrell, Nick (20 de enero de 2010). "Fallo de Windows antiguo encontrado después de 17 años" . El indagador . Incisivo . Consultado el 21 de enero de 2010 .
- ^ "Aviso de seguridad de Microsoft (979682): una vulnerabilidad en el kernel de Windows podría permitir la elevación de privilegios" . TechNet . Microsoft . 2010-01-20 . Consultado el 21 de enero de 2010 .
- ^ a b El problema "El subsistema Win 16 no tiene recursos suficientes para continuar funcionando" en Windows XP
- ^ Manual del desarrollador de software de arquitecturas Intel 64 e IA-32 Volúmenes combinados: 1, 2A, 2B, 2C, 3A, 3B y 3C (PDF) (PDF). Intel . Junio de 2013 [1997]. 325462-047US . Consultado el 2 de julio de 2013 .
- ^ Klein, Helge (11 de marzo de 2008). "Windows x64: todos iguales pero muy diferentes, parte 5: NTVDM, servicios, WoW64" . Consultado el 21 de julio de 2013 .
- ^ "Lista de limitaciones en Windows de 64 bits" . Corporación Microsoft. 2007-10-11 . Consultado el 19 de julio de 2017 .
- ^ "modificar_ldt (2)" . Manual del programador de Linux . Consultado el 21 de julio de 2019 .
- ^ "Winevdm" . GitHub . Consultado el 21 de julio de 2019 .
Otras lecturas
- Pietrek, Matt (agosto de 1998). "Bajo el capó" . Revista de sistemas de Microsoft . Archivado desde el original el 13 de julio de 2017 . Consultado el 22 de enero de 2020 , a través de bytepointer.com.
enlaces externos
- Estructura de la máquina virtual de DOS
- Solución de problemas de programas basados en MS-DOS en Windows XP
- Solución de problemas de una aplicación de MS-DOS que bloquea el subsistema NTVDM en Windows XP y Windows Server 2003
- Solución de problemas de programas de comunicación en serie basados en MS-DOS en Windows 2000 y versiones posteriores
- MS-DOS Player para Win32-x64, un emulador de Microsoft MS-DOS , ejecuta muchos programas de línea de comandos de DOS como compiladores u otras herramientas, también empaquetados en un archivo ejecutable independiente.
- vDOS , un emulador de DOS diseñado para ejecutar las aplicaciones de DOS más "serias" (no juegos) en sistemas NT de 64 bits (efectivamente un reemplazo de NTVDM en sistemas modernos).