Двоичный перевод - Binary translation

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

Двумя основными типами являются статическая и динамическая двоичная трансляция. Перевод может выполняться аппаратно (например, схемами в ЦПУ ) или в программном обеспечении (например, в механизмах времени выполнения, статическом рекомпиляторе, эмуляторах).

Мотивация

Двоичная трансляция мотивируется отсутствием двоичного кода для целевой платформы, отсутствием исходного кода для компиляции для целевой платформы или иными трудностями при компиляции исходного кода для целевой платформы.

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

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

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

Один такой статический двоичный транслятор использует универсальный супероптимизатор дверной глазок технология (разработанная Сорав Бансал, и Алекс Айкен из Стэндфордский Университет ) для выполнения эффективного преобразования между возможно большим количеством исходных и целевых пар со значительно низкими затратами на разработку и высокой производительностью целевого двоичного файла. В экспериментах по преобразованию PowerPC в x86 некоторые двоичные файлы даже превосходили собственные версии, но в среднем они работали со скоростью две трети от исходной скорости.

Примеры статических двоичных переводов

Honeywell предоставил программу под названием Освободитель для них Honeywell 200 серия компьютеров; он мог переводить программы для IBM 1400 серии компьютеров в программы для серии Honeywell 200.[1]

В 2014 г. ARM архитектура версия 1998 года видео игра Стар Крафт был сгенерирован статической перекомпиляцией и дополнительными разобрать механизм с целью понять, как это работает оригинала x86 версия.[2][3]В Пандора портативное сообщество было способно разработать необходимые инструменты[4] самостоятельно и несколько раз успешно выполняли такие переводы.[5][6]

Например, успешный переход от x86 кx64 статическая перекомпиляция была создана для процедурный генератор рельефа видеоигры Кубический мир в 2014.[7]

Другой пример - РЭШ -к-x86 статически перекомпилированная версия видеоигры Super Mario Bros. который был создан при использовании LLVM в 2013.[8]

В 2004 году Скотт Эллиотт и Филипп Р. Хатчинсон в Nintendo разработал инструмент для генерации кода "C" из Геймбой двоичный файл, который затем может быть скомпилирован для новой платформы и связан с аппаратной библиотекой для использования в развлекательных системах авиакомпаний.[9]

В 1995 году Норман Рэмси в Bell Communications Research и Мэри Ф. Фернандес из Департамента компьютерных наук, Университет Принстона развитый Инструментарий машинного кода Нью-Джерси в котором были базовые инструменты для статического перевода сборки.[10]

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

Динамическая двоичная трансляция (DBT) рассматривает короткую последовательность кода - обычно порядка одного базовый блок - затем переводит его и кэширует полученную последовательность. Код переводится только тогда, когда он обнаруживается и когда это возможно, а инструкции ветвления указываются на уже переведенный и сохраненный код (мемоизация ).

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

Более продвинутые динамические переводчики используют динамическая перекомпиляция где переведенный код приспособлен для определения того, какие части выполняются большое количество раз, и эти части оптимизированный агрессивно. Эта техника напоминает JIT-компилятор, и на самом деле такие компиляторы (например, солнце с HotSpot технологии) можно рассматривать как динамические трансляторы из виртуального набора команд ( байт-код ) к настоящему.

