首页 文章

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

提问于
浏览
104

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

3 回答

  • 31

    我假设你一直在阅读http://en.wikipedia.org/wiki/Virtual_machine - 根据该术语,BEAM就像JVM一样"process virtual machine" .

  • 8

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

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

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

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

  • 160

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

    Type 1: Full Instruction Set Architecture (ISA) virtual machine 提供完整的计算机系统的ISA仿真或虚拟化 . 客户操作系统和应用程序可以作为实际计算机在虚拟机的顶部运行(例如, VirtualBox,QEMU,XEN ) .

    Type 2: Application Binary Interface (ABI) virtual machine 提供了一个来宾进程ABI仿真 . 针对该ABI的应用程序可以与该本机ABI应用程序的其他进程(例如, Intel's IA-32 Execution Layer on Itanium, Transmeta's Code Morphing for X86 emulation, Apple's Rosetta translation layer for PowerPC emulation )并行运行 .

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

    Type 4: Language Virtual Machine 提供了一个运行时引擎,它执行以客户语言表示的程序 . 程序通常以客户语言的源形式呈现给虚拟机,而不是事先完全编译成机器代码 . 运行时引擎需要解释或翻译程序,并且还满足由语言抽象的某些功能,例如存储器管理(例如, the runtime engines for Basic, Lisp, Tcl, Ruby ) .

    The boundaries between virtual machine types are not clear-cut. 例如,语言虚拟机还可以通过将程序编译为一种虚拟ISA然后在该虚拟ISA的虚拟机上执行代码来使用虚拟ISA虚拟机的技术 .

    许多VM设计,例如 BEAM ,越过边界 . 它们可以适合第3和第4类 .

    资源:

    • 维基百科

    • 虚拟机的先进设计与实现; Xlao-Feng LI

相关问题