回答:
Erlang VMは1つのOSプロセスとして実行されます。デフォルトでは、コアごとに1つのOSスレッドを実行して、マシンの使用率を最大にします。スレッドの数とスレッドが実行するコアは、VMの起動時に設定できます。
ErlangプロセスはErlang VMによって完全に実装されており、OSプロセスまたはOSスレッドのいずれにも接続していません。したがって、100万を超えるプロセスのErlangシステムを実行している場合でも、コアごとに1つのOSプロセスと1つのスレッドしかありません。つまり、この意味では、Erlang VMは「プロセス仮想マシン」であり、Erlangシステム自体はOSのように非常に動作し、ErlangプロセスはOSプロセスと非常に類似したプロパティ(分離など)を持っています。BEAMに基づくErlang VMが実際にあります。これはベアメタルで実行され、実際にはそれ自体がOSです。XenのErlangを参照してください 。
ちなみに、システムで数百万のErlangプロセスを実行することは完全に可能であり、実際にはWhatsAppなどの一部の製品で実行されています。
基本的なErlang環境を設計するとき、私たちは間違いなくOSについて非常に考えていました。
仮想マシンはコンピューティングシステムです。コンピューティングシステムの最終的な目標は、プログラムされたロジックを実行することです。この観点から、仮想マシンは、抽象化のレベルとエミュレーションの範囲に従って4つのタイプに分類できます。
タイプ1: 完全な命令セットアーキテクチャ(ISA)仮想マシンは、完全なコンピューターシステムのISAエミュレーションまたは仮想化を提供します。ゲストオペレーティングシステムとアプリケーションは、仮想マシンの上で実際のコンピューターとして実行できます(例:VirtualBox、QEMU、XEN)。
タイプ2:アプリケーションバイナリインターフェイス(ABI)仮想マシンは、ゲストプロセスABIエミュレーションを提供します。そのABIに対するアプリケーションは、ネイティブABIアプリケーションの他のプロセス(たとえば、Itanium上のIntelのIA-32実行レイヤー、X86エミュレーション用のTransmetaのコードモーフィング、PowerPCエミュレーション用のAppleのRosetta変換レイヤー)と並行してプロセスで実行できます。
タイプ3:仮想ISA仮想マシンはランタイムエンジンを提供するため、仮想ISAでコーディングされたアプリケーションを実行できます。仮想ISAは通常、ISAセマンティクスの高レベルで限定されたスコープを定義するため、仮想マシンが完全なコンピューターシステム(Sun MicrosystemのJVM、Microsoftの共通言語ランタイム、Parrot FoundationのParrot仮想マシンなど)をエミュレートする必要はありません。
タイプ4:言語仮想マシンは、ゲスト言語で表現されたプログラムを実行するランタイムエンジンを提供します。プログラムは通常、事前に完全にマシンコードにコンパイルされることなく、ゲスト言語のソース形式で仮想マシンに提示されます。ランタイムエンジンは、プログラムを解釈または変換し、メモリ管理などの言語によって抽象化された特定の機能を実行する必要があります(Basic、Lisp、Tcl、Rubyなどのランタイムエンジン)。
仮想マシンタイプ間の境界は明確ではありません。たとえば、言語仮想マシンは、プログラムを一種の仮想ISAにコンパイルし、その仮想ISAの仮想マシンでコードを実行することにより、仮想ISA仮想マシンの手法を採用することもできます。
BEAMなどの多くのVM設計は、境界を越えています。それらは、3番目と4番目のカテゴリの両方に適合します。
ソース:
私はあなたがhttp://en.wikipedia.org/wiki/Virtual_machineを読んでいると思います-その用語では、BEAMはJVMと同じように「プロセス仮想マシン」です。