stringtranslate.com

Máquina DOS virtual

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.

Descripción general

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]

Modo de emulación DOS 8086 concurrente

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 chips de procesadores de paso B-1 dejó de funcionar en mayo de 1985 en los procesadores de paso 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.

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 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.

MVDM de OS/2

Desde 1992 , se utilizan máquinas virtuales múltiples de DOS (MVDM) en OS/2 2.0 y 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]

Ventanas NTVDM

COMMAND.COM ejecutándose en NTVDM de Windows 10

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=30hINT 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 en sí es 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. Windows 10 es la última versión de Windows que incluye este componente, ya que Windows 11 dejó de ofrecer compatibilidad con procesadores de 32 bits .

Comandos

La siguiente lista de comandos es parte del subsistema MS-DOS de Windows XP. [18]

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 , 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]

Limitaciones

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.

Ausencia en arquitecturas x64 y AArch64

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 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 . [35]

VinoVDM

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. [36]

Véase también

Notas

  1. ^ KRNL386.SYS de DR DOS "Panther" tiene las cadenas de copyright "1991,1992".
  2. ^ Un VDM deshabilitado se puede volver a habilitar configurando la clave de registro correspondiente nuevamente a "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\AppCompat\VDMDisallowed"=dword:00000000.

Referencias

  1. ^ abcdefghijklm Schulman, Andrew; Brown, Ralf D.; Maxey, David; Michels, Raymond J.; Kyle, Jim (1994) [noviembre de 1993]. DOS no documentado: guía del programador para las funciones y estructuras de datos reservadas de MS-DOS, ampliada para incluir MS-DOS 6, Novell DOS y Windows 3.1 (2.ª edición). Reading, Massachusetts: Addison Wesley . ISBN 0-201-63287-X.(xviii+856+vi páginas, disquete de 3,5 pulgadas) Erratas: [1][2]
  2. ^ ab "Concurrent DOS-286 Challenges 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]
  3. ^ "Concurrent DOS 68K 1.2 - Kit de desarrollo para Motorola VME/10 - Disco 2". 1986-08-06 [1986-04-08] . Consultado el 2018-09-13 .(NB. Este paquete también incluye algunos archivos de encabezado de Concurrent DOS 286 , incluido STRUCT.H que menciona explícitamente LOADALL para la "emulación 8086").
  4. ^ ab Deitel, Harvey M.; Kogan, Michael S. (1992). El diseño de OS/2. Addison-Wesley . ISBN 0-201-54889-5.
  5. ^ Foster, Edward (13 de mayo de 1985). «Super DOS espera el nuevo 80286 – Concurrent DOS 286 – retrasado hasta que Intel actualice el chip – ofrece la potencia de Xenix y compatibilidad con IBM PC». InfoWorld . 7 (19). InfoWorld Media Group : 17–18. ISSN  0199-6649. Archivado desde el original el 3 de abril de 2019. Consultado el 3 de abril de 2019 .
  6. ^ Foster, Edward (26 de agosto de 1985). «Intel muestra un nuevo chip 80286: el futuro del DOS 286 concurrente de DRI sigue sin estar claro después de que se arregló el procesador». InfoWorld . 7 (34). InfoWorld Media Group : 21. ISSN  0199-6649. Archivado desde el original el 3 de abril de 2019 . Consultado el 3 de abril de 2019 .
  7. ^ FlexOS Supplement for Intel iAPX 286-based Computers (PDF) . 1.3 (1 ed.). Digital Research, Inc. Noviembre de 1986. Archivado (PDF) desde el original el 2019-04-03 . Consultado el 2018-08-14 .
  8. ^ CBR, ed. (15 de enero de 1987). «Digital Research lanza el sistema operativo de fabricación en tiempo real FlexOS 286». Computer Business Review . Archivado desde el original el 18 de enero de 2013. Consultado el 15 de septiembre de 2018 .
  9. ^ Calvo, Melissa; Forbes, Jim (1986-02-10). "IBM utilizará un sistema operativo DRI". InfoWorld . Archivado desde el original el 2019-04-03 . Consultado el 2011-09-06 .
  10. ^ "IBM selecciona DOS-286 concurrente para el sistema de venta minorista PC AT" (PDF) . European Review (18). Digital Research : 1. Marzo de 1986. Archivado (PDF) desde el original el 2019-04-03 . Consultado el 2018-09-15 .
  11. ^ Weiss, Jiri (16 de febrero de 1987). «DRI lanzará 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]
  12. ^ CBR, ed. (3 de junio de 1987). "Digital Research muestra FlexOS 386 en tiempo real". Computer Business Review . Archivado desde el original el 28 de junio de 2013. Consultado el 6 de septiembre de 2011 .
  13. ^ Necasek, Michal (21 de mayo de 2011). «Windows/386 2.01». Museo OS/2. Archivado desde el original el 3 de abril de 2019. Consultado el 2 de abril de 2019 .
  14. ^ abcde Paul, Matthias R. (30 de julio de 1997) [1 de mayo de 1994]. NWDOS-TIP: consejos y trucos para Novell DOS 7, con un clic para deshacer detalles, errores y soluciones. Versión 157 (en alemán) (3 ed.). Archivado desde el original el 3 de noviembre de 2016 . Consultado el 6 de septiembre de 2014 . {{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
  15. ^ ab OpenDOS Developer's Reference Series — OpenDOS Multitasking API Guide — Programmer's Guide. Reino Unido: Caldera, Inc., agosto de 1997. Número de pieza de Caldera: 200-DOMG-004. Archivado desde el original el 2017-09-10 . Consultado el 2016-11-02 .
  16. ^ ab 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 .
  17. ^ "OS/2 Workplace Shell Configuration Techniques" (PDF) . IBM redbook. 1994. págs. 68–80. Archivado desde el original (PDF) el 20 de marzo de 2012. Consultado el 5 de julio de 2011 .
  18. ^ ab "Comandos del subsistema MS-DOS". Microsoft .
  19. ^ "¿Por qué mis sesiones DOS y Win-OS/2 no pueden ver más de 2 GB de espacio libre?". Arca Noae, LLC . Archivado desde el original el 2021-07-07 . Consultado el 2020-09-03 .
  20. ^ "Notas de la versión de ArcaOS". 2020-08-31 [2017-05-15]. Archivado desde el original el 2021-03-16 . Consultado el 2020-09-03 .
  21. ^ "Capítulo 27: Compatibilidad y migración de Windows". Kit de recursos de Windows NT 4.0 . Microsoft . 2014-02-20 . Consultado el 2017-07-19 .
  22. ^ Schulman, Jerold (4 de diciembre de 2002). "¿Cómo puedo solucionar problemas con programas MS-DOS que se ejecutan en Windows XP?". ITPro Windows . Consultado el 19 de julio de 2017 .
  23. ^ ab "leecher1337/ntvdmx64". GitHub . Consultado el 3 de noviembre de 2018 .Documentación adicional de Edward Mendelson
  24. ^ "INFO: Cómo maneja Windows los cálculos de punto flotante". Soporte técnico de Microsoft . 2006-11-21. Archivado desde el original el 2013-02-24 . Consultado el 2017-07-19 .
  25. ^ "Boletín de seguridad de Microsoft MS10-015: Importante: vulnerabilidades en el núcleo de Windows podrían permitir la elevación de privilegios (977165)". Security TechCenter . Microsoft . 2010-03-17 . Consultado el 2012-11-02 .
  26. ^ Ormandy, Tavis (19 de enero de 2010). "El controlador de trampas #GP de Microsoft Windows NT permite a los usuarios cambiar la pila del núcleo". CVE-2010-0232 . Divulgación completa . Consultado el 13 de abril de 2013 .
  27. ^ Farrell, Nick (20 de enero de 2010). "Se encontró una falla en Windows después de 17 años". The Inquirer . Incisive. Archivado desde el original el 23 de enero de 2010 . Consultado el 21 de enero de 2010 .{{cite web}}: CS1 maint: URL no apta ( enlace )
  28. ^ "Microsoft Security Advisory (979682): Vulnerabilidad en el núcleo de Windows podría permitir la elevación de privilegios". TechNet . Microsoft . 2010-01-20 . Consultado el 2010-01-21 .
  29. ^ ab El problema "El subsistema Win 16 no tiene suficientes recursos para continuar ejecutándose" en Windows XP
  30. ^ 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 .
  31. ^ Klein, Helge (11 de marzo de 2008). "Windows x64: todo lo mismo pero muy diferente, parte 5: NTVDM, servicios, WoW64" . Consultado el 21 de julio de 2013 .
  32. ^ "Lista de limitaciones en Windows de 64 bits". Microsoft Corporation. 2007-10-11 . Consultado el 2017-07-19 .
  33. ^ "modify_ldt(2)". Manual del programador de Linux . Consultado el 21 de julio de 2019 .
  34. ^ "NTVDMx64 por Leecher1337". www.columbia.edu . Consultado el 25 de marzo de 2023 .
  35. ^ "Winevdm". GitHub . Consultado el 21 de julio de 2019 .Documentación adicional de Edward Mendelson
  36. ^ "Otya128/Winevdm". GitHub .

Lectura adicional

Enlaces externos