Оперативная трансляция кода между процессорами
В информатике динамическая перекомпиляция является функцией некоторых эмуляторов и виртуальных машин , где система может перекомпилировать некоторую часть программы во время выполнения. Компилируя во время выполнения, система может адаптировать сгенерированный код для отражения среды выполнения программы и потенциально производить более эффективный код , используя информацию, которая недоступна традиционному статическому компилятору .
Использует
Большинство динамических рекомпиляторов используются для преобразования машинного кода между архитектурами во время выполнения. Это задача, часто необходимая при эмуляции устаревших игровых платформ. В других случаях система может использовать динамическую рекомпиляцию как часть стратегии адаптивной оптимизации для выполнения переносимого представления программы, такого как байт-коды 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.
- QEMU
Эмуляторы
- 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]
- PCem , эмулятор для старых платформ ПК, который можно использовать на Windows и Linux. Он использует рекомпилятор для перевода устаревших вызовов процессора в современные инструкции процессора и для увеличения скорости эмуляции в целом.
- 86Box , форк PCem с целью более точной эмуляции. Он использует рекомпилятор для той же цели.
Смотрите также
Ссылки
- ^ "Технический отчет HP Labs по Dynamo". Архивировано из оригинала 2008-07-07 . Получено 2006-01-22 .
- ^ "DynamoRIO Dynamic Instrumentation Tool Platform". Архивировано из оригинала 2019-09-05 . Получено 2016-04-12 .
- ^ "DynamoRIO". GitHub . 2021-10-15.
- ^ Пол, Маттиас Р.; Фринк, Аксель К. (1997-10-13) [впервые опубликовано в 1991 г.], FreeKEYB - Enhanced DOS keyboard and console driver (User Manual) (v6.5 ed.)
- ^ "PCSX 2". Архивировано из оригинала 2005-10-29 . Получено 2009-04-15 .
- ^ petebernert (2015-10-03). "GCemu". SourceForge .
- ^ "Gameboy Emulator for MSX | The New Image". GEM . Получено 2014-01-12 .
- ^ "DeSmuME v0.9.9".
- ^ Публикация Карлоса Баллестероса Веласко (28 июля 2013 г.). «Эмулятор PSP Soywiz: Выпуск: Эмулятор PSP Soywiz 28 июля 2013 г. (r525)» . Pspemu.soywiz.com . Проверено 12 января 2014 г.
- ^ Mupen64Plus
- ^ "Ш2".
- ^ "PPSSPP - PPSSPP - эмулятор PSP для Android, Windows, Linux, iOS, MacOSX". ppsspp.org . Получено 17.11.2021 .
Внешние ссылки
- Учебник по динамическому рекомпилятору. Архив на Wayback Machine (архив 11 июня 2021 г.).
- Записи в блоге о написании динамического рекомпилятора MIPS в PPC.