한국   대만   중국   일본 
Emulador - Wikipedia, la enciclopedia libre Ir al contenido

Emulador

De Wikipedia, la enciclopedia libre
DOSBox , emulador que permite ejecutar una shell similar al sistema DOS .

En informatica , un emulador es un software que permite ejecutar programas o videojuegos en una plataforma (sea una arquitectura de hardware o un sistema operativo ) diferente de aquella para la cual fueron escritos originalmente. [ 1 ] ​ A diferencia de un simulador , que solo trata de reproducir el comportamiento del programa, un emulador trata de modelar de forma precisa el dispositivo de manera que este funcione como si estuviese siendo usado en el aparato original. [ 2 ]

Usos [ editar ]

Un uso popular de los emuladores es el de imitar la experiencia de los videojuegos de maquinas recreativas o videoconsolas en computadoras personales , o el poder ser jugados en otras videoconsolas. La emulacion de videojuegos de sistemas antiguos ( abandonware ) en las modernas computadoras personales y videoconsolas de hoy dia resulta generalmente mas comoda y practica que en los dispositivos originales. Sin embargo, puede ser requerido a los creadores de emuladores una licencia de software para escribir programas originales que dupliquen la funcionabilidad de la ROM y BIOS del hardware original, lo que comunmente se conoce como high-level emulation o emulacion de alto nivel .

Otro uso comun es el de emular sistemas operativos obsoletos, o vigentes para otra maquina o dispositivo, para utilizar programas compatibles con estos sistemas operativos.

Emulacion [ editar ]

En sentido teorico, la tesis de Church-Turing implica que cualquier ambiente funcional puede ser emulado dentro de cualquier otro. En la practica, esto puede resultar realmente dificil, particularmente cuando el comportamiento exacto del sistema emulado no esta documentado y debe ser deducido mediante ingenieria inversa . Tampoco se habla en la tesis sobre las diferencias en sincronizacion; si el emulador no actua tan rapidamente como el hardware original, el software de emulacion va a ir mas lento que si fuese el hardware original.

Estructura [ editar ]

La mayoria de los emuladores solo emulan una determinada configuracion arquitectura de hardware - si el sistema de explotacion (o sistema operativo ) tambien se requiere para emular cierto programa entonces ha de ser emulado tambien. Tanto el sistema de explotacion como el programa deben ser interpretados por el emulador, como si estuviese ejecutandose en el equipo original. Aparte de la interpretacion del lenguaje de la maquina emulada, es preciso emular el resto del equipo, como los dispositivos de entrada y salida, de forma virtual : si escribir en una region especifica de la memoria debe influir en el contenido en pantalla, por ejemplo, esto tambien debe ser emulado.

En vez de una emulacion completa del equipo, una compatibilidad superficial puede ser suficiente. Esto traduce las llamadas del sistema emulado a llamadas del sistema anfitrion.

Los desarrolladores de programas para maquinas con sistemas computarizados y consolas de videojuego comunmente utilizan emuladores especialmente exactos llamados simuladores antes de ejecutarlos en el equipo real. Esto permite que el programa pueda ser producido y probado antes de que la version final del equipo para el cual se esta desarrollando sea producida en grandes cantidades, de esta forma puede ser probado sin tener que copiar el programa en el equipo, de modo que puedan ser eliminados errores en un nivel bajo sin tener los efectos colaterales de un depurador . [ 3 ]

Tipicamente, un emulador se divide en modulos que corresponden de forma precisa a los subsistemas del equipo emulado. Lo mas comun, es que un emulador este compuesto por los siguientes modulos:

Lo mas comun es que los buses no sean emulados, por razones de simplicidad y rendimiento, y para que los perifericos virtuales se comuniquen directamente con la UCP y los subsistemas de memoria.

Simulador de CPU [ editar ]

El simulador de la unidad central de procesamiento (CPU) es a menudo la parte mas compleja de un emulador. Muchos emuladores son escritos utilizando simuladores de CPU "preempaquetados", para asi poder realizar una emulacion fiel y eficiente de una maquina especifica.

El simulador de CPU mas simple seria un interprete informatico , que sigue el flujo de ejecucion del codigo de programacion emulado y, por cada instruccion de codigo de la maquina emulada, ejecuta en el procesador en que se carga, instrucciones semanticamente equivalentes a las originales.

Esto es posible asignando una variable a cada registro y flag de la CPU emulada. La logica de la CPU simulada puede ser mas o menos traducida directamente a algoritmos de software , creando una reimplementacion del software que basicamente refleja la implementacion original del hardware .

El ejemplo siguiente ilustra el modo en que la simulacion de CPU por un interprete. En este caso, las interrupciones se revisan despues de la ejecucion de cada instruccion, aunque este comportamiento no es usual en los emuladores en la realidad, por razones de rendimiento.

 void
 Execute
(
void
)
 {

     if
(
Interrupt
!=
INT_NONE
)
 {

         SuperUser
=
TRUE
;

         WriteMemory
(
++
StackPointer
,
 ProgramCounter
);

         ProgramCounter
=
InterruptPointer
;

     }

     switch
(
ReadMemory
(
ProgramCounter
++
))
 {

         // Handling of every valid instruction

         default
:

         Interrupt
=
INT_ILLEGAL
;

     }

 }

