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

从我所了解的虚拟机分为“系统虚拟机”或“进程虚拟机”两类。 BEAM所在的地方对我来说很模糊。 有没有另一种我不知道的虚拟机?

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

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

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

当我们devise基本的Erlang环境时,我们确实非常在意操作系统。

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

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

types2: 应用程序二进制接口(ABI)虚拟机提供客户进程ABI仿真。 针对该ABI的应用程序可以与本地ABI应用程序的其他进程(例如, Itanium上的Intel IA-32 Execution Layer,用于X86仿真的Transmeta的Code Morphing,用于PowerPC仿真的Apple Rosetta转换层 )并行运行。

types3: 虚拟ISA虚拟机提供了一个运行时引擎,以便在虚拟ISA中编写的应用程序可以在其上执行。 虚拟ISA通常定义一个高级别的有限范围的ISA语义,因此它不需要虚拟机来模拟一个完整的计算机系统(例如, Sun Microsystem的JVM,微软的Common Language Runtime,Parrot Foundation的Parrot虚拟机)。

types4: 语言虚拟机提供了一个运行时引擎,用于执行用客户语言expression的程序。 程序通常以客户语言的源代码forms呈现给虚拟机,而不是事先被完全编译成机器代码。 运行时引擎需要解释或翻译程序,并且还要实现语言抽象的某些function,例如内存pipe理(例如Basic,Lisp,Tcl,Ruby的运行时引擎 )。

虚拟机types之间的界限并不清晰。 例如,语言虚拟机也可以采用虚拟ISA虚拟机的技术,将该程序编译成一种虚拟的ISA,然后在该虚拟的ISA的虚拟机上执行该代码。

许多VMdevise(例如BEAM )越过了边界。 他们可能适合第三和第四类。

资源:

  1. 维基百科
  2. 虚拟机的高级devise和实现; 李爱凤
Interesting Posts