¿Qué tipo de máquina virtual es BEAM (Erlang VM)?

115

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?

Eric des Courtis
fuente

Respuestas:

177

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.

rvirding
fuente
1
@rvirding ¿Significa esto que el sistema operativo subyacente no sabe nada sobre las aplicaciones / procesos que se ejecutan en la parte superior de Erlang VM?
coffeMug
7
@coffeMug No, desde el punto de vista del sistema operativo, Erlang VM es un proceso normal del sistema operativo como cualquier otro proceso del sistema operativo. Al igual que otros procesos del sistema operativo, utiliza recursos proporcionados por el sistema operativo como memoria, dispositivos de E / S, etc. Así que todo específicamente Erlang como procesos / tolerancia a fallas / aplicaciones / etc. se maneja dentro del proceso de Erlang VM.
viernes
1
¿Cuál es la gran victoria con Erlang en Xen? ¿Es más rápido?
Jononomo
1
¿Sería posible crear un entorno BEAM + OTP 'similar al trabajo' utilizando procesos estándar y características del sistema operativo como la gestión de procesos (generación / eliminación / establecimiento de límites) e IPC (tuberías / sockets)?
Rik Hemsley
3
@RikHemsley Sí, sería posible, pero solo para aplicaciones muy limitadas. Recuerde que tener procesos de 10k, 100k o incluso 1M en sistemas erlang no es infrecuente, por lo que modelarlos con procesos de SO no sería realista.
viernes
43

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:

  1. Wikipedia
  2. Diseño e Implementación Avanzada de Máquinas Virtuales; Xlao-Feng LI
Mahyar
fuente
Es relativamente nuevo, por lo que no tiene muchos votos a favor. Lo voté a favor.
Eric des Courtis
Gracias por la explicación. Exactamente lo que estaba buscando.
nhm tanveer
10

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.

RichardC
fuente
2
Los procesos de nivel de sistema y los procesos de Erlang no son lo mismo. Los procesos en la terminología de Erlang son en realidad procesos de la tierra del usuario, y la máquina virtual en sí es un proceso de nivel de sistema operativo único.
kjw0188
2
@ kjw0188 Entiendo, pero no veo ninguna distinción entre el proceso del sistema operativo y el proceso de nivel de idioma.
Eric des Courtis
1
@EricdesCourtis Más información sobre los procesos de Erlang: stackoverflow.com/questions/2708033/…
Ward Bekker
1
@WardBekker Gracias por la ayuda. Entiendo los procesos de Erlang. Simplemente no estaba seguro de en qué tipo de categoría de máquina virtual se encontraba Erlang.
Eric des Courtis
2
Sería cauteloso al categorizar demasiado las máquinas virtuales. Suelen ser únicos en lo que hacen. Y a menudo son demasiado diferentes para ponerlos en una categoría específica.
DOY RESPUESTAS MALGAS