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.
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:
quelle
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".
quelle