Примеры динамических двоичных переводов в программном обеспечении

  • Компьютер Apple реализован динамический перевод эмулятор за M68K код в их PowerPC линия Макинтоши,[11] который достиг очень высокого уровня надежности, производительности и совместимости (см. Эмулятор Mac 68K ). Это позволило Apple вывести машины на рынок только с частично родным Операционная система, и конечные пользователи могут принять новую, более быструю архитектуру, не рискуя вложениями в программное обеспечение. Отчасти из-за того, что эмулятор был настолько успешным, многие части операционной системы оставались эмулированными. Полный переход на собственный PowerPC Операционная система (ОС) не выпускалась до выпуска Mac OS X (10.0) в 2001 году. (Mac OS X "Классический "среда выполнения продолжала предлагать эту возможность эмуляции на PowerPC Mac, пока Mac OS X 10.5.)
  • Mac OS X 10.4.4 для компьютеров Mac на базе Intel представила Розетта уровень динамической трансляции для облегчения перехода Apple с оборудования на базе PPC на x86. Разработано для Apple компанией Transitive Corporation, программное обеспечение Rosetta является реализацией Transitive's QuickTransit решение.
  • QuickTransit в течение всего срока службы продукта также предоставляла SPARCx86, x86 →PowerPC и MIPSItanium 2 переводческая поддержка.
  • DEC добились аналогичных успехов со своими инструментами перевода, чтобы помочь пользователям перейти с CISC VAX архитектура к Альфа RISC архитектура.[нужна цитата ]
  • HP ARIES (Automatic Re-translation and Integrated Environment Simulation) - программное обеспечение[12] система динамической двоичной трансляции, которая сочетает в себе быструю интерпретацию кода с двухфазной динамической трансляцией для прозрачного и точного выполнения HP 9000 HP-UX приложения на HP-UX 11i для Серверы HPE Integrity.[13] Быстрый интерпретатор ARIES эмулирует полный набор непривилегированных PA-RISC инструкции без вмешательства пользователя. Во время интерпретации он отслеживает схему выполнения приложения и переводит только часто выполняемый код в собственный Itanium код во время выполнения. ARIES реализует двухэтапную динамическую трансляцию, метод, при котором транслируемый код на первом этапе собирает информацию профиля времени выполнения, которая используется во время второго этапа трансляции для дальнейшей оптимизации переведенного кода. ARIES хранит динамически транслируемый код в буфере памяти, называемом кешем кода. Дальнейшие ссылки на переведенные базовые блоки выполняются непосредственно в кэше кода и не требуют дополнительной интерпретации или перевода. Цели транслированных блоков кода исправлены, чтобы гарантировать, что выполнение большую часть времени происходит в кэше кода. В конце эмуляции ARIES удаляет весь переведенный код, не изменяя исходное приложение. Механизм эмуляции ARIES также реализует эмуляцию среды, которая имитирует HP 9000 HP-UX системные вызовы приложения, доставка сигналов, управление исключениями, управление потоками, эмуляция HP GDB для отладки и создания файла ядра для приложения.
  • DEC создал FX! 32 двоичный транслятор для преобразования x86 приложения к приложениям Alpha.[11]
  • Sun Microsystems ' Ваби программное обеспечение включало динамический перевод инструкций x86 в SPARC.
  • В январе 2000 г. Transmeta Корпорация анонсировала новый дизайн процессора под названием Крузо.[14][15] От Часто задаваемые вопросы[16] на своем веб-сайте,

    Интеллектуальный микропроцессор состоит из аппаратного обеспечения VLIW ядро в качестве его движка и программный уровень под названием Code Morphing software. Программное обеспечение Code Morphing действует как оболочка […] морфинга или перевода x86 инструкции к родным инструкциям Crusoe. Кроме того, программа Code Morphing содержит динамический компилятор и оптимизатор кода […] В результате повышается производительность при минимальной мощности. […] [Это] позволяет Transmeta отдельно развивать аппаратное обеспечение VLIW и программное обеспечение Code Morphing, не затрагивая огромную базу программных приложений.

  • Intel Корпорация разработала и внедрила Уровень выполнения IA-32 - динамический двоичный транслятор, предназначенный для поддержки приложений IA-32 на Itanium -системы, которая была включена в Microsoft Windows Server за Itanium архитектура, а также в нескольких вариантах Linux, включая Красная шляпа и Suse. Это позволило приложениям IA-32 работать быстрее, чем при использовании собственного режима IA-32 на процессорах Itanium.
  • Дельфин (эмулятор для GameCube /Wii ) выполняет JIT-перекомпиляцию кода PowerPC в x86 и AArch64.

Примеры динамических двоичных переводов в аппаратном обеспечении

  • процессоры Intel x86 с Pentium Pro перевести сложный CISC x86 инструкции для большего RISC -подобный внутренний микрооперации.
  • Nvidia Тегра K1 Denver переводит РУКА инструкции через медленный аппаратный декодер к инструкциям собственного микрокода и использует программный двоичный транслятор для горячего кода.[нужна цитата ]

Смотрите также

