Saltar al contenido

¿Qué es un Emulador?

Qué es un emulador.

Muchas veces nos hemos encontrados en situaciones donde queremos ejecutar una aplicación o software y este no es compatible con nuestro sistema operativo. Por ejemplo, existen aplicaciones para el sistema operativo Android que sería muy útil ejecutarlas en nuestro sistema operativo Windows. O si utilizamos sistemas operativo Linux, sería conveniente poder tener acceso a algunos programas de Windows.

Pues todo esto tiene una solución muy simple. Esta es la de utilizar una herramienta que programada dentro de nuestro sistema base y que ejecute aplicaciones sobre software de otros sistemas. Estas herramientas se conocen como emulador. Si quieres saber en qué consiste un emulador y cuáles son sus usos, así como algunos emuladores conocidos, te invito a que continúes leyendo. Ya comenzamos.

Tabla de contenidos


Definición de emulador

El término emulador es bastante usado en varios contextos diferentes, pero el que nos interesa es su uso en la informática. Dentro de este mundo, un emulador es una herramienta o software mediante el cual es posible ejecutar programas o videojuegos. La particularidad es que estos programas o videojuegos no pueden ser ejecutados por el sistema de manera nativa.

Los emuladores no solo se limitan a sistemas operativos. Estos pueden ser usados, además por una arquitectura de hardware específica. Un programa es escrito para que se ejecute en un sistema base específico. Pues el emulador sencillamente crea una simulación de ese sistema base para ejecutar el programa en un ambiente diferente.

Su principal diferencia con un simulador es que este último solo reproduce el funcionamiento de un programa. Por otro lado, el emulador crea una simulación lo más exacta posible del sistema o dispositivo, para que el programa se ejecute sin ningún problema.

Por ejemplo, uno de los sistemas operativos más populares para teléfonos móviles es el sistema Android. Es bastante útil encontrar algún emulador que permita ejecutar este sistema en sistemas Windows. En este caso, uno de los más usados es el emulador BlueStack, el cual brinda muy buenas funciones, especialmente para ejecutar juegos.

BlueStack, emulación de sistema Android.

Uso de un emulador

Sin lugar a dudas, uno de los mayores usos de los emuladores es en el mundo de los videojuegos. Mediante algunos de estos podemos ejecutar juegos de consolas o algunas máquinas recreativas, dentro de un ordenador o alguna que otra videoconsola. La principal particularidad es que estos videojuegos no han sido creados para ejecutarse dentro de estos ambientes, y el emulador lo hace posible.

Actualmente es más práctico y eficiente “emular” un juego antiguo dentro de un ordenador moderno, que ejecutarlo en los dispositivos originales. No obstante, en este apartado pueden ocurrir requerimientos especiales de derechos de autor. Los programadores de emuladores necesitarían una licencia para poder duplicar funciones de ROM y BIOS del hardware original. Esto es conocido como emulación de alto nivel (high-level emulation).

Otro uso práctico es el de emular sistemas operativos antiguos u obsoletos. Imaginaos que tienen una herramienta de control que funciona sobre sistema operativo MS-DOS y no quieren cambiarla porque esta es inherente a algún dispositivo automatizados. Pues una solución es encontrar un emulador de este sistema, digamos para Windows 10. De esta manera podrán seguir usando la herramienta en un sistema más moderno.

DOSBox, emulador de sistemas DOS.

Funcionamiento de los emuladores

Según algunos planteamientos teóricos, es posible emular cualquier sistema funcional dentro de otro sistema. Esta afirmación, sin embargo, trae aparejado algunos problemas. Por ejemplo, si no se logra que el emulador se ejecute con la misma velocidad que el dispositivo o sistema original, pues el software emulado se ejecutará más lento que en el ambiente original.

Además, si no existe documentación oficial del sistema que será emulado, es necesario aplicar ingeniería inversa para poder replicar su funcionamiento. Esto puede ser un proceso lento y costoso y que no garantiza un resultado totalmente exacto al dispositivo o sistema original.

