Was für eine virtuelle Maschine ist BEAM (die Erlang VM)?

115

Soweit ich weiß, fällt eine virtuelle Maschine in zwei Kategorien, entweder "virtuelle Systemmaschine" oder "virtuelle Prozessmaschine". Es ist irgendwie verschwommen für mich, wo BEAM liegt. Gibt es eine andere Art von virtueller Maschine, die mir nicht bekannt ist?

Eric des Courtis
quelle

Antworten:

177

Die Erlang-VM wird als ein Betriebssystemprozess ausgeführt. Standardmäßig wird ein Betriebssystem-Thread pro Kern ausgeführt, um eine maximale Auslastung des Computers zu erreichen. Die Anzahl der Threads und die Kerne, auf denen sie ausgeführt werden, können beim Starten der VM festgelegt werden.

Erlang-Prozesse werden vollständig von der Erlang-VM implementiert und haben keine Verbindung zu Betriebssystemprozessen oder Betriebssystemthreads. Selbst wenn Sie ein Erlang-System mit über einer Million Prozessen ausführen, ist es immer noch nur ein Betriebssystemprozess und ein Thread pro Kern. In diesem Sinne ist die Erlang-VM eine "virtuelle Prozessmaschine", während sich das Erlang-System selbst sehr ähnlich wie ein Betriebssystem verhält und Erlang-Prozesse sehr ähnliche Eigenschaften wie Betriebssystemprozesse haben, z. B. Isolation. Es gibt tatsächlich eine Erlang-VM, die auf dem BEAM basiert, auf Bare-Metal ausgeführt wird und tatsächlich ein eigenständiges Betriebssystem ist, siehe Erlang auf Xen .

Übrigens ist es durchaus möglich, dass Systeme Millionen von Erlang-Prozessen ausführen, und dies geschieht tatsächlich in einigen Produkten, beispielsweise WhatsApp .

Wir haben definitiv sehr viel über Betriebssysteme nachgedacht, als wir die grundlegende Erlang-Umgebung entworfen haben.

rvirding
quelle
1
@rvirding Bedeutet dies, dass das zugrunde liegende Betriebssystem nichts über die Anwendungen / Prozesse weiß, die auf der Erlang VM ausgeführt werden?
Kaffee Tasse
7
@coffeMug Nein, aus Sicht des Betriebssystems ist die Erlang-VM wie jeder andere Betriebssystemprozess ein normaler Betriebssystemprozess. Wie bei anderen Betriebssystemprozessen werden vom Betriebssystem bereitgestellte Ressourcen wie Speicher, E / A-Geräte usw. verwendet. Daher wird alles, was Erlang-spezifisch ist, wie Prozesse / Fehlertoleranz / Anwendungen / usw., im Erlang-VM-Prozess behandelt.
Rvirding
1
Was ist der große Gewinn mit Erlang auf Xen - ist es nur schneller?
Jononomo
1
Wäre es möglich, eine BEAM + OTP-Arbeitsumgebung mit Standardprozessen und Betriebssystemfunktionen wie Prozessmanagement (Spawn / Kill / Set Limits) und IPC (Pipes / Sockets) zu erstellen?
Rik Hemsley
3
@RikHemsley Ja, es wäre möglich, aber nur für sehr begrenzte Anwendungen. Denken Sie daran, dass es nicht ungewöhnlich ist, 10.000, 100.000 oder sogar 1 Million Prozesse in erlang-Systemen zu haben, sodass eine Modellierung mit Betriebssystemprozessen nicht realistisch wäre.
Rvirding
43

Die virtuelle Maschine ist ein Computersystem. Das ultimative Ziel eines Computersystems ist die Ausführung programmierter Logik. Aus dieser Perspektive können virtuelle Maschinen je nach Abstraktionsebene und Emulationsumfang in vier Typen eingeteilt werden:

Typ 1: Die virtuelle ISA-Maschine (Full Instruction Set Architecture) bietet die ISA-Emulation oder -Virtualisierung eines vollständigen Computersystems. Gastbetriebssysteme und -anwendungen können als tatsächlicher Computer (z. B. VirtualBox, QEMU, XEN ) auf der virtuellen Maschine ausgeführt werden .