Рекомендации

  1. ^ Краткое описание Honeywell Series 200 (PDF). Honeywell. Февраль 1966 г. с. 11. Например, репертуар команд процессоров Series 200 достаточно похож на таковой в нескольких других системах обработки, а именно, в серии IBM 1400, чтобы обеспечить возможность автоматического одноразового перевода программ, написанных для этих конкурирующих систем, в форму, подходящую для выполнения. на высокопроизводительных системах Series 200.
  2. ^ Штайнлехнер, Питер (10 марта 2014 г.). "Starcraft für ARM-Handheld kompiliert" (на немецком). golem.de. Получено 2014-03-25.
  3. ^ notaz (04.03.2014). "Стар Крафт". repo.openpandora.org. Получено 2014-03-26.
  4. ^ notaz (01.03.2014). "ia32rtools /". GitHub. Получено 2015-01-09.
  5. ^ notaz (04.03.2014). "Стар Крафт". openpandora.org. Получено 2014-03-29. Правило «без источника, без порта» не совсем верно, вы можете получить нечто похожее (но не то же самое), что и порт, путем статической перекомпиляции. Подобные вещи были сделаны несколько раз M-HT для некоторых игр DOS. Игра также была конвертирована для Android с похожим подходом.
  6. ^ M-HT. «Варкрафт: Орки и люди». repo.openpandora.org.
  7. ^ Кэрлев, Матиас (14 апреля 2014 г.). «Практическая и переносимая перекомпиляция X86». Получено 2014-08-08. но потом возникла идея как-то использовать исходный машинный код x86. Однако для нашего открытого сервера нам также необходимо поддерживать x86-64, и в этом случае нам абсолютно необходима эмуляция или перекомпиляция. […] Статическая перекомпиляция на ассемблер казалась намного лучшим вариантом, но для сохранения переносимости нам нужно было бы написать бэкенд для x86, x86-64 и, возможно, ARM / PowerPC.
  8. ^ Келли, Эндрю (2013-07-07). «Статическая перекомпиляция игр NES в собственные исполняемые файлы с помощью LLVM и Go». Получено 2013-08-08. В этой статье представлено оригинальное исследование возможности статического дизассемблирования и перекомпиляции игр Nintendo Entertainment System в собственные исполняемые файлы.
  9. ^ США 7765539, Elliott, Scott & Phillip Hutchinson, "Система и метод транс-компиляции видеоигр", выпущенный в 2010 г. 
  10. ^ Рэмси, Норман; Фернандес, Мэри Ф. (1995). "Набор инструментов машинного кода Нью-Джерси". Proceeding TCON'95 Proceedings of the USENIX 1995 Technical Conference Proceedings. Ассоциация USENIX Беркли, Калифорния, США: 24.
  11. ^ а б Уортон, Джон Харрисон (1994-08-01). «Гэри Килдалл, пионер отрасли, умер в 52 года: создал первые языки для микрокомпьютеров, дисковые операционные системы». Отчет микропроцессора. MicroDesign Resources Inc. (MDR). 8 (10). В архиве из оригинала от 18.11.2016. Получено 2016-11-18. […] Как ни странно, многие из техник Гэри первопроходцы открываются заново сейчас, десять лет спустя. яблоко и DEC рекламируют двоичная перекомпиляция как «новую» технологию для переноса существующего программного обеспечения на PowerPC или же Альфа архитектура. Фактически, DRI представил 8080 -к-8086 бинарный рекомпилятор в начале 1980-х. […]
  12. ^ Карлсон, Джим; Гек, Джерри (2003). Подъем Itanium: нарушение второго закона Мура о вычислительной мощности. Prentice Hall PTR. ISBN  978-0-13046415-6. Получено 2015-01-09.
  13. ^ "Динамический двоичный транслятор HP ARIES". HP. Получено 2015-01-09.
  14. ^ Стоукс, Джон. "Transmeta Crusoe Explored". Ars Technica. Получено 2015-01-09.
  15. ^ Хьюз, Роб (2000-01-20). «Микропроцессор Transmeta Crusoe». geek.com. Архивировано из оригинал на 2007-09-27.
  16. ^ "Часто задаваемые вопросы по процессору Transmeta Crusoe FAQ". Transmeta. 2007. Архивировано с оригинал на 2007-01-10.

дальнейшее чтение