Traducción de código sobre la marcha entre CPU
En informática , la recompilación dinámica es una característica de algunos emuladores y máquinas virtuales , donde el sistema puede recompilar alguna parte de un programa durante la ejecución. Al compilar durante la ejecución, el sistema puede adaptar el código generado para reflejar el entorno de ejecución del programa y potencialmente producir un código más eficiente al explotar información que no está disponible para un compilador estático tradicional .
Usos
La mayoría de los recompiladores dinámicos se utilizan para convertir código de máquina entre arquitecturas en tiempo de ejecución. Esta es una tarea que suele ser necesaria en la emulación de plataformas de juegos heredadas. En otros casos, un sistema puede emplear la recompilación dinámica como parte de una estrategia de optimización adaptativa para ejecutar una representación de programa portátil, como los códigos de bytes de Java o .NET Common Language Runtime . Los depuradores de alta velocidad también utilizan la recompilación dinámica para reducir la sobrecarga de espacio que se produce en la mayoría de las técnicas de desoptimización y otras funciones, como la migración dinámica de subprocesos .
Tareas
Las principales tareas que debe realizar un recompilador dinámico son:
- Lectura en código de máquina desde la plataforma de origen
- Emisión de código de máquina para la plataforma de destino
Un recompilador dinámico también puede realizar algunas tareas auxiliares:
- Administrar un caché de código recompilado
- Actualización de recuentos de ciclos transcurridos en plataformas con registros de recuento de ciclos
- Gestión de la comprobación de interrupciones
- Proporcionar una interfaz para el hardware de soporte virtualizado, por ejemplo, una GPU
- Optimizar las estructuras de código de nivel superior para que se ejecuten de manera eficiente en el hardware de destino (ver a continuación)
Aplicaciones
- Muchas máquinas virtuales Java cuentan con recompilación dinámica.
- Rosetta de Apple para Mac OS X en x86, permite ejecutar código PowerPC en la arquitectura x86 .
- Versiones posteriores del emulador Mac 68K utilizados en el sistema operativo Mac clásico para ejecutar código 680x0 en el hardware PowerPC.
- Psyco , un compilador especializado para Python .
- El proyecto HP Dynamo, un ejemplo de un optimizador dinámico binario transparente . [1]
- DynamoRIO , un sucesor de código abierto de Dynamo que funciona con los conjuntos de instrucciones ARM , x86-64 e IA-64 (Itanium). [2] [3]
- La máquina virtual Vx32 emplea una recompilación dinámica para crear entornos sandbox de arquitectura x86 independientes del sistema operativo para complementos de aplicaciones seguros .
- Microsoft Virtual PC para Mac, utilizado para ejecutar código x86 en PowerPC.
- FreeKEYB, un controlador de consola y teclado DOS internacional con muchas mejoras de usabilidad, utilizó código automodificable y eliminación dinámica de código muerto para minimizar su imagen en memoria en función de su configuración de usuario (características seleccionadas, idiomas, diseños) y el entorno de ejecución real (variante y versión del sistema operativo, controladores cargados, hardware subyacente), resolviendo automáticamente las dependencias, reubicando y recombinando dinámicamente las secciones de código en granularidad a nivel de bytes y optimizando las cadenas de operaciones en función de la información semántica proporcionada en el código fuente, la información de reubicación generada por herramientas especiales durante el ensamblaje y la información de perfil obtenida en el momento de la carga. [4]
- Se supone ampliamente que la funcionalidad de compatibilidad con versiones anteriores de Xbox 360 (es decir, ejecutar juegos escritos para la Xbox original ) utiliza recompilación dinámica.
- Rosetta 2 de Apple para Apple silicon permite que muchas aplicaciones compiladas para procesadores basados en x86-64 se traduzcan para su ejecución en Apple silicon.
- UEMQ
Emuladores
- PCSX2 , [5] un emulador de PlayStation 2 , tiene un recompilador llamado "microVU", el sucesor de "SuperVU".
- GCemu, [6] un emulador de GameCube .
- GEM, [7] un emulador de Game Boy para MSX utiliza un recompilador dinámico optimizador.
- DeSmuME, [8] un emulador de Nintendo DS , tiene una opción dynarec.
- La Psp de Soywiz, [9] un emulador de PlayStation Portable , tiene una opción dynarec.
- Mupen64Plus , un emulador multiplataforma de Nintendo 64. [10]
- Yabause, un emulador multiplataforma de Saturn . [11]
- PPSSPP , un emulador multiplataforma de PlayStation Portable , utiliza un recompilador dinámico JIT de forma predeterminada. [12]
- PCem , un emulador para plataformas de PC antiguas que se puede utilizar en Windows y Linux. Utiliza el recompilador para traducir las llamadas de CPU antiguas a instrucciones de CPU modernas y ganar algo de velocidad en la emulación en general.
- 86Box , una bifurcación de PCem cuyo objetivo es lograr una emulación más precisa. Utiliza el recompilador para el mismo propósito.
Véase también
Referencias
- ^ "Informe técnico de HP Labs sobre Dynamo". Archivado desde el original el 7 de julio de 2008. Consultado el 22 de enero de 2006 .
- ^ "Plataforma de herramientas de instrumentación dinámica DynamoRIO". Archivado desde el original el 5 de septiembre de 2019. Consultado el 12 de abril de 2016 .
- ^ "DynamoRIO". GitHub . 15 de octubre de 2021.
- ^ Paul, Matthias R.; Frinke, Axel C. (13 de octubre de 1997) [publicado por primera vez en 1991], FreeKEYB - Controlador de consola y teclado DOS mejorado (Manual del usuario) (edición v6.5)
- ^ "PCSX 2". Archivado desde el original el 29 de octubre de 2005. Consultado el 15 de abril de 2009 .
- ^ petebernert (3 de octubre de 2015). "GCemu". SourceForge .
- ^ "Emulador de Gameboy para MSX | La nueva imagen". GEM . Consultado el 12 de enero de 2014 .
- ^ "DeSmuME v0.9.9".
- ^ Publicado por Carlos Ballesteros Velasco (28 de julio de 2013). "Emulador de PSP de Soywiz: Lanzamiento: Emulador de Psp de Soywiz 2013-07-28 (r525)". Pspemu.soywiz.com . Consultado el 12 de enero de 2014 .
- ^ Mupen64Plus
- ^ "SH2".
- ^ "PPSSPP - PPSSPP - Emulador de PSP para Android, Windows, Linux, iOS, MacOSX". ppsspp.org . Consultado el 17 de noviembre de 2021 .
Enlaces externos
- Tutorial de recompilación dinámica. Archivado en Wayback Machine (archivado el 11 de junio de 2021).
- Publicaciones de blog sobre cómo escribir un recompilador dinámico de MIPS a PPC.