Por lo que entiendo, una máquina virtual se divide en dos categorías: "máquina virtual del sistema" o "máquina virtual de proceso". Es un poco confuso para mí dónde se encuentra BEAM. ¿Existe otro tipo de máquina virtual que no conozca?
Por lo que entiendo, una máquina virtual se divide en dos categorías: "máquina virtual del sistema" o "máquina virtual de proceso". Es un poco confuso para mí dónde se encuentra BEAM. ¿Existe otro tipo de máquina virtual que no conozca?
Respuestas:
La máquina virtual Erlang se ejecuta como un proceso de sistema operativo. De forma predeterminada, ejecuta un subproceso del sistema operativo por núcleo para lograr la máxima utilización de la máquina. La cantidad de subprocesos y en qué núcleos se ejecutan se puede establecer cuando se inicia la VM.
Los procesos de Erlang son implementados en su totalidad por Erlang VM y no tienen conexión ni con los procesos ni con los subprocesos del sistema operativo. Entonces, incluso si está ejecutando un sistema Erlang de más de un millón de procesos, sigue siendo solo un proceso de sistema operativo y un hilo por núcleo. Entonces, en este sentido, Erlang VM es una "máquina virtual de proceso", mientras que el propio sistema Erlang se comporta como un SO y los procesos Erlang tienen propiedades muy similares a los procesos del SO, por ejemplo, el aislamiento. En realidad, existe una máquina virtual Erlang, basada en BEAM, que se ejecuta en bare metal y, de hecho, es un sistema operativo por derecho propio, consulte Erlang en Xen .
Por cierto, es perfectamente posible tener sistemas que ejecuten millones de procesos de Erlang y de hecho se hace en algunos productos, por ejemplo WhatsApp .
Definitivamente estábamos pensando mucho en los sistemas operativos cuando diseñamos el entorno básico de Erlang.
La máquina virtual es un sistema informático. El objetivo final de un sistema informático es ejecutar la lógica programada. Desde esta perspectiva, las máquinas virtuales se pueden categorizar en 4 tipos según el nivel de abstracción y el alcance de la emulación:
Tipo 1: La máquina virtual de Arquitectura de conjunto de instrucciones completo (ISA) proporciona una emulación o virtualización ISA de un sistema informático completo. Los sistemas operativos y las aplicaciones invitados pueden ejecutarse en la parte superior de la máquina virtual como una computadora real (por ejemplo, VirtualBox, QEMU, XEN ).
Tipo 2: La máquina virtual de interfaz binaria de aplicación (ABI) proporciona una emulación ABI de proceso invitado. Las aplicaciones contra esa ABI pueden ejecutarse en el proceso junto con otros procesos de aplicaciones ABI nativas (p. Ej., IA-32 Execution Layer de Intel en Itanium, Code Morphing de Transmeta para emulación X86, capa de traducción Rosetta de Apple para emulación PowerPC ).
Tipo 3: La máquina virtual de ISA virtual proporciona un motor de tiempo de ejecución para que las aplicaciones codificadas en el ISA virtual puedan ejecutarse en ella. Virtual ISA generalmente define un alto nivel y un alcance limitado de la semántica ISA, por lo que no requiere que la máquina virtual emule un sistema informático completo (por ejemplo, JVM de Sun Microsystem, Common Language Runtime de Microsoft, máquina virtual Parrot de Parrot Foundation).
Tipo 4: Language Virtual Machine proporciona un motor de tiempo de ejecución que ejecuta programas expresados en un idioma invitado. Los programas generalmente se presentan a la máquina virtual en forma de fuente del lenguaje invitado, sin estar completamente compilados en código de máquina de antemano. El motor de tiempo de ejecución necesita interpretar o traducir el programa y también cumplir con ciertas funcionalidades que son abstraídas por el lenguaje, como la gestión de memoria (por ejemplo, los motores de tiempo de ejecución para Basic, Lisp, Tcl, Ruby ).
Los límites entre los tipos de máquinas virtuales no están bien definidos. Por ejemplo, una máquina virtual de lenguaje también puede emplear la técnica de una máquina virtual ISA virtual compilando el programa en una especie de ISA virtual y luego ejecutando el código en una máquina virtual de esa ISA virtual.
Muchos diseños de VM, como BEAM , cruzan los límites. Podrían encajar en las categorías 3 y 4.
fuente:
Supongo que ha estado leyendo http://en.wikipedia.org/wiki/Virtual_machine - bajo esa terminología, BEAM es una "máquina virtual de proceso", al igual que la JVM.