stringtranslate.com

Máquina virtual DOS

Las máquinas DOS virtuales ( VDM ) se refieren a una tecnología que permite ejecutar programas DOS de 16/32 bits y Windows de 16 bits cuando ya existe otro sistema operativo ejecutando y controlando el hardware.

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 capturando todas las operaciones que implican el acceso. hardware protegido y reenviarlos al sistema operativo normal (como excepciones ). Luego, 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 DOS que se ejecuta dentro de un VDM necesita acceder a un periférico, Windows lo permitirá directamente (rara vez) o presentará el programa DOS con 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 concurrente de DOS 8086

En enero de 1985, Digital Research junto con Intel presentaron una vista previa 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 del procesador paso a paso B-1 dejó de funcionar en mayo de 1985 en el C-1 y en los procesadores paso a paso posteriores, poco antes de que Digital Research estuviera a punto de lanzar el producto. Aunque con el paso E-1 Intel comenzó a solucionar 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 del 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 obtuvo la licencia 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 pasó a 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 y multitarea en modo protegido no estaba basada en DOS en sí misma.

El DOS concurrente 386 se desarrolló posteriormente para convertirse en DOS multiusuario (desde 1991) y REAL/32 (desde 1995). FlexOS 386 se convirtió más tarde 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 sólo 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, al que pueden acceder los programas DOS normales.

Los VDM basados ​​en DOS aparecieron con Windows/386 2.01 de Microsoft en septiembre de 1987. [13] Las máquinas DOS virtuales basadas en DOS también estaban presentes en Windows 3.0 , 3.1x y Windows for Workgroups 3.1x ejecutándose en el modo mejorado 386 , así como en Windows 95. , 98 , 98 SE y YO . Una de las características de estas soluciones que se ejecutan sobre DOS es que el diseño de la memoria que se muestra dentro de las máquinas virtuales de DOS son instancias virtuales del sistema DOS y la configuración del controlador de DOS que se ejecuta antes de que se cargue la multitarea, y que las solicitudes que no se pueden manejar en modo protegido se pasan 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 posteriores) 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 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 ", nunca publicados, en 1992/1993.

OS/2 MVDM

Se utilizan múltiples máquinas virtuales DOS (MVDM) 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 OS/2. [17] Mientras que la caja de DOS de OS/2 1.x se basó en DOS 3.0, los MVDM de OS/2 2.x emulan DOS 5.0. [1]

La integración perfecta de aplicaciones Win32s de Windows 3.1 y posteriores en OS/2 es un concepto que en apariencia 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" OS/2 o NT. Las aplicaciones en un "invitado" pueden utilizar canalizaciones con nombre para comunicarse con su "anfitrión". [18]

Debido a una limitación técnica, las aplicaciones de DOS y Windows de 16 bits en 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]

Windows NTVDM

COMMAND.COM ejecutándose en NTVDM de Windows 10

NTVDM fue un componente del 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 en modo de 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 de 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 en modo real de 16 bits son derivaciones simplificadas de sus equivalentes de MS-DOS 5.0 IO.SYS , MSDOS.SYS y COMMAND.COM [1] con todas las suposiciones arraigadas en el sistema de archivos FAT eliminadas y utilizando el archivo no válido. código de operación 0xC4 0xC4 para pasar al NTVDM de 32 bits para manejar las solicitudes. [1] Originalmente, NTDOS informaba una versión de DOS de 30.00 para los programas, [1] pero esto pronto se 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 válido incluso en las versiones más recientes 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

