Как работает перевод x86 в Windows на Arm?

click fraud protection

Многие приложения Windows были написаны для x86, но могут работать и на процессорах Arm. Вот как это возможно.

Windows всегда была создана для Процессоры x86 от Intel и AMD, но с тех пор, как десять лет назад вышла Windows RT для смартфонов, операционная система постепенно становилась более дружественной к Вооружить процессоры. Сегодня и Windows 10, и Windows 11 предлагают полную поддержку процессоров Arm, но есть одна загвоздка. Хотя сама операционная система прекрасно работает на этих процессорах, большинство приложений не имеют версии, совместимой с Arm. Хотя Windows может работать на чипах Arm, наличие небольшого количества программ может стать проблемой.

Однако у Microsoft есть козырь в рукаве: эмулятор для запуска приложений x86 на машинах на базе Arm. Это ключевой фактор, который придал импульс Windows on Arm с момента выхода переводчика в 2017 году. Вот как работает эмулятор и почему ПК Arm должны его использовать, если они хотят запускать программное обеспечение, созданное для чипов x86.

Эмуляция кода x86 для процессоров Arm в реальном времени

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

К сожалению, производительность эмулируемых приложений будет хуже, чем в коде, разработанном для аппаратного обеспечения. Трудно сказать, сколько производительности вы теряете, запуская эмулируемый код в Windows, поскольку данные тестирования очень скудны, но для сравнения: Переводчик Apple Rosetta 2 (который также переводит приложения x86 в Arm) теряет около 20%. Можно сократить это число, но обычно эмуляция и трансляция приводят к снижению производительности, несмотря ни на что.

Почему приложения x86 не могут работать на Arm без эмуляции

Вам может быть интересно, почему программное обеспечение необходимо писать специально для процессоров x86, Arm и других типов. Все сводится к разница в архитектуре, и в данном случае мы говорим об архитектуре набора команд (ISA). Они представляют собой наиболее фундаментальную конструкцию процессора и определяют, можно ли выполнить что-то простое, например умножение, или что-то сложное, например AVX. Изменение ISA влияет на наиболее фундаментальный способ взаимодействия программного обеспечения с оборудованием, вплоть до базовых единиц и нулей, которые считывает ЦП.

x86 — это ISA процессоров Intel и AMD, которые исторически были единственными процессорами, на которых могла работать Windows. Между тем, Arm в основном используется для смартфонов, и совпадение между программным обеспечением для ПК и телефона очень незначительно. Естественно, большинство программ созданы либо для x86, либо для Arm, а для Windows на Arm это была огромная проблема, потому что перевод не вышел в 2020 году, а Windows RT (первая версия Windows с поддержкой Arm) вышла в 2012.

Прошло около десяти лет с тех пор, как Windows начала поддерживать Arm, так где же все нативные приложения? Основная проблема заключается в том, что переписывание программного обеспечения для другой ISA требует времени и опыта, особенно если разработчики хотят сделать это хорошо. Разработчики, которые не уделяют должного внимания переносу приложения с одной ISA на другую, могут привести к сбоям и ошибкам. Отличным примером является Photoshop для Windows на Arm. Он изначально работает на Windows на Arm, еще в нашем обзоре Lenovo Thinkpad X13s, мы обнаружили несколько ошибок и множество предупреждений о том, что OpenCL и OpenGL не поддерживаются. В сочетании с гораздо меньшей базой пользователей, использующих Arm в Windows, у разработчиков меньше стимулов для беспокойства.

Итак, когда разработчики не могут или не хотят выделять ресурсы на создание собственного программного обеспечения, альтернативой является эмуляция. Хотя перевод приложений x86 для Windows на Arm не идеален, впечатляет то, что он вообще работает, и иногда из-за потери производительности стоит знать, что приложение будет работать так, как ожидалось. По крайней мере, до тех пор, пока Windows on Arm не достигнет точки, когда разработчики больше не смогут ее игнорировать, перевод и эмуляция дадут столь необходимый импульс ее аппаратно-программной экосистеме.