Добавить в корзинуПозвонить
Найти в Дзене
Электромозг

Windows на процессоре Эльбрус — такое возможно? Что такое двоичная трансляция?

Разработка первого процессора Эльбрус проходила в середине нулевых. Разработчики понимали, что процессор без достаточного количества ПО обречён. Поэтому уже тогда в архитектуру закладывались аппаратные средства, которые помогали бы осуществлять двоичную трансляцию кодов и запуск приложений в кодах процессора x86.
Оглавление

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

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

С импортозамещением компьютеров особых проблем нет — по оценкам специалистов МЦСТ, их партнёры уже сегодня могут выпускать 300-400 тысяч компьютеров на базе процессоров Эльбрус в год, а при возникновении должного спроса количество таких партнёров возрастёт хоть в разы, хоть на порядки. Гораздо сложнее дела обстоят с программным обеспечением.

Операционной системы с архитектурой своей разработки у нас пока нет, но в коды Эльбруса перекомпилировано несколько сборок Линукса (Debian, Альт, Астра и т.п.), поскольку у них есть открытые исходные коды, есть компилятор для Эльбруса, и ничто не помешало перекомпилировать имеющиеся исходники в коды отечественного процессора.

То же сделано и с некоторыми другими программными проектами под Линукс, имеющими открытый исходный код. Теоретически, под Эльбрус можно перекомпилировать всё, что написано под Линукс и имеет открытые исходные коды. Но, как мы с вами понимаем, не всё ПО имеет открытые исходники и не всё ПО является кроссплатформенным или работает в Линуксе. Часть важных программных продуктов есть только в версии Windows, и написание хоть сколько-нибудь приемлемых аналогов под Эльбрус потребует существенного времени.

Двоичная трансляция кодов

Разработка первого процессора Эльбрус проходила в середине нулевых. Разработчики понимали, что процессор без достаточного количества ПО обречён. Поэтому уже тогда в архитектуру закладывались аппаратные средства, которые помогали бы осуществлять двоичную трансляцию кодов и запуск приложений в кодах процессора x86.

Общая схема работы системы двоичной трансляции
Общая схема работы системы двоичной трансляции

Двоичная трансляция — это технология преобразования машинных кодов из одной системы команд в другую «на лету» без использования исходных текстов программ. Система двоичной трансляции для процессоров Эльбрус включает два компонента:

  1. Транслятор уровня системы (Lintel), позволяющий запускать целые операционные системы, такие как Windows или Linux. В этом случае транслятор забирает все ресурсы машины для запуска единственной операционки.
  2. Транслятор уровня приложений (RTC), позволяющий запускать прикладные программы для x86 Linux в машинных кодах Эльбруса внутри родной ОС Эльбруса.

Первый вариант похож на запуск виртуальной машины с той лишь разницей, что транслятор с гостевой системой занимают весь компьютер монопольно:

Схема работы системы полной двоичной трансляции
Схема работы системы полной двоичной трансляции

Второй вариант похож на запуск контейнера в изолированном окружении chroot:

Схема работы системы двоичной трансляции Linux приложений
Схема работы системы двоичной трансляции Linux приложений
Если проводить параллели с популярным эмулятором Qemu, то Lintel — это аналог qemu-system-x86_64, а RTC — это qemu-x86_64.

Благодаря тому, что в архитектуру Эльбрус изначально заложена аппаратная поддержка трансляции, падение производительности оказывается относительно невелико, где-то около 20%.

Этому способствует также и то, что транслятор адаптивно оптимизирует получающийся машинный код: «холодные» участки, которые встречаются однократно, обрабатываются наиболее простым и быстрым способом, а «горячие», которые выполняются снова и снова, подвергаются раз за разом всё более тщательному анализу и синтезу. В результате скорость работы гостевых программ получается сравнимой со скоростью работы программ, изначально скомпилированных для архитектуры Эльбрус.

Система двоичной трансляции настолько эффективна, что в некоторых случаях гостевые программы могут работать даже быстрее, чем их аналоги в машинных кодах Эльбрус. Речь идёт, например, о языковых интерпретаторах и трансляторах, таких, как среда исполнения Java или .Net (Mono), или как интерпретатор JavaScript в веб-браузере (Firefox). Это объясняется тем, что, к сожалению, оптимизирующий компилятор Эльбруса (lcc) может ещё проигрывать по оптимизации кода наиболее совершенным оптимизирующим компиляторам платформы x86, которые вместе с оптимизаторами двоичной трансляции в итоге пока дают лучший результат.

Запуск отдельных приложений Windows

Есть и такая возможность, хотя Wine ещё не портирован. Как это сделать? Легко! Запускаем Wine в режиме RTC, и уже под Wine запускаем нужное приложение. Кривовато, но способ рабочий.

Следует иметь в виду, что 32-битные приложения можно запускать только 32-битным wine из-под 32-битного гостевого образа и 32-битного исполняемого файла rtc, работающего с ним, а 64-битные — соответственно 64-битным wine из-под 64-битного образа и 64-битного rtc. К сожалению, многие win64-программы имеют win32-инсталляторы, что делает их установку под wine64 нереальной без специальных усилий.

Заключение

Возможность запускать Windows на процессоре Эльбрус — не повод не заниматься разработкой ПО для Эльбруса. Эмуляция — это вынужденная мера, и она не должна стать основой для повсеместной работы на этих компьютерах.

Ставьте лайки, подписывайтесь на мой канал и обязательно оставляйте свои мнения в комментариях. Удачи!