De forma predeterminada, todas las aplicaciones de Windows de 16 bits se ejecutan 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 manera preventiva con respecto al resto del sistema, las aplicaciones de 16 bits que contiene realizan múltiples tareas de manera cooperativa entre sí. Cuando la opción "Ejecutar en un espacio de memoria separado" está marcada en la casilla 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, incluidos otros de 16 bits. poco aplicaciones de Windows. NTVDM emula llamadas y tablas de BIOS, así como el kernel de Windows 3.1 y los resguardos 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 (DPMI) de DOS 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.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 bloques 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 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 , sólo estaba 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 o en las versiones basadas en ARM32, como Windows RT o Windows 10 IoT Core. Windows 10 es la versión final de Windows que incluye este componente, ya que Windows 11 dejó de admitir 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 grave falla de seguridad en la implementación VDM de Windows NT que permitía a los usuarios sin privilegios escalar sus privilegios al nivel de SISTEMA , que se considera 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ó una prueba de concepto de explotación 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 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. [nota 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 límite elevado por sesión para objetos GDI que hace que los controladores 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 proporciona un identificador mayor que 16384 fallan y terminan con un mensaje de error. [29]

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 implementada de manera incompleta [ cita necesaria ] . Por ejemplo, la emulación de sonido en NTVDM es muy limitada. Las versiones de la familia NT de Windows sólo actualizan la pantalla real unas cuantas veces por segundo cuando un programa 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 bucles de sincronización expirarán prematuramente. Esto hace que el juego se ejecute demasiado rápido o hace que el software ni siquiera note los periféricos de hardware emulados, porque no espera una respuesta el tiempo suficiente.

Ausencia en arquitecturas x64 y AArch64

En una CPU x86-64 , el modo virtual 8086 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 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.

Si bien 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 son x86, [23] u OTVDM (WineVDM), un intérprete de Windows de 16 bits basado en MAME. 's emulación i386 y la porción de 16 bits de la popular capa de compatibilidad de Windows, Wine . [35]

VinoVDM

Se incluye un VDM en Wine y CrossOver para Linux y Mac OS X, conocido como WineVDM (también conocido como OTVDM). También se ha portado al propio Windows, ya que las versiones de 64 bits de Windows no incluyen el subsistema NTVDM. [36]

Ver también

Notas

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

Referencias

  1. ^ abcdefghijklm Schulman, Andrés; Marrón, Ralf D .; Maxey, David; Michels, Raymond J.; Kyle, Jim (1994) [noviembre de 1993]. DOS indocumentado: una guía para programadores sobre funciones y estructuras de datos reservadas de MS-DOS, ampliada para incluir MS-DOS 6, Novell DOS y Windows 3.1 (2 ed.). Lectura, Massachusetts: Addison Wesley . ISBN 0-201-63287-X.(xviii+856+vi páginas, disquete de 3,5 pulgadas) Erratas: [1][2]
  2. ^ ab "Desafíos concurrentes de DOS-286 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. ^ "DOS 68K 1.2 simultáneo - Kit de desarrollo para Motorola VME/10 - Disco 2". 1986-08-06 [1986-04-08] . Consultado el 13 de septiembre de 2018 .(NB. Este paquete también incluye algunos archivos de encabezado de Concurrent DOS 286 , incluido STRUCT.H que menciona explícitamente LOADALL para "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 - DOS 286 simultáneo - retrasado hasta que Intel actualice el chip - ofrece la potencia de Xenix y la compatibilidad con PC IBM". InfoMundo . Grupo de medios InfoWorld . 7 (19): 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 el nuevo chip 80286. El futuro del DOS 286 concurrente de DRI aún no está claro después de que se reparó el procesador". InfoMundo . Grupo de medios InfoWorld . 7 (34): 21. ISSN  0199-6649. Archivado desde el original el 3 de abril de 2019 . Consultado el 3 de abril de 2019 .
  7. ^ Suplemento FlexOS para computadoras basadas en Intel iAPX 286 (PDF) . 1.3 (1 ed.). Digital Research, Inc. noviembre de 1986. Archivado (PDF) desde el original el 3 de abril de 2019 . Consultado el 14 de agosto de 2018 .
  8. ^ CBR, ed. (15 de enero de 1987). "Digital Research lanza el sistema operativo de fabricación en tiempo real FlexOS 286". Revisión del negocio informático . Archivado desde el original el 18 de enero de 2013 . Consultado el 15 de septiembre de 2018 .
  9. ^ Calvo, Melisa; Forbes, Jim (10 de febrero de 1986). "IBM utilizará un sistema operativo DRI". InfoMundo . Archivado desde el original el 3 de abril de 2019 . Consultado el 6 de septiembre de 2011 .
  10. ^ "IBM selecciona DOS-286 concurrente para el sistema minorista PC AT" (PDF) . Revista europea . Investigación digital (18): 1 de marzo de 1986. Archivado (PDF) desde el original el 3 de abril de 2019 . Consultado el 15 de septiembre de 2018 .
  11. ^ Weiss, Jiri (16 de febrero de 1987). "DRI lanzará el sistema operativo multiusuario 80386". InfoMundo . 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 Real-Time FlexOS 386". Revisión del negocio informático . 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 completo sobre Novell DOS 7 y OpenDOS 7.01 , que incluye la descripción de muchas características e componentes internos no documentados. Es parte de la colección MPDOSTIP.ZIP aún más grande del autor mantenida hasta 2001 y distribuido en muchos sitios en ese momento. El enlace proporcionado apunta a una versión anterior convertida en HTML del archivo NWDOSTIP.TXT.) mpdostip.zip
  15. ^ ab Serie de referencia para desarrolladores de OpenDOS - Guía de API multitarea de OpenDOS - 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 .
  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. ^ "Técnicas de configuración de OS/2 Workplace Shell" (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 .
  18. ^ ab "Comandos del subsistema MS-DOS". Microsoft .
  19. ^ "¿Por qué mis sesiones de DOS y Win-OS/2 no pueden ver más de 2 GB de espacio libre?". Arca Noae, LLC . Archivado desde el original el 7 de julio de 2021 . Consultado el 3 de septiembre de 2020 .
  20. ^ "Notas de la versión de ArcaOS". 2020-08-31 [2017-05-15]. Archivado desde el original el 16 de marzo de 2021 . Consultado el 3 de septiembre de 2020 .
  21. ^ "Capítulo 27: Migración y compatibilidad de Windows". Kit de recursos de Windows NT 4.0 . Microsoft . 2014-02-20 . Consultado el 19 de julio de 2017 .
  22. ^ Schulman, Jerold (4 de diciembre de 2002). "¿Cómo soluciono problemas de 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 de Microsoft . 2006-11-21. Archivado desde el original el 24 de febrero de 2013 . Consultado el 19 de julio de 2017 .
  25. ^ "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)". Centro técnico de seguridad . Microsoft . 2010-03-17 . Consultado el 2 de noviembre de 2012 .
  26. ^ Ormandía, Tavis (19 de enero de 2010). "El controlador de trampas #GP de Microsoft Windows NT permite a los usuarios cambiar la pila del kernel". CVE-2010-0232 . La divulgación completa . Consultado el 13 de abril de 2013 .
  27. ^ Farrell, Nick (20 de enero de 2010). "Se encontró una antigua falla de Windows después de 17 años". El Indagador . Incisivo. Archivado desde el original el 23 de enero de 2010 . Consultado el 21 de enero de 2010 .{{cite web}}: Mantenimiento CS1: URL no apta ( enlace )
  28. ^ "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 .
  29. ^ ab El problema "El subsistema Win 16 no tiene recursos suficientes 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-047NOSOTROS . Consultado el 2 de julio de 2013 .
  31. ^ 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 .
  32. ^ "Lista de limitaciones en Windows de 64 bits". Corporación Microsoft. 2007-10-11 . Consultado el 19 de julio de 2017 .
  33. ^ "modificar_ldt(2)". Manual del programador de Linux . Consultado el 21 de julio de 2019 .
  34. ^ "NTVDMx64 de Leecher1337". www.columbia.edu . Consultado el 25 de marzo de 2023 .
  35. ^ "Vinovdm". GitHub . Consultado el 21 de julio de 2019 .Documentación adicional de Edward Mendelson
  36. ^ "Otya128/Winevdm". GitHub .

Otras lecturas

enlaces externos