Por qué es eso:
- un SO de 32 bits, cuando está instalado en una CPU de 64 bits, puede ejecutar aplicaciones antiguas de 16 bits,
- pero si instala un sistema operativo de 64 bits, ¿no puede ejecutar esas aplicaciones directamente y necesita algún tipo de emulación (que no siempre funciona perfectamente)?
Para ser más específico, tengo un procesador de 64 bits (Intel Core 2 Duo). Cuando tenía instalado Windows XP y Windows 7 (ambos de 32 bits), podían ejecutar aplicaciones antiguas de DOS y Windows de 616 bits.
Ahora he instalado la edición de 64 bits de Windows 7. ¿Por qué ya no puede ejecutar esas mismas aplicaciones?
Respuestas:
Según tengo entendido, es porque cuando se ejecuta en modo largo (x64 nativo), la CPU en sí no admite entrar en modo de 16 bits. Ver Wikipedia . Entonces, para admitir el modo de 16 bits, el NTVDM (la capa de 16 bits en Windows) tendría que emular completamente un procesador de 16 bits.
Supongo que pesaron volver a implementar una capa de emulación frente al uso de software de virtualización ya existente (VirtualPC, VirtualBox) para manejar esto, y se decidió cortar el VDM.
fuente
Debido a que los identificadores de 64 bits tienen 32 bits significativos :
En Windows, los programas pasan "identificadores" al sistema operativo y viceversa (que son números que el sistema operativo utiliza para identificar de forma exclusiva un recurso en particular, como una ventana).
Para admitir programas de 16 bits, Windows de 32 bits solo genera identificadores que tienen 16 bits significativos: el sistema operativo ignora los 16 bits superiores (aunque los programas no se aprovechen de este hecho). Por lo tanto, ningún programa puede interactuar con más de 2 16 objetos, lo que en realidad es bastante bajo.
Sin embargo, para mejorar esto, Windows de 64 bits aumentó el número de bits significativos en un identificador a 32. Pero ahora eso significa que los identificadores no pueden pasarse a programas de 16 bits sin pérdida de información. Por lo tanto, los programas de 16 bits no se pueden ejecutar en Windows de 64 bits.
fuente
EnumWindows
y hay más de 2 ^ 16 ventanas en el sistema?Para Windows, se debe a que las versiones x86 del sistema operativo incluyen una emulación de 16 bits que les permite ejecutar esos procesos DOS más antiguos. En las versiones x64, ya tienen que emular la ejecución x86 (lo llaman WoW64) para permitir que se ejecuten procesos de 32 bits, y supongo que usar Wow64 para emular aún más el emulador de 16 bits causó demasiados problemas.
Se ejecutarán un puñado de procesos reconocidos de 16 bits porque la emulación está codificada para manejarlos, pero el resto no funciona porque la emulación no está incluida en x64.
Consulte "Sin código de 16 bits" en el artículo de MSKB: http://support.microsoft.com/kb/282423
fuente
Corríjame si me equivoco, pero a mi entender, es solo debido a un problema específico de Windows que NTVDM está utilizando el modo virtual 8086. El modo de compatibilidad en procesadores x64 (que se ejecuta en modo largo) admite el modo protegido "limpio" completo, 16 y 32 bits de lo que he encontrado aquí: http://en.wikipedia.org/wiki/Long_mode , pero no algunos de los 386 adiciones, como el modo virtual 8086. Por lo tanto, no es compatible porque probablemente no valga la pena que Microsoft reprograme NTVDM, lo que probablemente requerirá agregar más emulación porque algunas aplicaciones de modo protegido de 16 bits pueden usar 8086 virtual, incluso si la mayoría no lo hace. Supongo que con suficiente mano de obra es posible escribir algo más rápido que dosbox ejecutándose en modo largo, ya que hay soporte de hardware para aplicaciones de 16 bits.
fuente
La situación es diferente para las aplicaciones Dos y las aplicaciones de Windows de 16 bits.
Para las aplicaciones Dos, el problema es que el modo virtual 8086 no está disponible en modo largo. Esta es una limitación de la arquitectura de la CPU.
Para aplicaciones de Windows de 16 bits (que se ejecutan en modo protegido de 16 bits), la razón es que MS no estaba preparada para hacer el trabajo de implementar una capa de compatibilidad adecuada. Divertidamente Wine es perfectamente capaz de ejecutar aplicaciones de Windows de 16 bits en Linux de 64 bits.
fuente
Creo que la razón más probable es que solo un pequeño porcentaje de propietarios de PC realmente quiere poder ejecutar aplicaciones antiguas de 16 bits en su nuevo hardware de 64 bits. Microsoft probablemente pensó que no valía la pena mientras seguía admitiendo aplicaciones de 16 bits.
fuente