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

Материал из Базы знаний сообщества разработчиков Эльбрус
Перейти к навигации Перейти к поиску
Короткий адрес этой страницы: bincomp

Двоичная трансляция, она же бинарная компиляция (bincomp) или рекомпиляция — технология преобразования машинных кодов из одной системы команд в другую, как то из системы команд x86 (x86-64) в систему команд Эльбрус (e2k), без использования исходных текстов программы и в реальном времени, то есть «на лету» — прозрачно с точки зрения пользователя.

Для запуска программ в машинных кодах x86 (x86-64) на компьютерах архитектуры Эльбрус разработана система двоичной трансляции, включающая два компонента:

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

Первый вариант похож на запуск виртуальной машины (с той лишь разницей, что транслятор с гостевой системой занимают весь компьютер монопольно, или всю виртуальную машину, если Lintel запущен внутри неё), а второй вариант — на запуск контейнера в изолированном окружении chroot. Если проводить параллели с популярным эмулятором Qemu, то Lintel — это аналог qemu-system-x86_64, а RTC — это qemu-x86_64 (он же qemu-user-x86_64, он же qemu-linux-x86_64).

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

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

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

Другие особенности и ограничения обеих разновидностей транслятора см. в описании этих разновидностей.