据我了解,虚拟机分为“系统虚拟机”或“进程虚拟机”两类。BEAM所在的位置对我来说有点模糊。还有另一种我不知道的虚拟机吗?
3 回答
Erlang VM 作为一个操作系统进程运行。默认情况下,它每个内核运行一个操作系统线程,以实现机器的最大利用率。可以在启动 VM 时设置线程数和它们运行的内核。
Erlang 进程完全由 Erlang VM 实现,与 OS 进程或 OS 线程无关。因此,即使您正在运行一个拥有超过一百万个进程的 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 应用程序的其他进程并行运行(例如,Intel 的 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 的运行时引擎)。
虚拟机类型之间的界限并不明确。例如,语言虚拟机也可以采用虚拟ISA虚拟机的技术,将程序编译成一种虚拟ISA,然后在该虚拟ISA的虚拟机上执行代码。
许多 VM 设计,例如BEAM,跨越了界限。它们可以同时属于第 3 类和第 4 类。
资源:
- 维基百科
- 虚拟机的高级设计和实现;李小峰
我假设您一直在阅读http://en.wikipedia.org/wiki/Virtual_machine - 在该术语下,BEAM 是一个“进程虚拟机”,就像 JVM 一样。