En informática , la recompilación dinámica es una característica de algunos emuladores y máquinas virtuales , donde el sistema puede recompilar parte de un programa durante su ejecución. Al compilar durante la ejecución, el sistema puede adaptar el código generado para que refleje el entorno de ejecución del programa y, potencialmente, producir un código más eficiente aprovechando 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 máquina entre arquitecturas en tiempo de ejecución. Esta tarea suele ser necesaria en la emulación de plataformas de juegos antiguas. 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 bytecodes 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 suponen la mayoría de las técnicas de desoptimización , así como otras funciones como la migración dinámica de subprocesos .
Tareas
Las principales tareas que debe realizar un recompilador dinámico son:
- Lectura de código máquina desde la plataforma fuente
- Emisión de código máquina para la plataforma de destino.
Un recompilador dinámico también puede realizar algunas tareas auxiliares:
- Gestionar una caché de código recompilado
- Actualización de los 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.
- Optimización de las estructuras de código de alto nivel para que se ejecuten de manera eficiente en el hardware de destino (ver más abajo).
Aplicaciones
- Muchas máquinas virtuales Java incorporan recompilación dinámica.
- Rosetta de Apple para Mac OS X en x86 permite ejecutar código PowerPC en la arquitectura x86 .
- Las versiones posteriores del emulador Mac 68K se utilizaban en el Mac OS clásico para ejecutar código 680x0 en el hardware PowerPC.
- Psyco , un compilador especializado para Python .
- El proyecto HP Dynamo , un ejemplo de 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 la recompilación dinámica para crear entornos aislados 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 internacional de teclado y consola para DOS con numerosas mejoras de usabilidad, utilizaba código automodificable y eliminación dinámica de código muerto para minimizar su imagen en memoria en función de la configuración del usuario (funciones, idiomas y diseños seleccionados) y del 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 secciones de código a nivel de byte 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 suele asumir que la función de retrocompatibilidad de la Xbox 360 (es decir, la ejecución de juegos escritos para la Xbox original ) utiliza la recompilación dinámica.
- Rosetta 2 de Apple para los chips de silicio de Apple permite que muchas aplicaciones compiladas para procesadores basados en x86-64 se adapten para su ejecución en los chips de silicio de Apple.
- QEMU
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.
- Soywiz's Psp, [ 9 ] un emulador de PlayStation Portable , tiene una opción dynarec.
- Mupen64Plus , un emulador multiplataforma de Nintendo 64. [ 10 ]
- Yabause, un emulador de Saturn multiplataforma . [ 11 ]
- PPSSPP , un emulador multiplataforma de PlayStation Portable , utiliza un recompilador dinámico JIT por defecto. [ 12 ]
- PCem es un emulador para plataformas de PC antiguas que se puede usar en Windows y Linux. Utiliza un recompilador para traducir las llamadas a la CPU antiguas a instrucciones de CPU modernas y así mejorar la velocidad general de la emulación.
- 86Box es una bifurcación de PCem cuyo objetivo es lograr una emulación más precisa. Utiliza el recompilador con el mismo propósito.
Véase también
Referencias
- ↑ "Informe técnico de HP Labs sobre Dynamo" . Archivado del original el 7 de julio de 2008. Consultado el 22 de enero de 2006 .
- ↑ "Plataforma de herramientas de instrumentación dinámica DynamoRIO" . Archivado del original el 5 de septiembre de 2019. Consultado el 12 de abril de 2016 .
- ↑ "DynamoRIO" . GitHub . 15/10/2021.
- ↑ Paul, Matthias R.; Frinke, Axel C. (13 de octubre de 1997) [publicado por primera vez en 1991], FreeKEYB - Controlador mejorado de teclado y consola para DOS (Manual del usuario) ( ed. v6.5)
- ↑ "PCSX 2" . Archivado del original el 29/10/2005 . Consultado el 15/04/2009 .
- ↑ petebernert (2015-10-03). "GCemu" . SourceForge .
- ↑ "Emulador de Game Boy para MSX | The New Image" . 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 sobre recompiladores dinámicos . Archivo en Wayback Machine (archivado el 11 de junio de 2021 ).
- Artículos de blog sobre cómo escribir un recompilador dinámico de MIPS a PPC .
- Virtualización
- Construcción de compiladores
- Software de emulación