Динамическая перекомпиляция - Dynamic recompilation

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

Использует

Большинство динамических рекомпиляторов используются для преобразования машинного кода между архитектурами во время выполнения. Эта задача часто требуется при эмуляции устаревших игровых платформ. В других случаях система может использовать динамическую перекомпиляцию как часть стратегии адаптивной оптимизации для выполнения переносимого программного представления, такого как байт-коды Java или .NET Common Language Runtime . Полноскоростные отладчики также используют динамическую перекомпиляцию, чтобы уменьшить накладные расходы на пространство, возникающие при использовании большинства методов деоптимизации , и других функций, таких как динамическая миграция потоков .

Задания

Основные задачи, которые должен выполнять динамический рекомпилятор:

  • Чтение машинного кода с исходной платформы
  • Генерация машинного кода для целевой платформы

Также динамический рекомпилятор может выполнять некоторые вспомогательные задачи:

  • Управление кешем перекомпилированного кода
  • Обновление количества прошедших циклов на платформах с регистрами количества циклов
  • Управление проверкой прерывания
  • Предоставление интерфейса для виртуализированного вспомогательного оборудования, например графического процессора.
  • Оптимизация структур кода более высокого уровня для эффективной работы на целевом оборудовании (см. Ниже)

Приложения

  • Многие виртуальные машины Java поддерживают динамическую перекомпиляцию.
  • Apple Rosetta для Mac OS X на x86 позволяет запускать код PowerPC на архитектуре x86 .
  • Более поздние версии эмулятора Mac 68K, используемые в классической Mac OS для запуска кода 680x0 на оборудовании PowerPC.
  • Psyco , специализированный компилятор для Python .
  • Проект HP Dynamo , пример прозрачного бинарного динамического оптимизатора .
  • DynamoRIO , преемник Dynamo с открытым исходным кодом , работающий с наборами инструкций ARM , x86-64 и IA-64 (Itanium).
  • Виртуальная машина Vx32 использует динамическое перекомпиляции для создания ОС -независимой x86 архитектуры песочницы для безопасного применения плагинов .
  • Microsoft Virtual PC для Mac, используемый для запуска кода x86 на PowerPC.
  • FreeKEYB, международный драйвер клавиатуры и консоли DOS со многими улучшениями удобства использования, использовал самомодифицирующийся код и динамическое устранение мертвого кода, чтобы минимизировать его образ в памяти на основе его пользовательской конфигурации (выбранные функции, языки, макеты) и фактической среды выполнения (вариант ОС и версия, загруженные драйверы, базовое оборудование), автоматическое разрешение зависимостей, динамическое перемещение и рекомбинация участков кода на уровне байтов и оптимизация opstrings на основе семантической информации, предоставленной в исходном коде, информации о перемещении, созданной специальными инструментами во время сборки, и полученной информации профиля во время загрузки.
  • Считается, что функция обратной совместимости Xbox 360 (т.е. запуск игр, написанных для оригинальной Xbox ) использует динамическую перекомпиляцию.
  • Apple Rosetta 2 для микросхемы Apple позволяет транслировать многие приложения, скомпилированные для процессоров на базе x86-64, для выполнения на микросхеме Apple.

Эмуляторы

  • PCSX2 , эмулятор Sony PlayStation 2 , имеет рекомпилятор под названием «microVU», преемник «SuperVU».
  • GCemu, эмулятор Nintendo GameCube .
  • GEM, эмулятор Nintendo Game Boy для MSX, использует оптимизирующий динамический рекомпилятор.
  • DeSmuME, эмулятор Nintendo DS , имеет опцию dynarec.
  • Psp от Soywiz, эмулятор Sony PlayStation Portable , имеет опцию dynarec.
  • Mupen64Plus , мультиплатформенный эмулятор Nintendo 64.
  • Yabause , мультиплатформенный эмулятор Saturn .

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

использованная литература

внешние ссылки