10 мая началась ежегодная конференция разработчиков Microsoft Build. Среди прочего компания рассказала на ней о процессе создания системы Windows 10 на ARM. Были показаны интересные демонстрационные ролики, которые помогут разработчикам универсальных приложений подготовиться к появлению Windows 10 на ARM. Также было рассказано о том, как работает технология эмуляции приложений x86.
В ближайшие четыре года больше миллиарда человек подключатся к интернету в первый раз. Поможет им в этом сотовая связь. Её скорость постоянно увеличивается, доступ становится дешевле. Уже сейчас Microsoft предлагает множество устройств с поддержкой стандартов связи Wi-Fi и LTE. Пользователи ожидают наличия связи в любом месте, будь то общественный транспорт, собственная квартира, ресторан или школа.
При наличии такого спроса перед платформой Windows открываются новые возможности. На ней необходимо выпускать устройства с поддержкой сотовой связи и с хорошей продолжительностью автономной работы. Именно для этого создаётся Windows 10 на ARM. Устройства на этой операционной системе будут работать на процессорах Qualcomm Snapdragon, в которые встроен модем и которые расходуют минимум энергии, что повышает продолжительность работы.
Windows 10 на ARM предложит привычный пользователям рабочий стол. Здесь будут браузер Edge, цифровой ассистент Cortana, функция авторизации Windows Hello и Windows Ink. Здесь же будут все привычные программы, универсальные приложения из магазина Windows Store, в том числе и на архитектуре Win32.
Последнее нужно отметить особо: Windows 10 на ARM будет поддерживать все существующие приложения на архитектуре x86. Произойдёт это благодаря эмуляции. Для примера была показана работа программы PowerPoint на Windows 10 на ARM. Использовалась инженерная версия устройства производства компании Qualcomm. Именно такие устройства Microsoft применяет для разработки системы Windows на архитектуре х64. Естественно, в продажу такие устройства не поступают. Пользователи получат традиционные ноутбуки, устройства два в одном и другие форматы до конца нынешнего года.
Также была продемонстрирована работа пакета приложений Office в Windows 10 на ARM. Использовался Office 2016 и программа PowerPoint. Открыв системные настройки, можно увидеть её свойства. Там указана 64-разрядная система Windows 10 Pro на архитектуре ARM, устройство работает на процессоре Snapdragon 835, объём оперативной памяти 4 Гб. Поскольку это полноценная версия системы Pro, устройство можно подключить к домену.
Если открыть диспетчер задач в разделе Производительность, здесь будут отображаться восемь вычислительных ядер процессора Snapdragon 835, четыре больших, четыре поменьше. Следом был запущен браузер Edge, он работает быстро и плавно.
При работе на Windows 10 взаимодействие с системой не ограничивается одним только рабочим столом. Ещё есть приложения и устройства. Windows 10 на ARM обеспечит обширную поддержку периферийных устройств через USB, все необходимые драйверы будут предустановлены в системе. Чтобы продемонстрировать это, была подключена USB-камера. После подключения она сразу же начинает работать без необходимости настраивать её. Остаётся только запустить приложение камеры и снимать видео и фотографии.
Всё вышеописанное было нативной работой системы. Рассмотрим теперь эмуляцию приложений. Например, вам присылают несколько файлов. Они находятся в архиве, который создан при помощи программы вроде 7-zip. Чтобы распаковать файлы, нужно найти в интернете эту программу, скачать и установить на компьютер. Всё то же самое нужно делать и на Windows 10 на ARM. Процесс установки ничем не отличается от существующего сейчас на обычных версиях Windows. Используется обычный установочный файл без всяких изменений, скаченный из интернета.
Ниже поговорим о том, как именно работает эмулятор приложений x86. Было показано несколько диаграмм, используется нативный процесс х64. Windows, браузер Edge, оболочка, все они являются примерами нативных процессов. В библиотеках операционной системы содержатся файлы .dll, также есть нечто под названием NTDLL, посредством которого приложения общаются с ядром операционной системы. Ещё следует упомянуть настоящее ядро Windows и драйверы. Они общаются с устройствами, такими как графический чип, сетевые устройства и другие, на их собственных скоростях. Нативные процессы используют все возможности ARM64.
При эмуляции процесс работает поверх уровня Windows на Windows (WOW). Похожая инфраструктура имеется на компьютерах на архитектуре х64 для запуска приложений x86. В этих приложениях есть код x86, исполняемые файлы и файлы системы. Доступна версия файлов x86 и вторая часть процесса, где используется нативный код. Используется эмулятор центрального процессора, который в обычном 64-разрядном компьютере исполняет 32-разрядный код. Вместо этого здесь используется Dynamic Binary Translator, который смотрит на куски кода и в среде исполнения преобразует их в блоки кода x64. Они сохраняется в памяти или на диске для дальнейшего использования. Системные вызовы производятся через нативную систему NTDLL, все они общаются с ядром. Взаимодействие с ядром и устройствами происходит на привычных для устройств скоростях.
Отдельно стоит поговорить об уровне абстракции WOW и о том, почему система x86 запускается с эмуляцией DOL. На это есть пара причин. Приложение общается с двоичным кодом при помощи 32-разрядных типов данных и 32-разрядных стандартов оформления кода. Если преобразовывать нативные файлы DLL, придётся менять все интерфейсы программирования, постоянно менять типы данных между 32- и 64-разрядными и выполнять сериализацию стандартов вызовов.
Сериализацию стандартов вызовов можно осуществлять автоматически, но сериализация типов данных является сложной задачей. В результате в Microsoft решили выполнять сериализацию типов данных только на этом уровне.
Это выгодный компромисс, благодаря которому аппаратное обеспечение работает на нативных скоростях. Архитектура х86 в данном случае не играет роли. Когда речь идёт о динамической двоичной трансляции, происходит перерасход ресурсов при обработке всего этого кода. По этой причине совместно с группой разработчиков компилятора велась работа на технологией под названием CHPE (скомпилированные гибридные портативные исполняемые файлы).
Они генерируются из того же кода, который есть в системе, поэтому используются стандарты вызовов ARM64, работа ведётся с 32-разрядными типами данных. Была выполнена автоматизация стандартов вызовов, это позволяет работать с 32-разрядными типами данных. Таким образом, преобразование типов данных происходит только на этом уровне. Чаще всего работа ведётся на нативных скоростях. Перед нами идеально установленный двоичный код, который можно использовать в процессе. В зависимости от времени, потраченного между кодом приложений, системным кодом и ядром, можно получить близкую к нативной производительность.
После этого краткого анализа уровня эмуляции x86 посмотрим на универсальные приложения. Приложения магазина открываются почти мгновенно. Был выполнен поиск популярного приложения iHeartRadio, оно было установлено и запущено. Программа работает быстро, страницы прокручиваются плавно. Перед нами образец работы универсального приложения на архитектуре ARM. Повторим, что приложения x86 эмулируются, но универсальные приложения запускаются нативно. Чтобы увидеть это, достаточно открыть диспетчер задач. Там показывается, что приложение iHeartRadio 32-разрядное на ARM. В программу не нужно вносить никаких изменений, она работает в своём нынешнем состоянии.
Точно также нативно работает сам магазин приложений, что тоже можно увидеть в диспетчере задач в разделе свойств. Как видим, универсальные приложения оправдывают своё название. Для их работы на разных архитектурах не нужно вносить в код никаких изменений. В будущем появится стандарт Windows Standart ARM, разработчикам приложений достаточно будет выставить его в магазин.