Compartir a través de


Funcionamiento de la emulación en Arm

La emulación hace que el ecosistema enriquecido de aplicaciones de Windows esté disponible en Arm, lo que permite a los usuarios ejecutar las aplicaciones que les interesan sin modificaciones en la aplicación. La emulación es transparente para el usuario y forma parte de Windows; no requiere que se instalen componentes adicionales.

Windows 11 en Arm admite la emulación de aplicaciones x86 y x64 y rendimiento se ha mejorado con la introducción del nuevo emulador Prism en Windows 11 24H2. Windows 10 en Arm también admite emulación, pero solo para aplicaciones x86.

Prism

Prism es el nuevo emulador incluido con Windows 11 24H2. En relación con la tecnología de emulación anterior incluida en Windows, incluye optimizaciones significativas que mejoran el rendimiento y reducen el uso de CPU de las aplicaciones bajo emulación.

Prism está optimizado y optimizado específicamente para procesadores Qualcomm Desktop. Algunas características de rendimiento dentro de Prism requieren características de hardware solo disponibles en la serie Intune X, pero Prism está disponible para todos los windows 11 compatibles en dispositivos Arm con Windows 11 24H2.

Funcionamiento de la emulación

La emulación funciona como un simulador de software, compilando bloques Just-In-Time de instrucciones x86 en instrucciones arm64 con optimizaciones para mejorar el rendimiento del código Arm64 emitido.

Un servicio almacena en caché estos bloques de código traducidos para reducir la sobrecarga de la traducción de instrucciones y permite la optimización cuando el código se ejecuta de nuevo. Las memorias caché se generan para cada módulo para que otras aplicaciones puedan usarlas en el primer inicio.

Para las aplicaciones x86, la capa WOW64 de Windows permite que el código x86 se ejecute en la versión Arm64 de Windows, al igual que permite que el código x86 se ejecute en la versión x64 de Windows. Esto significa que las aplicaciones x86 de Arm están protegidas con el sistema de archivos y la redirección del registro.

En el caso de las aplicaciones x64, no hay ninguna capa WOW64 y no hay ningún registro o carpeta independientes de archivos binarios del sistema de Windows. En su lugar, los archivos binarios del sistema se compilan como archivos ARM64X PE que se pueden cargar en procesos x64 y Arm64 desde la misma ubicación sin necesidad de redireccionamiento del sistema de archivos. Esto significa que las aplicaciones x64 pueden acceder a todo el sistema operativo, tanto el sistema de archivos como el registro, sin necesidad de código especial.

Tenga en cuenta que la emulación solo admite código de modo de usuario y no admite controladores; los componentes del modo kernel deben compilarse como Arm64.

Detección de emulación

Una aplicación x86 o x64 no sabrá que se ejecuta en un equipo Windows en Arm, a menos que llame a API específicas diseñadas para transmitir conocimiento del host arm64, como IsWoW64Process2. Las aplicaciones bajo emulación que consultan los detalles del procesador, incluidas las funcionalidades de metadatos o características, recibirán detalles correspondientes al procesador virtual emulado. Por motivos de compatibilidad, la API GetNativeSystemInfo también devolverá detalles de procesador emulados cuando se ejecute desde una aplicación bajo emulación.

Para las aplicaciones que buscan detectar las funcionalidades de emulación del sistema operativo, use la API GetMachineTypeAttributes.

Actualización para admitir una versión de Arm de la aplicación

Aunque la aplicación se ejecuta bajo emulación en dispositivos Arm es un excelente lugar para empezar, la aplicación se beneficiará de las mejoras de rendimiento nativas y las cualidades únicas de los dispositivos con arm si vuelve a generar para agregar compatibilidad con Arm a la aplicación.

Consulta Agregar compatibilidad con Arm a tu aplicación de Windows para obtener instrucciones sobre cómo crear una versión de Arm de tus aplicaciones y qué tipo de ventajas, desafíos y herramientas pueden estar implicados, así como compatibilidad disponible para crear una versión arm de la aplicación (y cualquier dependencia relacionada).