Los interpretes son muy populares en el caso de los simuladores de CPU, ya que son mas sencillos de implementar que otras soluciones alternativas de mejor rendimiento, y su velocidad es mas que adecuada para emular computadoras de hace mas de una decada en maquinas modernas.

Aun asi, la penalizacion de velocidad inherente en la interpretacion puede ser un problema al emular computadores cuya velocidad de procesador esta en el mismo orden de magnitud que la maquina huesped. Hasta no hace tantos anos, la emulacion en tales situaciones era considerada impracticable.

Lo que permite el rompimiento de esta restriccion son las tecnicas avanzadas de recompilacion dinamica . Una translacion simple a priori del codigo del programa emulado al codigo que corre en la arquitectura original es usualmente imposible por varias razones:

  • el codigo puede ser auto modificable
  • no existe una forma que distinga de forma confiable los segmentos de informacion (que no deben ser traducidos) de los segmentos de texto (segmentos de codigo)
  • no existe forma de comunicarse con el sistema operativo emulado para que el emulador reconozca los nuevos codigos cargados (por ejemplo del disco)

Varias formas de recompilacion dinamica, incluyendo la popular tecnica de compilacion en tiempo de ejecucion (compilacion JIT), trata de bordear estos temas esperando hasta que el proceso de control de flujo se mueva hasta donde esta la parte donde esta localizado el codigo sin traducir, y es solo entonces {"en tiempo de ejecucion") cuando los bloques traducidos del codigo al codigo anfitrion pueden ser ejecutados.

El codigo traducido se mantiene en el codigo cache , y el codigo original no se pierde ni es afectado; de esta forma, incluso los segmentos de data pueden ser trasladados por el recompilador, resultando solo en un gasto de tiempo de traslado.

Dispositivos de entrada y salida [ editar ]

La mayoria de los emuladores, como dicho anteriormente, no emulan el sistema principal bus; cada dispositivo de entrada y salida es tratado a menudo como un caso especial, y no existe una interfaz constante para los perifericos virtuales.

Esto puede resultar en una ventaja en el funcionamiento, proveyendo que cada modulo de entrada y salida pueda ser adaptado a las caracteristicas del dispositivo emulado; disenos basados en un estandar, entradas y salidas unificadas por medio de API pueden sin embargo proveer modelos mas simples, y ademas tienen la ventaja adicional de permitir de forma "automatica" la utilizacion de servicios plugins para proveer dispositivos virtuales de terceros en el emulador.

Las entradas y salidas unificadas por medio de API no necesariamente reflejan la estructura del bus del hardware real: el diseno del bus esta limitado por varios parametros electricos y la necesidad del manejo de programacion paralela que la mayoria de las veces puede ser ignorada en la implementacion del software.

Aun los emuladores que tratan cada dispositivo como un caso especial poseen una infraestructura basica en comun para ello:

  • manejando interruptores , por medio de procedimientos que fijen banderas legibles por el simulador del CPU siempre que un interruptor sea levantado, permitiendo al CPU virtual "convertir los interruptores (virtuales)".
  • escribiendo y leyendo de la memoria fisica, por medio de dos procedimientos similares mientras este lidia con la memoria logica (contrario a este ultimo, el anterior puede comunmente ser echado a un lado, y en su lugar se emplean las referencias directas al arreglo de memoria)

Sistema de ROM [ editar ]

NeoRAGEx, emulador a base de imagenes ROM .

Los emuladores arrancan imagenes ROM , o sea el contenido de los cartuchos, disquetes o cintas que se usaban con los sistemas antiguos. Fisicamente en las PC las ROM son archivos binarios que se pueden cargar en la memoria. Es decir, el emulador es un programa que hace las funciones de una consola, por ejemplo la Game Boy Advance o una PDA, y la ROM es un archivo que hace de cartucho, CD-ROM , o cinta, por ejemplo Mario Bros. .

Maquina virtual [ editar ]

La emulacion puede ser utilizada para obtener una maquina virtual que se ejecuta dentro de otra maquina. Esta maquina virtual puede emular tanto maquinas que existen fisicamente como maquinas que solo existen como una especificacion (por ejemplo la maquina virtual de Java , la maquina virtual del entorno .NET , Open Firmware o la maquina virtual p-code de Pascal). De esta forma se puede conseguir ejecutar software escrito para una maquina con solo llevar la maquina virtual a cada una de las plataformas..

Emulador de videoconsola [ editar ]

Los emuladores de videoconsolas son un tipo de emuladores disenados para emular una o varias videoconsolas y asi poder jugar un videojuego disenado para ser jugado en esta(s). Los emuladores multiples suelen emular consolas con caracteristicas similares (por ejemplo MEKA emula todas las consolas de Sega de 8 bits y la Colecovision )

Vease tambien [ editar ]

Enlaces externos [ editar ]

Referencias [ editar ]

  1. Rodriguez, Luis H. (5 de junio de 2021). ≪Que es un emulador digital y para que puedes utilizarlo≫ . ElDiario.es . Consultado el 21 de mayo de 2022 .  
  2. Noguera, Bulmaro (3 de octubre de 2011). ≪Que es un emulador y para que se utiliza≫ . Culturacion . Consultado el 18 de agosto de 2022 .  
  3. Salgado, Juan Jose (2000). ≪Emuladores: Unas herramientas imprescindibles≫ . Mundo electronico (309): 80-83. ISSN   0300-3787 . Consultado el 21 de mayo de 2022 .