【发布时间】:2013-05-22 15:55:34
【问题描述】:
据我了解,虚拟机分为“系统虚拟机”或“进程虚拟机”两类。 BEAM所在的位置对我来说有点模糊。还有另一种我不知道的虚拟机吗?
【问题讨论】:
标签: erlang virtual-machine beam
据我了解,虚拟机分为“系统虚拟机”或“进程虚拟机”两类。 BEAM所在的位置对我来说有点模糊。还有另一种我不知道的虚拟机吗?
【问题讨论】:
标签: erlang virtual-machine beam
我假设您一直在阅读 http://en.wikipedia.org/wiki/Virtual_machine - 根据该术语,BEAM 是一个“进程虚拟机”,就像 JVM。
【讨论】:
Erlang VM 作为一个操作系统进程运行。默认情况下,它每个内核运行一个操作系统线程,以实现机器的最大利用率。可以在 VM 启动时设置线程数和它们运行的内核。
Erlang 进程完全由 Erlang 虚拟机实现,与操作系统进程或操作系统线程没有任何连接。因此,即使您正在运行一个拥有超过一百万个进程的 Erlang 系统,它仍然只有一个 OS 进程和每个内核一个线程。所以从这个意义上说,Erlang VM 是一个“进程虚拟机”,而 Erlang 系统本身的行为非常像操作系统,并且 Erlang 进程具有与操作系统进程非常相似的属性,例如隔离。实际上有一个基于 BEAM 的 Erlang VM,它在裸机上运行,实际上它本身就是一个操作系统,请参阅 Erlang on Xen.
顺便说一句,完全有可能让系统运行数百万个 Erlang 进程,并且实际上在某些产品中已经完成,例如 WhatsApp。
当我们设计基本的 Erlang 环境时,我们肯定非常考虑操作系统。
【讨论】:
虚拟机是一种计算系统。计算系统的最终目标是执行编程逻辑。从这个角度来看,虚拟机可以根据抽象级别和模拟范围分为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 类。
来源:
【讨论】: