![](//upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Commons-emblem-question_book_orange.svg/40px-Commons-emblem-question_book_orange.svg.png) |
Este articulo o seccion necesita
referencias
que aparezcan en una
publicacion acreditada
.
Busca fuentes:
≪Emulador≫
–
noticias
·
libros
·
academico
·
imagenes
Este aviso fue puesto el 18 de abril de 2017.
|
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
]
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
]
- ↑
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
.
- ↑
Noguera, Bulmaro (3 de octubre de 2011).
≪Que es un emulador y para que se utiliza≫
.
Culturacion
. Consultado el 18 de agosto de 2022
.
- ↑
Salgado, Juan Jose (2000).
≪Emuladores: Unas herramientas imprescindibles≫
.
Mundo electronico
(309): 80-83.
ISSN
0300-3787
. Consultado el 21 de mayo de 2022
.