web-dev-qa-db-ja.com

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

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

110

Erlang VMは、1つのOSプロセスとして実行されます。デフォルトでは、マシンの最大使用率を達成するために、コアごとに1つのOSスレッドを実行します。 VMの起動時に、スレッドの数とそれらが実行するコアを設定できます。

Erlangプロセスは、Erlang VMによって完全に実装され、OSプロセスまたはOSスレッドに接続しません。したがって、100万を超えるプロセスのErlangシステムを実行している場合でも、コアごとに1つのOSプロセスと1つのスレッドだけです。したがって、この意味で、Erlang VMは「プロセス仮想マシン」であり、Erlangシステム自体はOSのように動作し、ErlangプロセスはOSプロセスと非常によく似た特性、たとえば分離を持っています。ベアメタルに基づいて動作し、実際にはそれ自体がOSである、BEAMに基づくErlang VMが実際にあります。 Erlang on Xen を参照してください。

ところで、システムで何百万ものErlangプロセスを実行することは完全に可能であり、実際には一部の製品で実行されます。たとえば、 WhatsApp です。

基本的なErlang環境を設計したとき、OSについて非常に考えていました。

170
rvirding

仮想マシンはコンピューティングシステムです。コンピューティングシステムの究極の目標は、プログラムされたロジックを実行することです。この観点から、仮想マシンは抽象化のレベルとエミュレーションの範囲に応じて4タイプに分類できます。

タイプ1:フル命令セットアーキテクチャ(ISA)仮想マシンは、完全なコンピューターシステムのISAエミュレーションを提供します。仮想化。ゲストオペレーティングシステムとアプリケーションは、実際のコンピューターとして仮想マシンの上部で実行できます(例:VirtualBox、QEMU、XEN)。

タイプ2:Application Binary Interface(ABI)仮想マシンは、ゲストプロセスABIエミュレーションを提供します。そのABIに対するアプリケーションは、ネイティブABIアプリケーションの他のプロセスと並行してプロセスで実行できます(たとえば、Itanium上のインテルのIA-32実行レイヤー、X86エミュレーション用のTransmetaのコードモーフィング、PowerPCエミュレーション用のAppleのRosetta翻訳レイヤー)。

タイプ3:Virtual ISA virtual machineは、仮想ISAでコーディングされたアプリケーションが実行できるようにランタイムエンジンを提供します。その上。仮想ISAは通常、ISAセマンティクスの高レベルで限定された範囲を定義するため、仮想マシンが完全なコンピューターシステムをエミュレートする必要はありません(たとえば、Sun Microsystem's JVM 、Microsoftの共通言語ランタイム、Parrot FoundationのParrot仮想マシン)。

タイプ4:Language Virtual Machineは、ゲスト言語で表現されたプログラムを実行するランタイムエンジンを提供します。プログラムは通常、事前にマシンコードに完全にコンパイルされることなく、ゲスト言語のソース形式で仮想マシンに提示されます。ランタイムエンジンは、プログラムを解釈または翻訳する必要があり、また、メモリ管理などの言語によって抽象化された特定の機能を果たす必要があります(例:Basic、LISP、Tcl、Rubyのランタイムエンジン)。

仮想マシンタイプ間の境界は明確ではありません。たとえば、言語仮想マシンは、プログラムを種類にコンパイルすることにより、仮想ISA仮想マシンの手法も使用できます。仮想ISAの後に、その仮想ISAの仮想マシンでコードを実行します。

[〜#〜] beam [〜#〜]など、多くのVMデザインが境界を越えています。これらは、3番目と4番目の両方のカテゴリに適合する可能性があります。

ソース:

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

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

8
RichardC