Che tipo di macchina virtuale è BEAM (la VM Erlang)?


115

Da quello che ho capito una macchina virtuale rientra in due categorie o "macchina virtuale di sistema" o "macchina virtuale di processo". È un po 'confuso per me dove si trova BEAM. C'è un altro tipo di macchina virtuale di cui non sono a conoscenza?

Risposte:


177

La VM Erlang viene eseguita come un processo del sistema operativo. Per impostazione predefinita, esegue un thread del sistema operativo per core per ottenere il massimo utilizzo della macchina. Il numero di thread e su quali core vengono eseguiti può essere impostato all'avvio della VM.

I processi Erlang sono implementati interamente dalla VM Erlang e non hanno connessione né ai processi del sistema operativo né ai thread del sistema operativo. Quindi, anche se stai eseguendo un sistema Erlang con oltre un milione di processi, è ancora un solo processo del sistema operativo e un thread per core. Quindi in questo senso la VM Erlang è una "macchina virtuale di processo" mentre il sistema Erlang stesso si comporta molto come un sistema operativo ei processi Erlang hanno proprietà molto simili ai processi del sistema operativo, ad esempio l'isolamento. In realtà esiste una VM Erlang, basata su BEAM, che gira su bare metal ed è in realtà un sistema operativo a sé stante, vedi Erlang su Xen .

A proposito, è perfettamente possibile avere sistemi che eseguono milioni di processi Erlang e in realtà è fatto in alcuni prodotti, ad esempio WhatsApp .

Stavamo decisamente pensando molto ai sistemi operativi quando abbiamo progettato l'ambiente di base di Erlang.


1
@rvirding Ciò significa che il sistema operativo sottostante non sa nulla delle applicazioni / processi in esecuzione su Erlang VM?
coffeMug

7
@coffeMug No, dal punto di vista del sistema operativo, la VM Erlang è un normale processo del sistema operativo, proprio come qualsiasi altro processo del sistema operativo. Come altri processi del sistema operativo, utilizza le risorse fornite dal sistema operativo come la memoria, i dispositivi i / o, ecc. Quindi tutto ciò che specificamente Erlang come processi / tolleranza agli errori / applicazioni / ecc. Viene gestito all'interno del processo Erlang VM.
arrivo il

1
Qual è la grande vittoria con Erlang su Xen - è solo più veloce?
jononomo

1
Sarebbe possibile creare un ambiente BEAM + OTP "simile" utilizzando processi standard e funzionalità del sistema operativo come la gestione dei processi (spawn / kill / set limits) e IPC (pipe / socket)?
Rik Hemsley

3
@RikHemsley Sì, sarebbe possibile ma solo per applicazioni molto limitate. Ricorda che avere 10k, 100k o anche 1 milione di processi nei sistemi erlang non è raro, quindi modellarli con i processi del sistema operativo non sarebbe realistico.
arrivo

43

La macchina virtuale è un sistema informatico. L'obiettivo finale di un sistema informatico è eseguire la logica programmata. Da questo punto di vista, le macchine virtuali possono essere classificate in 4 tipi in base al livello di astrazione e alla portata dell'emulazione:

Tipo 1: macchina virtuale ISA (Full Instruction Set Architecture) fornisce l'emulazione o virtualizzazione ISA di un sistema informatico completo. I sistemi operativi e le applicazioni guest possono essere eseguiti sulla parte superiore della macchina virtuale come un computer reale (ad esempio, VirtualBox, QEMU, XEN ).

Tipo 2: la macchina virtuale ABI (Application Binary Interface) fornisce un'emulazione ABI del processo guest. Le applicazioni contro tale ABI possono essere eseguite nel processo fianco a fianco con altri processi di applicazioni ABI native (ad esempio, Intel IA-32 Execution Layer su Itanium, Transmeta's Code Morphing per l'emulazione X86, Apple's Rosetta Translation Layer per l'emulazione PowerPC ).

Tipo 3: la macchina virtuale ISA virtuale fornisce un motore di runtime in modo che le applicazioni codificate nell'ISA virtuale possano essere eseguite su di essa. Virtual ISA di solito definisce un ambito di alto livello e limitato della semantica ISA, quindi non richiede che la macchina virtuale emuli un sistema informatico completo (ad esempio, JVM di Sun Microsystem, Common Language Runtime di Microsoft, macchina virtuale Parrot di Parrot Foundation).

Tipo 4: Language Virtual Machine fornisce un motore di runtime che esegue programmi espressi in una lingua guest. I programmi vengono solitamente presentati alla macchina virtuale nella forma sorgente del linguaggio guest, senza essere stati completamente compilati in anticipo nel codice macchina. Il motore di runtime deve interpretare o tradurre il programma e soddisfare anche alcune funzionalità astratte dal linguaggio come la gestione della memoria (ad esempio, i motori di runtime per Basic, Lisp, Tcl, Ruby ).

I confini tra i tipi di macchine virtuali non sono netti. Ad esempio, una macchina virtuale in linguaggio può anche utilizzare la tecnica di una macchina virtuale ISA virtuale compilando il programma in una sorta di ISA virtuale e quindi eseguendo il codice su una macchina virtuale di tale ISA virtuale.

Molti progetti VM, come BEAM , superano i confini. Potrebbero essere inseriti in entrambe le categorie 3a e 4a.

fonte:

  1. Wikipedia
  2. Progettazione avanzata e implementazione di macchine virtuali; Xlao-Feng LI

È relativamente nuovo, motivo per cui non ha molti voti positivi. L'ho votato positivamente.
Eric des Courtis,

Grazie per la spiegazione. Esattamente quello che stavo cercando.
nhm tanveer

10

Presumo che tu stia leggendo http://en.wikipedia.org/wiki/Virtual_machine - con questa terminologia, BEAM è una "macchina virtuale di processo", proprio come la JVM.


2
I processi a livello di sistema ei processi Erlang non sono la stessa cosa. I processi nella terminologia Erlang sono in realtà processi di terra dell'utente e la VM stessa è un processo a livello di sistema operativo singolo.
kjw0188

2
@ kjw0188 Capisco ma non vedo alcuna distinzione tra processo del sistema operativo e processo a livello di lingua.
Eric des Courtis

1
@EricdesCourtis Ulteriori informazioni sui processi di Erlang: stackoverflow.com/questions/2708033/…
Ward Bekker

1
@ WardBekker Grazie per l'aiuto ho capito i processi di Erlang. Non ero sicuro del tipo di VM in cui rientrasse Erlang.
Eric des Courtis

2
Sarei diffidente nel categorizzare troppo le macchine virtuali. Tendono ad essere unici in quello che fanno. E spesso sono troppo diversi per essere inseriti in una categoria specifica.
RISPOSTO CRAP
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.