En informática, un emulador es un software que permite ejecutar programas de ordenador en una plataforma (arquitectura hardware o sistema operativo) diferente de la cual fueron escritos originalmente. A diferencia de un simulador, que sólo trata de reproducir el comportamiento del programa, un emulador trata de modelar de forma precisa el dispositivo que se esta emulando.
Un uso popular de los emuladores es el de imitar la experiencia de los juegos de máquinas recreativas o videoconsolas en sistemas operativos como Linux, Mac OS X o Microsoft Windows. La emulación de juegos de sistemas antiguos en las modernas computadoras personales de hoy día resulta generalmente más cómodo y práctico 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 comúnmente se conoce como high-level emulation o emulación de alto nivel.
En sentido teórico, la tesis de Church-Turing implica que cualquier ambiente funcional puede ser emulado dentro de cualquier otro. En la práctica, esto puede resultar realmente difícil, particularmente cuando el comportamiento exacto del sistema emulado no está documentado y debe ser deducido mediante ingeniería inversa. Tampoco se habla en la tesis sobre las diferencias en sincronización; si el emulador no actúa tan rápidamente como el hardware original, el software de emulación va a correr más lento que si fuese el hardware original.
En vez de una emulación completa del hardware, una compatibilidad superficial puede ser suficiente. Esto traduce las llamadas del sistema emulado a llamadas del sistema anfitrión.
Los desarrolladores de software para máquinas con sistemas computarizados y consolas de videojuego comúnmente diseñan el software en emuladores especialmente exactos llamados simuladores antes de correrlos en el hardware real. Esto permite que el software pueda ser producido y probado antes de que la versión final del hardware para el cual se está desarrollando sea producida en grandes cantidades, de esta forma puede ser probado sin tener que copiar el programa en el hardware, de modo que puedan ser eliminados errores en un nivel bajo sin tener los efectos colaterales de un depurador.
Típicamente, un emulador se divide en módulos que corresponden de forma precisa a los subsistemas de la computadora emulada. Lo más común, es que un emulador este compuesto por los siguientes módulos:
Lo más común es que los BUSes no sean emulados, por razones de simplicidad y rendimiento, y para que los periférico virtuales se comuniquen directamente con el CPU y los subsistemas de memoria.
Este es claramente el caso en que el hardware emulado permita un manejo avanzado de la memoria (en caso que, la Unidad de administración de memoria lógica pueda ser encajada en la memoria del emulador, haciendo un módulo de sí mismo, o en ciertos casos integrándola en el simulador del CPU).
Incluso si la computadora emulada no contiene una MMU, es posible que existan otros factores que permitan la equivalencia entre memoria lógica y física; algunas (si no todas) arquitecturas ofrecen un mapeado de memoria de entrada y salida; incluso aquellos que no son del todo invariables contienen un bloque de memoria lógica mapeada a la Memoria de sólo lectura, lo cual significa que el modulo de arreglo de memoria debe ser descartado si la memoria ROM va a ser emulada.
Como resultado, la mayoría de los emuladores implementa al menos dos procedimientos para escribir y leer de la memoria lógica, y este procedimiento debe mapear cada acceso a su localización correcta del objeto correcto.
En un sistema de dirección en base-límite donde la memoria de la dirección 0 a la dirección ROMSIZE es memoria de sólo lectura, mientras que el resto es RAM, algo a lo largo de la línea de los siguientes procedimientos sería lo típico:
void WriteMemory(word Address, word Value) {
word RealAddress;
RealAddress=Address+BaseRegister;
if(RealAddress
word ReadMemory(word Address) {
word RealAddress;
RealAddress=Address+BaseRegister;
if(RealAddressSimulador de CPU
El Simulador de CPU es a menudo la parte más compleja de un emulador. Muchos emuladores son escritos utilizando simuladores de CPU "pre-empaquetados", para así poder realizar una emulación fiel y eficiente de una máquina específica.
El simulador de CPU más simple sería un Intérprete informático, que sigue el flujo de ejecución del código de programación emulado y, por cada instrucción de código de la máquina emulada, ejecuta en el procesador en que se carga, instrucciones semánticamente equivalentes a las originales.
Esto es posible asignando una variable a cada registro y flag de la CPU simulada. La lógica de la CPU simulada puede ser más o menos traducida directamente a algoritmos de software, creando una re-implementación del software que básicamente refleja la implementación original del hardware.
El ejemplo siguiente ilustra el modo en que la simulación de CPU por un intérprete. En este caso, las interrupciones se revisan después de la ejecución de cada instrucción, 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 intérpretes son muy populares en el caso de los simuladores de CPU, ya que son más sencillos de implementar que otras soluciones alternativas de mejor rendimiento, y su velocidad es más que adecuada para emular computadares de hace más de una * en máquinas modernas.
Aún así, la penalización de velocidad inherente en la interpretación puede ser un problema al emular computadores cuya velocidad de procesador está en el mismo de magnitud que la máquina huésped. Hasta no hace tantos años, la emulación en tales situaciones era considerada impracticable.
Lo que permite el rompimiento de esta restricción son las técnicas avanzadas de recompilación dinámica. Una translación simple a priori del código del programa emulado al código que corre en la arquitectura original es usualmente imposible por varias razones:
Varias formas de recompilación dinámica, incluyendo la popular técnica de compilación en tiempo de ejecución (compilación 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 código sin traducir, y es solo entonces {"en tiempo de ejecución") cuando los bloques traducidos del código al código anfitrión pueden ser ejecutados.
El código traducido se mantiene en el código cache, y el código 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.
Esto puede resultar en una ventaja en el funcionamiento, proveyendo que cada módulo de entrada y salida pueda ser adaptado a las características del dispositivo emulado; diseños basados en un estándar, entradas y salidas unificadas por medio de API pueden sin embargo proveer modelos más simples, y además tienen la ventaja adicional de permitir de forma "automática" la utilización 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 diseño del bus esta limitado por varios parámetros eléctricos y la necesidad del manejo de programación paralela que la mayoría de las veces puede ser ignorada en la implementación del software.
Aún los emuladores que tratan cada dispositivo como un caso especial poseen una infraestructura básica en común para ello:
Emulátor | Emulator | Emulator | Emulaattori | Émulateur | Emulátor | Emulator | Emuleso | Emulatore | エミュレータ | Emuliatorius | Emulator | Emulator | Emulator | Emulator | Emulador | Эмуляция | Софтверска емулација | Emulator | Emülasyon | 模拟器
This article is licensed under the GNU Free Documentation License.
It uses material from the
"Emulador".
Home Page • arts • business • computers • games • health • hospitals • home • kids & teens • news • physicians • recreation• reference • regional • science • shopping • society • sports • world