BEAM(Erlang VM)是哪种虚拟机?


115

据我了解,虚拟机分为两类:“系统虚拟机”或“进程虚拟机”。BEAM所在的位置对我来说有点模糊。还有我不知道的另一种虚拟机吗?

Answers:


177

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

Erlang进程完全由Erlang VM 实现,与OS进程或OS线程没有任何连接。因此,即使您运行的Erlang系统的进程数超过一百万,它仍然只是一个OS进程和每个内核一个线程。因此,从这个意义上说,Erlang VM是一个“进程虚拟机”,而Erlang系统本身的行为就像一个OS,而Erlang进程具有与OS进程非常相似的属性,例如隔离。实际上有一个基于BEAM的Erlang VM,它在裸机上运行,​​并且实际上本身就是一个OS,请参阅 Xen上的Erlang

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

在设计基本的Erlang环境时,我们肯定对OS进行了很多思考。


1
@rvirding这是否意味着底层操作系统对在Erlang VM上运行的应用程序/进程一无所知?
coffeMug

7
@coffeMug不,从OS的角度来看,Erlang VM是一个正常的OS进程,就像其他任何OS进程一样。像其他OS进程一样,它使用OS所提供的资源,例如内存,I / O设备等。因此,所有特定于Erlang的东西(例如进程/容错/应用程序/等)都在Erlang VM进程内处理。
rvirding 2013年

1
在Xen上,Erlang的最大胜利-是更快吗?
jononomo

1
是否可以使用标准流程和OS功能(例如流程管理(生成/杀死/设置限制)和IPC(管道/插槽))创建BEAM + OTP“类似工作环境”?
里克·海姆斯利

3
@RikHemsley是的,有可能,但仅适用于非常有限的应用程序。请记住,在erlang系统中拥有10k,100k甚至1M的进程并不少见,因此使用OS进程进行建模是不现实的。
rvirding

43

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

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

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

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

类型4:语言虚拟机提供了一个运行时引擎,该引擎可以执行以来宾语言表示的程序。程序通常以来宾语言的源代码形式呈现给虚拟机,而无需事先完全编译为机器代码。运行时引擎需要解释或翻译程序,并且还必须满足某些语言所抽象的功能,例如内存管理(例如,Basic,Lisp,Tcl,Ruby的运行时引擎)。

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

许多VM设计(例如BEAM)都跨越了边界。它们可以同时适合第三和第四类别。

资源:

  1. 维基百科
  2. 虚拟机的高级设计和实现;李晓峰

它是相对较新的,这就是为什么它没有很多支持的原因。我赞成。
埃里克·德·科迪斯

感谢您的解释。正是我想要的。
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
@EricdesCourtis约Erlang进程的更多背景:stackoverflow.com/questions/2708033/...
沃德贝克

1
@WardBekker感谢您对我了解Erlang流程的帮助。我只是不确定Erlang属于哪种类型的VM。
Eric des Courtis 2013年

2
我将对虚拟机的分类过多保持警惕。他们在工作上往往是独一无二的。而且它们通常相差太大,无法放入特定类别。
我给予解答答案
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.