BEAM(Erlang VM)とはどのような仮想マシンですか?


115

私の理解では、仮想マシンは「システム仮想マシン」または「プロセス仮想マシン」の2つのカテゴリに分類されます。ビームがどこにあるのか、それはぼんやりしている。私が知らない別の種類の仮想マシンはありますか?

回答:


177

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について非常に考えていました。


1
@rvirdingこれは、基盤となるOSがErlang VM上で実行されているアプリケーション/プロセスについて何も知らないということですか?
coffeMug ​​2013年

7
@coffeMugいいえ、OSの観点から見ると、Erlang VMは他のOSプロセスと同じように通常のOSプロセスです。他のOSプロセスと同様に、メモリ、I / Oデバイスなど、OSによって提供されるリソースを使用します。そのため、プロセス/フォールトトレランス/アプリケーションなどの具体的にすべてのErlangは、Erlang VMプロセス内で処理されます。
2013年

1
Xen上のErlangでの大きな勝利は何ですか?それはちょうど速いですか?
jononomo 2017

1
標準プロセスと、プロセス管理(spawn / kill / set制限)やIPC(パイプ/ソケット)などのOS機能を使用して、BEAM + OTPの「動作の良い」環境を作成することはできますか?
Rik Hemsley 2017年

3
@RikHemsleyはい、それは可能ですが、非常に限られたアプリケーションに対してのみです。erlangシステムで10k、100k、または100万のプロセスを使用することは珍しいことではないので、OSプロセスでそれらをモデル化することは現実的ではありません。
11:09に仮想化

43

仮想マシンはコンピューティングシステムです。コンピューティングシステムの最終的な目標は、プログラムされたロジックを実行することです。この観点から、仮想マシンは、抽象化のレベルとエミュレーションの範囲に従って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番目のカテゴリの両方に適合します。

ソース:

  1. ウィキペディア
  2. 仮想マシンの高度な設計と実装。Xlao-Feng LI

比較的新しいので、賛成票があまりありません。私はそれを賛成した。
エリックデコート2017

説明ありがとう。まさに私が探していたもの。
nhm tanveer

10

私はあなたがhttp://en.wikipedia.org/wiki/Virtual_machineを読んでいると思います-その用語では、BEAMはJVMと同じように「プロセス仮想マシン」です。


2
システムレベルのプロセスとErlangプロセスは同じではありません。Erlang用語のプロセスは、実際にはユーザーランドプロセスであり、VM自体は単一のオペレーティングシステムレベルのプロセスです。
kjw0188 2013年

2
@ kjw0188理解しましたが、OSプロセスと言語レベルプロセスの違いはわかりません。
Eric des Courtis 2013年

1
Erlangのプロセスに関する詳細な背景を@EricdesCourtis:stackoverflow.com/questions/2708033/...
ウォードベッカー

1
@WardBekker Erlangプロセスの理解にご協力いただきありがとうございます。私は、Erlangがどのような種類のVMカテゴリに分類されるのかわからなかっただけです。
Eric des Courtis、2013年

2
仮想マシンの分類に注意しすぎます。彼らは彼らが何をするかでユニークである傾向があります。そして、それらはしばしば特定のカテゴリーに入れるにはあまりにも異なっています。
2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.