什么样的虚拟机是BEAM(Erlang VM)?

时间:2013-05-27 19:08:28

标签: erlang virtual-machine beam

据我所知,虚拟机分为两类:“系统虚拟机”或“进程虚拟机”。 BEAM所在的地方对我来说有点模糊。还有其他我不知道的虚拟机吗?

3 个答案:

答案 0 :(得分:165)

Erlang VM作为一个操作系统进程运行。默认情况下,它为每个核心运行一个OS线程,以实现机器的最大利用率。启动VM时,可以设置线程数以及它们运行的​​核心数。

Erlang进程由Erlang VM实现完全,并且与OS进程或OS线程无关。因此,即使您运行的是超过一百万个进程的Erlang系统,它仍然只有一个操作系统进程和每个核心一个线程。因此,在这个意义上,Erlang VM是一个“进程虚拟机”,而Erlang系统本身就像一个操作系统,Erlang进程具有与OS进程非常相似的属性,例如隔离。实际上有一个基于BEAM的Erlang VM,它运行在裸机上,实际上是一个独立的操作系统,参见 Erlang on Xen

顺便说一句,系统运行数百万个Erlang进程是完全可能的,而且实际上是在某些产品中完成的,例如WhatsApp

我们在设计基本的Erlang环境时非常关注操作系统。

答案 1 :(得分:34)

虚拟机是一种计算系统。计算系统的最终目标是执行编程逻辑。从这个角度来看,虚拟机可以根据抽象级别和仿真范围分为 4种类型

类型1: 完整指令集架构(ISA)虚拟机 提供完整的计算机系统的ISA仿真或虚拟化。客户操作系统和应用程序可以作为实际计算机在虚拟机的顶部运行(例如, VirtualBox,QEMU,XEN )。

类型2:应用程序二进制接口(ABI)虚拟机 提供来宾进程ABI仿真。针对该ABI的应用程序可以与本机ABI应用程序的其他进程并行运行(例如,英特尔在Itanium上的IA-32执行层,Transmeta的X86仿真代码变形,Apple& #39;用于PowerPC仿真的Rosetta转换层)。

类型3:虚拟ISA虚拟机 提供运行时引擎,以便在虚拟ISA中编码的应用程序可以在其上执行。虚拟ISA通常定义高级别且有限范围的ISA语义,因此它不需要虚拟机模拟完整的计算机系统(例如, Sun Microsystem的JVM,Microsoft的公共语言运行时,Parrot Foundation的Parrot虚拟机)。

类型4:语言虚拟机 提供了一个运行时引擎,用于执行以客户语言表示的程序。程序通常以客户语言的源形式呈现给虚拟机,而不是事先完全编译成机器代码。运行时引擎需要解释或转换程序,并且还要满足语言抽象的某些功能,例如内存管理(例如, Basic,Lisp,Tcl,Ruby 的运行时引擎)。

虚拟机类型之间的界限并不明确。例如,语言虚拟机也可以通过将程序编译为一种虚拟ISA来使用虚拟ISA虚拟机的技术然后在该虚拟ISA的虚拟机上执行代码。

许多VM设计,例如 BEAM ,越过边界。它们可以适合第3和第4类。

来源:

  1. 维基百科
  2. 虚拟机的先进设计与实现; Xlao-Feng LI

答案 2 :(得分:8)

我认为你一直在阅读http://en.wikipedia.org/wiki/Virtual_machine - 根据该术语,BEAM是一个"进程虚拟机",就像JVM一样。