Typ 2: Die virtuelle ABI-Maschine (Application Binary Interface) bietet eine Gastprozess-ABI-Emulation. Anwendungen gegen diesen ABI können im Prozess neben anderen Prozessen nativer ABI-Anwendungen ausgeführt werden (z. B. Intels IA-32-Ausführungsschicht auf Itanium, Transmetas Code Morphing für X86-Emulation, Apples Rosetta-Übersetzungsschicht für PowerPC-Emulation ).

Typ 3: Virtuelle virtuelle ISA-Maschine bietet eine Laufzeit-Engine, damit in der virtuellen ISA codierte Anwendungen darauf ausgeführt werden können. Virtuelle ISA definiert normalerweise einen hohen und begrenzten Umfang der ISA-Semantik, sodass die virtuelle Maschine kein vollständiges Computersystem emulieren muss (z. B. JVM von Sun Microsystem, Common Language Runtime von Microsoft, Parrot Foundation, virtuelle Maschine von Parrot Foundation).

Typ 4: Language Virtual Machine bietet eine Laufzeit-Engine, die Programme ausführt, die in einer Gastsprache ausgedrückt werden. Die Programme werden der virtuellen Maschine normalerweise in der Quellform der Gastsprache präsentiert, ohne zuvor vollständig in Maschinencode kompiliert worden zu sein. Die Laufzeit-Engine muss das Programm interpretieren oder übersetzen und bestimmte Funktionen erfüllen, die von der Sprache abstrahiert werden, z. B. die Speicherverwaltung (z. B. die Laufzeit-Engines für Basic, Lisp, Tcl, Ruby ).

Die Grenzen zwischen den Typen virtueller Maschinen sind nicht eindeutig. Beispielsweise kann eine virtuelle Sprachmaschine auch die Technik einer virtuellen virtuellen ISA-Maschine verwenden, indem das Programm zu einer Art virtueller ISA kompiliert und dann der Code auf einer virtuellen Maschine dieser virtuellen ISA ausgeführt wird.

Viele VM-Designs wie BEAM überschreiten die Grenzen. Sie könnten sowohl in die 3. als auch in die 4. Kategorie eingeteilt werden.

Quelle:

  1. Wikipedia
  2. Fortgeschrittenes Design und Implementierung virtueller Maschinen; Xlao-Feng LI
Mahyar
quelle
Es ist relativ neu, weshalb es nicht viele positive Stimmen hat. Ich habe es positiv bewertet.
Eric des Courtis
Danke für die Erklärung. Genau das, wonach ich gesucht habe.
Nhm Tanveer
10

Ich gehe davon aus, dass Sie http://en.wikipedia.org/wiki/Virtual_machine gelesen haben - unter dieser Terminologie ist BEAM genau wie die JVM eine "virtuelle Prozessmaschine".

RichardC
quelle
2
Prozesse auf Systemebene und Erlang-Prozesse sind nicht identisch. Die Prozesse in der Erlang-Terminologie sind tatsächlich Benutzerlandprozesse, und die VM selbst ist ein Prozess auf Betriebssystemebene.
kjw0188
2
@ kjw0188 Ich verstehe, aber ich sehe keinen Unterschied zwischen Betriebssystemprozess und Sprachprozess.
Eric des Courtis
1
@EricdesCourtis Weitere Hintergrundinformationen zu Erlang-Prozessen: stackoverflow.com/questions/2708033/…
Ward Bekker
1
@ WardBekker Danke für die Hilfe, die ich zum Verständnis von Erlang-Prozessen habe. Ich war mir einfach nicht sicher, in welche Art von VM-Kategorie Erlang fiel.
Eric des Courtis
2
Ich wäre vorsichtig, wenn ich virtuelle Maschinen zu sehr kategorisieren würde. Sie neigen dazu, in dem, was sie tun, einzigartig zu sein. Und sie sind oft zu unterschiedlich, um sie einer bestimmten Kategorie zuzuordnen.
Ich gebe Crap Antworten