В информатике динамическая перекомпиляция — это функция некоторых эмуляторов и виртуальных машин , где система может перекомпилировать некоторую часть программы во время выполнения. Компилируя во время выполнения, система может адаптировать сгенерированный код для отражения среды выполнения программы и потенциально создавать более эффективный код , используя информацию, недоступную традиционному статическому компилятору .
Использование
Большинство динамических рекомпиляторов используются для преобразования машинного кода между архитектурами во время выполнения. Эта задача часто требуется при эмуляции устаревших игровых платформ. В других случаях система может использовать динамическую перекомпиляцию как часть стратегии адаптивной оптимизации для выполнения переносимого представления программы, такого как байт-коды Java или .NET Common Language Runtime . Полноскоростные отладчики также используют динамическую перекомпиляцию для уменьшения накладных расходов на пространство, возникающую при большинстве методов деоптимизации , а также другие функции, такие как динамическая миграция потоков .
Задания
Основные задачи, которые должен выполнять динамический рекомпилятор:
- Чтение машинного кода с исходной платформы
- Выпуск машинного кода для целевой платформы
Динамический рекомпилятор также может выполнять некоторые вспомогательные задачи:
- Управление кешем перекомпилированного кода
- Обновление счетчиков прошедшего цикла на платформах с регистрами счетчика циклов
- Управление проверкой прерываний
- Предоставление интерфейса для виртуализированного вспомогательного оборудования, например графического процессора.
- Оптимизация структур кода более высокого уровня для эффективной работы на целевом оборудовании (см. ниже).
Приложения
- Многие виртуальные машины Java поддерживают динамическую перекомпиляцию.
- Rosetta от Apple для Mac OS X на x86 позволяет запускать код PowerPC на архитектуре x86 .
- Более поздние версии эмулятора Mac 68K использовались в классической Mac OS для запуска кода 680x0 на оборудовании PowerPC.
- Psyco — специализированный компилятор для Python .
- Проект HP Dynamo , пример прозрачного двоичного динамического оптимизатора . [1]
- DynamoRIO , преемник Dynamo с открытым исходным кодом , который работает с наборами инструкций ARM , x86-64 и IA-64 (Itanium). [2] [3]
- Виртуальная машина Vx32 использует динамическую перекомпиляцию для создания независимых от ОС песочниц с архитектурой x86 для безопасных подключаемых модулей приложений .
- Microsoft Virtual PC для Mac, используемый для запуска кода x86 на PowerPC.
- FreeKEYB, международный драйвер клавиатуры и консоли для DOS со многими улучшениями удобства использования, использует самомодифицирующийся код и динамическое удаление мертвого кода для минимизации своего образа в памяти на основе пользовательской конфигурации (выбранные функции, языки, макеты) и фактической среды выполнения (вариант ОС). и версия, загруженные драйверы, базовое оборудование), автоматическое разрешение зависимостей, динамическое перемещение и рекомбинация разделов кода с детализацией на уровне байтов и оптимизация опстрингов на основе семантической информации, представленной в исходном коде, информации о перемещении, сгенерированной специальными инструментами во время сборки, и полученной информации о профиле во время загрузки. [4]
- Широко распространено мнение , что функция обратной совместимости Xbox 360 (т.е. запуск игр, написанных для оригинальной Xbox ) использует динамическую перекомпиляцию.
- Rosetta 2 от Apple для процессоров Apple позволяет транслировать многие приложения, скомпилированные для процессоров x86-64 , для выполнения на процессорах Apple.
Эмуляторы
- PCSX2 , [5] эмулятор PlayStation 2 , имеет перекомпилятор под названием «microVU», преемник «SuperVU».
- GCemu, [6] эмулятор GameCube .
- GEM, [7] эмулятор Game Boy для MSX , использует оптимизирующий динамический рекомпилятор.
- DeSmuME, [8] эмулятор Nintendo DS , имеет опцию dynarec.
- Psp от Soywiz, [9] эмулятор PlayStation Portable , имеет опцию dynarec.
- Mupen64Plus — мультиплатформенный эмулятор Nintendo 64. [10]
- Yabause, мультиплатформенный эмулятор Saturn . [11]
- PPSSPP , мультиплатформенный эмулятор PlayStation Portable , по умолчанию использует динамический перекомпилятор JIT . [12]
Смотрите также
Рекомендации
- ^ «Технический отчет HP Labs о Dynamo» . Архивировано из оригинала 7 июля 2008 г. Проверено 22 января 2006 г.
- ^ «Платформа инструментов динамического инструментирования DynamoRIO» . Архивировано из оригинала 5 сентября 2019 г. Проверено 12 апреля 2016 г.
- ^ "ДинамоРИО". Гитхаб . 2021-10-15.
- ^ Пол, Матиас Р.; Фринке, Аксель К. (13 октября 1997 г.) [впервые опубликовано в 1991 г.], FreeKEYB - Расширенная клавиатура и драйвер консоли для DOS (Руководство пользователя) (изд. v6.5)
- ^ "PCSX 2". Архивировано из оригинала 29 октября 2005 г. Проверено 15 апреля 2009 г.
- ^ Питербернерт (3 октября 2015 г.). «ГЦему». СоурсФордж .
- ^ «Эмулятор Gameboy для MSX | Новый образ» . ДРАГОЦЕННЫЙ КАМЕНЬ . Проверено 12 января 2014 г.
- ^ "DeSmuME v0.9.9" .
- ^ Публикация Карлоса Бальестероса Веласко (28 июля 2013 г.). «Эмулятор PSP Soywiz: Выпуск: Эмулятор PSP Soywiz 28 июля 2013 г. (r525)» . Pspemu.soywiz.com . Проверено 12 января 2014 г.
- ^ Мупен64Плюс
- ^ "SH2".
- ^ «PPSSPP - PPSSPP - эмулятор PSP для Android, Windows, Linux, iOS, MacOSX» . ppsspp.org . Проверено 17 ноября 2021 г.
Внешние ссылки
- Учебное пособие по динамическому рекомпилятору
- Сообщения в блоге о написании динамического перекомпилятора MIPS в PPC