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

Eri*_*tis 111 erlang virtual-machine beam

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

rvi*_*ing 171

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

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

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

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

  • 我不知道关于Xen的Erlang!听起来很神奇! (11认同)
  • @coffeMug不,从操作系统的角度来看,Erlang VM是一个正常的操作系统进程,就像任何其他操作系统进程一样.与其他操作系统进程一样,它使用操作系统提供的资源,如内存,I/O设备等.因此,Erlang的所有内容(如进程/容错/应用程序/等)都在Erlang VM进程内处理. (6认同)
  • @RikHemsley是的,有可能,但仅适用于非常有限的应用程序。请记住,在erlang系统中具有10k,100k甚至1M的进程并不少见,因此使用OS进程进行建模是不现实的。 (2认同)

Mah*_*yar 37

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

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

类型2:应用程序二进制接口(ABI)虚拟机提供客户进程ABI仿真.针对该ABI的应用程序可以与本机ABI应用程序的其他进程并行运行(例如,英特尔的Itanium上的IA-32执行层,Transmeta的X86仿真代码变形,用于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,跨越了边界.它们可以适合第3和第4类.

资源:

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


Ric*_*rdC 9

我假设您一直在阅读http://en.wikipedia.org/wiki/Virtual_machine - 根据该术语,BEAM是一个"流程虚拟机",就像JVM一样.

  • 系统级进程和Erlang进程不同。Erlang术语中的进程实际上是用户登陆进程,而VM本身是单个操作系统级别的进程。 (2认同)
  • @ kjw0188我理解但是我没有看到OS进程和语言级别进程之间有任何区别. (2认同)
  • 我会过分分析虚拟机.他们的行为往往是独一无二的.而且它们往往太不同,无法进入特定类别. (2认同)