Как работает эмуляция в Arm

Эмуляция делает богатую экосистему приложений Windows доступной в Arm, поэтому вы можете запускать приложения без каких-либо изменений в приложении. Эмуляция является прозрачной для вас и является частью Windows; Он не требует установки дополнительных компонентов.

Windows 11 в Arm поддерживает эмуляцию приложений x86 и x64. Производительность улучшена благодаря внедрению нового эмулятора Prism в Windows 11 24H2. Windows 10 в Arm также поддерживает эмуляцию, но только для приложений x86.

Prism;

Prism — это новый эмулятор, включенный в Windows 11 24H2. По сравнению с предыдущими технологиями эмуляции, включенными в Windows, она включает значительные оптимизации, которые повышают производительность и снижение использования ЦП приложений при эмуляции.

Prism оптимизирован и настроен специально для процессоров Qualcomm Snapdl. Для некоторых функций производительности в Prism требуются аппаратные функции, доступные только в серии Snapscsi X, но Prism доступен для всех поддерживаемых устройств Windows 11 на устройствах Arm с Windows 11 24H2.

Как работает эмуляция

Эмуляция работает в качестве программного симулятора, jit-компиляции блоков инструкций x86 в инструкции Arm64 с оптимизацией для повышения производительности сформированного кода Arm64.

Служба кэширует эти переведенные блоки кода, чтобы сократить затраты на перевод инструкций и разрешить оптимизацию при повторном запуске кода. Кэши создаются для каждого модуля, чтобы другие приложения могли использовать их при первом запуске.

Для приложений x86 уровень WOW64 в Windows позволяет запускать код x86 в Windows версии Arm64 так же, как и код x86 для работы в x64 версии Windows. Это означает, что приложения x86 в Arm защищены с помощью файловой системы и перенаправления реестра.

Для приложений x64 нет уровня WOW64 и нет отдельного реестра или папки системных двоичных файлов Windows. Вместо этого системные двоичные файлы компилируются как файлы PE Arm64X, которые можно загрузить в процессы x64 и Arm64 из одного расположения без необходимости перенаправления файловой системы. Это означает, что приложения x64 могут получить доступ ко всей ОПЕРАЦИОННОй системе, файловой системе и реестру без необходимости в специальном коде.

Обратите внимание, что эмуляция поддерживает только код пользовательского режима и не поддерживает драйверы. Все компоненты режима ядра должны быть скомпилированы как Arm64.

Обнаружение эмуляции

Приложение x86 или x64 не знает, что оно работает на компьютере с Windows на Arm, если оно не вызывает определенные API, предназначенные для передачи информации о хосте Arm64, таких как IsWoW64Process2. Приложения под эмуляцией, запрашивающие сведения о обработчике, включая метаданные или возможности функций, получают сведения, соответствующие эмулированному виртуальному процессору. По соображениям совместимости API GetNativeSystemInfo также возвращает эмулированные сведения о процессоре при выполнении из приложения под эмуляцией.

Для приложений, желающих обнаружить возможности эмуляции операционной системы, используйте API GetMachineTypeAttributes.

Обновление для поддержки версии Arm приложения

Хотя запуск приложения в режиме эмуляции на устройствах Arm — хороший способ начать, ваше приложение получит прирост производительности и уникальные качества устройств на базе Arm, если его модифицировать для поддержки Arm.

Инструкции по созданию версии Arm приложений и о преимуществах, проблемах и вариантах инструментов см. в статье "Добавление поддержки Arm" в приложение Windows. В этой статье также рассматривается доступная поддержка разработки версии приложения для Arm, а также связанных с этим зависимостей.