Generalmente un emulador solo emula una arquitectura específica de hardware. No obstante, de ser necesario también se puede emular el sistema operativo de explotación, que es el sistema original donde se ejecuta el programa emulado. En este caso, el emulador debe ser capaz de interpretar el sistema operativo original y el programa emulado. Esto debe hacerse como si se ejecutara en el dispositivo original.

También deben ser interpretados los dispositivos de entrada y salida conectados al dispositivo que soporta la emulación. Todo esto debe hacerse de forma virtual, ya que en principio se trata de ejecuciones de software. Una solución implementada es establecer una compatibilidad entre el sistema emulado y el sistema base. De esta manera las llamadas al sistema emulado sencillamente se traducirían a llamadas al sistema base.

Generalmente un emulador se estructura en diferentes módulos que emulan subsistemas específicos del sistema base. Comúnmente estos módulos son:

  • Emulador de CPU.
  • Módulo para el subsistema de memoria.
  • Emulación de dispositivos de entrada y salida.

Los buses no son emulados generalmente. Esto simplifica y mejora el rendimiento, ya que los periféricos virtuales establecen una comunicación directa con el CPU y la memoria.

Emulación de CPU

Esta es la parte más compleja del proceso de emulación. Para emular un CPU se emplean simuladores ya pre empaquetados para imprimir eficiencia y fidelidad a la máquina emulada.

Un intérprete informático es un emulador de CPU sencillo. Este da seguimiento al flujo de ejecución del código escrito para la simulación. Dentro de esta secuencia, para cada instrucción del código emulado, se cargan en el procesador instrucciones equivalentes al sistema base.

Una vez que se escribe el código, la lógica del CPU emulado se traduce directamente a algoritmos de software. De esta manera se crea un reimplementación del sistema original.

Esta forma de emulación de CPU se implementa dirigida hacia sistemas mucho más antiguos. Esto es posible ya que la velocidad posible en este tipo de implementación es suficiente para estos sistemas. No obstante, para emular sistemas más modernos y complejos, sería necesario realizar implementaciones mucho más complejas y eficientes.

Una de estas técnicas es la recopilación dinámica. Aplicando este principio, es posible auto-modificar el código de la emulación y así optimizarlo durante la ejecución. También se emplea técnicas de compilación en tiempo de ejecución.

Emulación de los dispositivos de entrada y salida

Para emular los dispositivos de entrada y salida (E/S), cada uno de estos es tratado de manera diferenciada. Esto hace posible adaptar cada dispositivo de E/S al ambiente que está siendo emulado.

No obstante, algunas implementaciones que unifican los dispositivos de E/S mediante la implementación de APIs, proveen modelos más simplificados. Además, esta implementación hace posible utilizar de forma automática plugins para dispositivos virtuales de terceros dentro del emulador.

Aun cuando no se emula el sistema bus principal y que cada dispositivo de E/S es tratado de manera especial, existe una infraestructura básica para el tratamiento de ellos. Esta implementación emplea interruptores mediante banderas legibles por el simulador del CPU. Además, es posible escribir y leer de la memoria física del sistema al mismo tiempo que se maneja la memoria virtual.

Algunos tipos de emuladores

Existen diferentes tipos de emuladores con diferentes usos. Algunos sistemas arrancan a partir del contenido de imágenes ROM. Estas imágenes no son más que archivos binarios que contienen la información que antes se encontraba en los cartuchos o cintas de sistemas antiguos.

En este apartado tenemos los emuladores de videoconsolas. Para este caso, el software de emulación es la consola, por ejemplo, un Game Boy, y la imagen ROM es el juego que antes venía contenido en un cartucho, como Super Mario. Además, existen emuladores que permiten ejecutar juegos de diferentes consolas, es decir, emulan el comportamiento de diferentes dispositivos de juego.

Otro tipo de emulador son las máquinas virtuales. Aquí se emplea la emulación para crear una máquina de manera virtual dentro de una máquina física. Esas máquinas virtuales pueden simular otra máquina física, o máquinas que existen como una especificación. Dentro de estas últimas tenemos como ejemplo la máquina virtual de java o el entorno .NET.  


Artículos relacionados que te podrían resultar interesantes: