Erlang虚拟机(VM)简介

Erlang代码是运行在Erlang的虚拟机(VM)上的,所谓虚拟,说它是虚拟一台真实的机器,还不如说它是虚拟了一个运行Erlang指令的CPU来得更确切。

Erlang运行在虚拟机上,就好比C语言运行在真实的机器上。

Erlang语言的代码在编译时,也有中间的汇编代码,了解它的汇编指令,可以进一步理解Erlang代码在VM里的运行机制。

下面我们就把Erlang的Beam模拟器看作是一个CPU来了解它的运行机制。

为了更容易理解后面介绍的Erlang汇编指令,这里先介绍一下这个“CPU”的相关术语和名称。

寄存器

  • R(Registers)通用寄存器:R0~R255,一共有256个通用寄存器,其中R0是最快速的,就像X86架构的CPU一样,可以把R0看作是累加器,也常用于保存返回值。
  • IP(instruction pointer)指令指针:存放下次将要执行的指令的指针(reference)。
  • CP(continuation pointer):保存返回地址。
  • EP (stack pointer) 栈指针:它指向最新进栈的元素。
  • HTOP (heap top) 堆顶指针:指向堆顶第一个空白处。
  • 消息队列指针:它指向当前被匹配的消息。
  • 变量tmpA和tmpB:临时变量,在运算过程中用于保存中间值。
  • FR(Float Registers)浮点寄存器:FR0~FR15,一共16个。
  • Live:当前正在使用的寄存器数。一些指令执行完后需要进行GC时,就需要用到这个值。

指令参数类型

类型名称说明
a原子
c立即term,如小整数,空list等
d一个寄存器/栈位
e指向export table entry的指针(reference)
f代码标号
I(大写i)整型立即数,如123
j跳传标号
l(小写L)浮点寄存器
P无符号整数
r寄存器R0
s一个立即数/寄存器/栈位
t一个任意的term,如{ok,[0]}
x一个寄存器,如R1
y栈位,栈中的一个单元空间
后续的文章里会继续介绍虚拟机相关的知识,如汇编指令、操作码(opcode)、实例分析Erlang程序的运行过程等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值