Двоичная трансляция
Двоичная трансляция, она же бинарная компиляция (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. Чтобы в полной мере пользоваться преимуществами аппаратной защиты, положенной в основу архитектуры Эльбрус, необходимо применять программы в машинных кодах Эльбрус.
Другие особенности и ограничения обеих разновидностей транслятора см. в описании этих разновидностей.