仿真在 ARM 上的工作原理

仿真使 Arm 上提供了丰富的 Windows 应用生态系统,使用户可以运行他们关心的应用,而无需对应用进行任何修改。 仿真对用户是透明的,是 Windows 的一部分;它不需要安装任何其他组件。

Arm 上的 Windows 11 支持模拟 x86 和 x64 应用和性能,在 Windows 11 24H2 中引入新的仿真器 Prism 时得到了增强。 Arm 上的 Windows 10 还支持仿真,但仅适用于 x86 应用。

Prism

Prism 是 Windows 11 24H2 附带的新模拟器。 相对于 Windows 中包含的以前的仿真技术,它包括显著优化,可提高模拟下应用的性能和较低的 CPU 使用率。

Prism 针对 Qualcomm Snapdragon 处理器进行了优化和优化。 Prism 中的一些性能功能要求仅在 Snapdragon X 系列中提供硬件功能,但 Prism 适用于具有 Windows 11 24H2 的 Arm 设备上支持的所有 Windows 11。

仿真的工作原理

仿真作为软件模拟器工作,实时编译 x86 指令块到 Arm64 指令中,并进行了优化,以提高发出的 Arm64 代码的性能。

某个服务会缓存这些已转换的代码块,以减少指令转换的开销,并允许在代码再次运行时进行优化。 会为每个模块生成缓存,以便其他应用可以在首次启动时使用它们。

对于 x86 应用, WOW64 层的 Windows 允许 x86 代码在 Arm64 版本的 Windows 上运行,就像它允许 x86 代码在 x64 版本的 Windows 上运行一样。 这意味着 Arm 上的 x86 应用受文件系统和注册表重定向的保护。

对于 x64 应用,没有 WOW64 层,也没有单独的 Windows 系统二进制文件的注册表或文件夹。 相反,系统二进制文件编译为 Arm64X PE 文件 ,这些文件可以从同一位置加载到 x64 和 Arm64 进程,而无需文件系统重定向。 这意味着 x64 应用程序可以访问整个 OS(文件系统和注册表)而无需特殊代码。

请注意,仿真仅支持用户模式代码,不支持驱动程序;任何内核模式组件都必须编译为 Arm64。

检测仿真

x86 或 x64 应用不知道它在 Arm 电脑上的 Windows 上运行,除非它调用旨在传达 Arm64 主机知识(如 IsWoW64Process2)的特定 API。 模拟时,查询处理器详细信息的应用(包括元数据或功能功能)将收到与模拟虚拟处理器对应的详细信息。 出于兼容性原因,API GetNativeSystemInfo 还会在模拟下从应用运行时返回模拟处理器详细信息。

对于希望检测操作系统仿真功能的应用,请使用 API GetMachineTypeAttributes

更新以支持应用的 Arm 版本

虽然在 Arm 设备上运行应用在模拟下运行是一个很好的开始位置,但如果重新生成以向应用添加 Arm 支持,应用将受益于本机性能提升和 Arm 支持设备的独特品质。

请参阅 向 Windows 应用 添加 Arm 支持,获取有关如何创建应用的 Arm 版本以及可能涉及哪种优势、挑战和工具的指南,以及创建应用的 Arm 版本(以及任何相关依赖项)的可用支持。