Больше всего Microsoft известна как разработчик Windows и, как правило, чаще всего эту ОС упоминают в связке с чипами Intel или AMD. Многие бы удивились, пишет Мэри Бренском на портале ZDNet, узнав, что Windows работает на значительно большем количестве процессорных архитектур — PowerPC, Alpha, Itanium, MIPS, а в 2009 г. Microsoft запустила внутренний проект для запуска Windows 7 на ARM. Он ориентировался на
ARM — самая популярная архитектура на мобильном рынке и прекрасно понимая, куда двигается рынок, в 2010 г. Microsoft выпустила Windows Phone для смартфонов, а в
Причина заключалась в том, что планшеты с Windows RT могли запускать только те приложения, которые были написаны и скомпилированы для ARM при помощи WinRT API. Помощь WinRT API понадобилась, чтобы приспособить Windows для мобильных устройств, повысив заодно её безопасность и время автономной работы. Последнее Microsoft удалось, но сложность подкралась с неожиданной стороны — Windows RT не могла работать со стандартными программами для Windows: ни перекомпилированными, ни в режиме эмуляции. Решение Microsoft отказаться от запуска x86-софта на ARM было вынужденным: при всей своей энергоэкономичности ARM-чипы Tegra были малопроизводительными и не могли «переваривать» софт вне Windows Store, не говоря уже о том, чтобы обеспечить хорошую производительность для эмуляции.
Ситуация изменилась с выходом
Установив Windows 10 S on ARM, пользователь получает возможность инсталлировать x86-приложения в неограниченном количестве, но есть одна существенная деталь: несмотря на то, что и Snapdragon 835 Kryo, и версия Windows —
Windows на Windows on ARM
Внутреннее обустройство Windows — и ядро системы, и функции типа оболочки или Проводник — работают в нативном для ARM 64 коде. Подобным образом работают системные сервисы NTDLL (они требуются для общения приложений с ядром) и системные DLL для хранения, графики, сети и других драйверов устройств, которые также обращаются к ядру на аппаратном уровне минуя слой виртуализации. Универсальные приложения Windows (Universal Windows Platform, UWP), которые размещены в Windows Store, скомпилированы разработчиками в собственный ARM-код, тогда как x86-приложения работают в эмулированной среде поверх уровня абстракции WOW (Windows on Windows).
WOW уже не первый год работает в Windows. Первой вариацией этой системы стала субсистема, которая превращала
Эмулированные приложения не используют виртуализацию наподобие виртуальных машин (которые эффективно работают с кодом в другой ОС, но при этом не различают аппаратного оборудование, на котором они работают), потому что запускаются на эмуляторе CPU. На компьютерах с
Связность логической системы ARM построена таким образом, что многопроцессорные системы могут использовать гораздо более дешевое оборудование для кеширования, но при этом для соблюдения последовательности операций памяти им необходимо создавать «барьеры». Они нужны для отслеживания потоков в многопоточной программе и коррекции правильного значения в переменных, когда те обновляются. Задача эмулятора состоит в следующем: ему приходится управлять барьерами, выдерживая баланс между количеством входных и выходных потоков. Если разгрузка потоков замедляется, то это, в свою очередь, приводит к тому, что потоку присваиваются неправильные значения от переменной и происходит сбой обработки кода.
Для работы с кодом в эмуляторе предусмотрена возможность перекомпиляции кода. Перекомпилирование ускоряется за счет поблочной обработки кода, другими словами, компилятор переводит только логические части кода, которые необходимы программе в конкретный момент времени. Таким образом, он может приостанавливаться по ходу ветвления инструкций, определяя, с какой частью кода ему предстоит дальше работать. Поблочная схема ретрансляции кода позволяет динамично подгружать программу, не требуя эмуляции всего её кода.
Компиляция «на лету»
Особенность эмулятора Windows в том, что вместо интерпретируемой эмуляции в нём применяется гораздо более быстрая динамическая компиляция (dynamic translation) — технология увеличения производительности программных систем путём компиляции байт-кода в машинный код или в другой формат непосредственно во время работы программы. В отличие от статической, динамическая перекомпиляция вооружает эмулятор дополнительными сведениями о времени, которое требуется на перекомпилирование. Иногда для её обозначения употребляется термин JIT-эмуляция (Just-in-time compilation, компиляция «на лету»). Компиляция «на лету» по-прежнему медленнее, чем запуск собственного кода: впервые запущенная на эмуляторе программа будет работать в 50 раз медленнее, но после кэширования кода по скорости работы эмулированный софт практически ничем не будет уступать нативному. Для сравнения: интерпретируемая эмуляция одновременно может обрабатывать не больше одной команды, имитируя каждую инструкцию процессора по очереди.
Нужно заметить, что фактическая производительность того или иного приложения будет зависеть от того, какие ресурсы большую часть времени оно использует: CPU для вычислений, взаимодействует с системными файлами или с кодом ядра, загружает файлы, подключается к сети или требует графические ресурсы. В первом случае приложения будут работать медленнее из-за эмулирования, в остальных — скорость работы ограничивает лишь скорость железа. Очевидно, что приложения, которые генерируют код, довольно медлительные: эмулятору приходится транслировать и код приложения, и «рождаемый» им код.
«Многое также зависит от качества приложения. Проведя замер производительности некоторых приложений, мы обнаружили, что большинство эмулированного софта соответствует ожиданиям пользователей», — сказала генеральный менеджер по разработке Windows Эрин Чепл.
Библиотеки динамической компоновки стали динамичнее
Как уже говорилось, любые методы эмуляции приводят к системным задержкам. Один из способов повышения производительности WOW для
Несмотря на то, что маршрутизацию между 32- и
Для эмуляции DLL на Windows on ARM Microsoft создала новый тип файлов — CHPE (Compiled Hybrid Portable Executable). Они компилируются в ARM
64-разрядность появится в Windows on ARM позже
Для Windows существует огромное количество программ. Несмотря на то, что многие из них работают на
«Эмулирование x86 и без того сложная задача, а эмулирование x64 буквально удваивает объем инженерных работ. Кроме того, Windows поддерживает WOW только для
Известно, что ядро Kryo 280 в Snapdragon 835 имеет 31 регистр общего назначения, к которым можно получить доступ либо в 32-, либо в
Ранее говорилось, что запуск эмулируемого кода для 8 регистров, которые используют набор инструкций x86, проще, чем для архитектуры x64. Для того, чтобы включить для неё эмулирование, компилятору придется производить выделение на высокоуровневых языках, поскольку регистры защищены самой архитектурой системы. Задача усложняется тем, что
«Технически это возможно, но
Таким образом, разработчикам, которые хотят, чтобы их x64-код заработал в Windows на ARM, нужно будет при помощи Desktop Bridge скомпилировать его для x86 и лишь тогда разместить в Windows Store. Нужно иметь в виду, что установщики программ также должны быть перекомпилированы в x86. Отметим, что Microsoft всегда подчеркивала значение
Как избежать эмуляции?
Эмуляция приложений — трудоёмкий процесс. Один из способов избежать её — это создание UWP-приложений, которые запускаются на ПК с Windows ARM изначально. Разработчики могут переработать существующие настольные приложения в UWP, воспользовавшись API WinRT и базовой версией (Core) .NET. Если они применяют такие функции, как WinForms, которым требуется полная версия .NET, тогда код программы придется перевести в x86 и запускать его в эмулированном виде.
Разработчики, которым требуются доступ к бόльшему количеству памяти и
Относительно того, будет ли SDK включать поддержку таких функций, как WinForms, для которых требуется настольная версия .NET, Чепл сообщила, что Microsoft ещё не решила, какие версии .NET будут поддерживаться для ARM64 SDK. Она также поделилась информацией об эксперименте Microsoft с браузером Edge. Это
Пока что самыми популярными Windows-приложениями остаются Internet Explorer и Office, работающие на x86. Плагины и надстройки для них — также в подавляющем большинстве
Одновременно компания посылает другой сигнал: несмотря на возрастающие производительность и возможности процессоров ARM, Microsoft не собирается соревноваться с Intel в «гонке разрядностей». Windows on ARM предназначена для комфортной работы на мобильных устройствах с упором на автономную работу от одного заряда батареи и интегрированную LTE-связь для быстрого Интернета.