Recopilación dinámica - Dynamic recompilation

En ciencias de la computación , 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 tiempo de ejecución del programa y, potencialmente, producir código más eficiente mediante la explotación de 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 a menudo se necesita 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 velocidad completa también utilizan la recompilación dinámica para reducir la sobrecarga de espacio incurrida en la mayoría de las técnicas de desoptimización y otras características como la migración dinámica de subprocesos .

Tareas

Las principales tareas que debe realizar un recompilador dinámico son:

  • Lectura de código de máquina desde la plataforma fuente
  • Emitiendo código de máquina para la plataforma de destino

Un recompilador dinámico también puede realizar algunas tareas auxiliares:

  • Administrar una caché de código recompilado
  • Actualización de recuentos de ciclos transcurridos en plataformas con registros de recuentos de ciclos
  • Gestión de la verificación de interrupciones
  • Proporcionar una interfaz para hardware de soporte virtualizado, por ejemplo, una GPU
  • Optimización de estructuras de código de nivel superior para que se ejecuten de manera eficiente en el hardware de destino (ver más abajo)

Aplicaciones

  • Muchas máquinas virtuales Java cuentan con recompilación dinámica.
  • Rosetta de Apple para Mac OS X en x86, permite que el código PowerPC se ejecute en la arquitectura x86 .
  • Versiones posteriores del emulador Mac 68K que se utilizan 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 optimizador dinámico binario transparente .
  • DynamoRIO , un sucesor de código abierto de Dynamo que funciona con los conjuntos de instrucciones ARM , x86-64 e IA-64 (Itanium).
  • La máquina virtual Vx32 emplea la 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 de modificación automática y eliminación dinámica de código muerto para minimizar su imagen en la memoria según su configuración de usuario (características seleccionadas, idiomas, diseños) y el entorno de ejecución real (variante del sistema operativo) y versión, controladores cargados, hardware subyacente), resolviendo automáticamente dependencias, reubicando y recombinando dinámicamente secciones de código en granularidad a nivel de bytes y optimizando cadenas de operaciones basadas en información semántica proporcionada en el código fuente, información de reubicación generada por herramientas especiales durante el ensamblaje e información de perfil obtenida en el momento de la carga.
  • Se asume ampliamente que la funcionalidad de compatibilidad con versiones anteriores de Xbox 360 (es decir, ejecutar juegos escritos para la Xbox original ) utiliza la recopilación dinámica.
  • De Apple Rosetta 2 para Apple silicio, permite muchas aplicaciones compiladas para x86-64 procesadores basados sean traducidos para su ejecución en la manzana de silicio.

Emuladores

Ver también

Referencias

enlaces externos