BEAM(Erlang VM)是一种啥样的虚拟机?

Posted

技术标签:

【中文标题】BEAM(Erlang VM)是一种啥样的虚拟机?【英文标题】:What kind of virtual machine is BEAM (the Erlang VM)?BEAM(Erlang VM)是一种什么样的虚拟机? 【发布时间】:2013-05-22 15:55:34 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

系统级进程和Erlang进程不一样。 Erlang 术语中的进程实际上是用户态进程,而 VM 本身是单个操作系统级进程。 @kjw0188 我明白,但我看不出操作系统进程和语言级进程之间有任何区别。 @EricdesCourtis 更多关于 Erlang 进程的背景信息:***.com/questions/2708033/… @WardBekker 感谢您帮助我了解 Erlang 进程。我只是不确定 Erlang 属于哪种类型的 VM。 我会警惕对虚拟机进行过多分类。他们的工作往往是独一无二的。而且它们通常差异太大,无法归入特定类别。【参考方案2】:

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

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

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

当我们设计基本的 Erlang 环境时,我们肯定非常考虑操作系统。

【讨论】:

@rvirding 这是否意味着底层操作系统对运行在 Erlang VM 之上的应用程序/进程一无所知? @coffeMug ​​不,从操作系统的角度来看,Erlang VM 是一个普通的操作系统进程,就像任何其他操作系统进程一样。与其他操作系统进程一样,它使用操作系统提供的资源,如内存、i/o 设备等。因此,Erlang 中的所有特定流程(如进程/容错/应用程序/等)都在 Erlang VM 进程内处理。 Erlang 在 Xen 上的最大优势是什么 - 是不是更快? 是否可以使用标准进程和操作系统功能(例如进程管理(生成/终止/设置限制)和 IPC(管道/套接字))创建 BEAM+OTP 'workalike' 环境?跨度> @RikHemsley 是的,这是可能的,但仅限于非常有限的应用程序。请记住,在 erlang 系统中拥有 10k、100k 甚至 1M 进程并不少见,因此使用 OS 进程对它们进行建模是不现实的。【参考方案3】:

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

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

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

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

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

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

许多 VM 设计,例如 BEAM,跨越了界限。它们可以同时属于第 3 类和第 4 类。

来源:

    *** 虚拟机的高级设计与实现;李小峰

【讨论】:

它相对较新,这就是为什么它没有很多赞成票的原因。我投了赞成票。 感谢您的解释。正是我想要的。

以上是关于BEAM(Erlang VM)是一种啥样的虚拟机?的主要内容,如果未能解决你的问题,请参考以下文章

python是啥样的编程语言?

Erlang VM (BEAM) 如何构建列表?

Erlang 和 Elixir 介绍

如何限制 Erlang VM (BEAM) 使用的核心数量?

Erlang 更改 VM 进程的初始大小。调整 Erlang 虚拟机

在xp系统下,用啥样的c语言程序呢