根据我的理解,虚拟机可以分为"系统虚拟机"one_answers"进程虚拟机"两类。我不太清楚BEAM在哪里。还有其他我不知道的虚拟机吗?
Erlang虚拟机作为一个操作系统进程运行。默认情况下,每个内核运行一个操作系统线程,以实现机器的最大利用率。可以在虚拟机启动时设置线程数和内核。
Erlang进程完全由Erlang VM实现,不与OS进程或OS线程连接。因此,即使您运行的Erlang系统有超过一百万个进程,它仍然只有一个操作系统进程,每个内核只有一个线程。因此,从这个意义上讲,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:Virtual ISA虚拟机提供一个运行时引擎,以便在虚拟ISA中编码的应用程序可以在其上执行。虚拟ISA通常定义一个高层次和有限范围的ISA语义,所以它不需要虚拟机模拟一个完整的计算机系统(例如,Sun微系统的JVM,微软的公共语言运行时,Parrot基金会的Parrot虚拟机)。
类型4:语言虚拟机提供一个运行时引擎,执行用来宾语言表达的程序。这些程序通常以客户语言的源代码形式呈现给虚拟机,而不需要事先完全编译成机器码。运行时引擎需要解释或翻译程序,还需要实现语言抽象的某些功能,如内存管理(例如, Basic, Lisp, Tcl, Ruby的运行时引擎)。
虚拟机类型之间的界限并不明确。例如,语言虚拟机也可以采用虚拟ISA虚拟机的技术,将程序编译成一种虚拟ISA,然后在该虚拟ISA的虚拟机上执行代码。
许多VM设计,例如BEAM,都跨越了边界。它们可能属于第三类和第四类。
源:- 维基百科
- 虚拟机的高级设计与实现李Xlao-Feng
我假设您一直在阅读http://en.wikipedia.org/wiki/Virtual_machine -在该术语下,BEAM是一个"进程虚拟机",就像JVM一样。