`
LeslieWei
  • 浏览: 14117 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Erlang虚拟机源码阅读笔录(二)虚拟机的指令集

阅读更多

2. Erlang虚拟机的指令集

在具体分析erlang进程的调度和执行过程前,我们需要简单的了解下erlang虚拟机的指令集的几种形式。

2.1. Erlang程序的内存结构

    Erlang程序beam文件是需要虚拟机解释执行的字节码文件,因此Erlang的进程结构不同于普通的操作系统进程,Erlang的所有进程数据包括代码,堆栈结构都是存放在数据区里,Erlang进程并没有普通进程拥有的代码区。Erlang进程的stack结构包含了函数调用帧的临时变量和返回地址,heap包含了Erlang进程执行过程中创建的数据。Erlang进程的堆栈总是同时被分配的,并且始终是在同一块区域,并且栈顶和堆顶都朝对方相向增长,当栈顶和堆顶相遇了,就进行垃圾回收。堆的大小增长在一定范围内是按Fibonacci数列增长。

    每个Erlangcall frame在栈中都是以一个返回地址开始,后面紧跟是临时变量。每个Erlangterm用一个32位的unsigned word类型数据代表,每个term包含值和一个tagtag占用4位,并且存在最小有效位中,tag用来标识term的类型,tag的定义如图2.1.1




 
2.1.1

2.2. Erlang虚拟机的寄存器

The BEAM Virtual Machine uses the following registers:

    HTOP - top-of-heap pointer

    E - top-of-stack pointer

    CP - return-address pointer (where to go when a function is ready executed)

    I - next-instruction pointer

    x(N) - argument registers (to pass function parameters), x(N) are also used to hold temporal variables

    y(N) - local variables (y(N) are not real registers, they reside in a local frame and are accessed by integer offset from a top-of-stack pointer)

 fcalls - number of reductions done (to check for suspension while doing function call)

2.3. Erlang虚拟机的指令格式

   Erlang源程序文件在经过编译后生成对应的字节码文件,其格式为:




 
 

 

在这种格式中的opcode_value小于255的占用一个字节,大于255的将占用两个字节。

字节码语法图形式比较复杂,操作数按他们的类型大致可以分为以下几种:

8-bit long

  • magic number
  • function arity
  • type of arithmetic
  • type of operand
  • type of bif
  • sign of bignumber value

16-bit long

  • atom length
  • float length
  • code length
  • register number
  • frame size
  • heap requirement

24-bit long

  • relative address

32-bit long

  • integer value
  • code size
  • tuple arity
  • tuple index
  • string length
  • bignum arity
  • bignum value

除此之外,其它的操作数都是16位长。

然后字节码文件不能被直接执行,需要由erlang虚拟机解释执行。Erlang虚拟机加载字节码文件后会将字节码映射成虚拟机能识别的指令集,虚拟机指令集是使用C代码来定义的,称为threaded-code。其格式如下:




 
 

 

threaded-code的每一行都占用4个字节。threaded-code的定义在process_main()函数中。

Erlang虚拟机的指令集十分强大,除了普通的运算指令集还有丰富的Test InstructionsException Handling以及进程间消息通信的SendReceive原语。除此之外,Erlang虚拟机还提供了丰富的内建函数功能,内建函数主要是对那些访问频繁的函数进行优化处理。关于Erlang虚拟机指令集的详细说明,请参见这篇论文:The Erlang BEAM Virtual Machine Specification

  • 大小: 3.5 KB
  • 大小: 937 Bytes
  • 大小: 1 KB
分享到:
评论

相关推荐

    Erlang虚拟机内存管理

    Erlang核心开发者Lukas Larsson在2014年3月份Erlang Factory上的一个演讲详细介绍了Erlang内存体系的原理以及调优案例 根据siyao zheng博客上听写的资源进行的翻译,大致只翻译了80%但核心部分已经完整,希望对大家...

    hex, Erlang虚拟机的软件包管理器.zip

    hex, Erlang虚拟机的软件包管理器 十六进制 Hex是Erlang虚拟机的软件包管理器。这个项目目前提供了与混合。tcm 工具构建的任务。有关安装说明和其他文档,请参阅 hex.pm 。在本地安装十六进制以进行开发: mix ...

    erlang 部分源码

    BEAM是Erlang虚拟机的缩写,它是Erlang程序运行的基础。BEAM虚拟机执行Erlang字节码,提供了垃圾回收、内存管理等功能。在源码中,你可以找到关于字节码解释器、垃圾收集算法的实现。 3. **模块和函数** Erlang...

    基于Erlang VM的语言

    Erlang虚拟机(Erlang VM,也称为BEAM虚拟机)是Erlang编程语言的核心组成部分,它为Erlang提供了强大的并发特性和故障容错能力。基于Erlang VM的语言充分利用了这些优势,同时也引入了不同语法和编程范式的创新。 ...

    erlang 程序设计 源码

    Erlang是一种面向并发的、动态类型的编程语言,主要用于构建高度可扩展的、容错性强的分布式系统。...在`code`这个文件中,你可以找到实际的源码,通过阅读和分析,将理论知识与实践相结合,提升对Erlang编程的掌握。

    英雄远征erlang源码

    【标题】:“英雄远征erlang源码”指的是一个基于Erlang编程语言开发的服务器端源代码,用于支持网络游戏“英雄远征”的运行。Erlang是一种并发性极强、容错性好的函数式编程语言,常用于构建高可用性的分布式系统,...

    英雄远征erlang服务器源码含数据库

    7. **学习路径**:初学者可以通过阅读和调试这些源码,了解Erlang的基本语法、模块结构、进程通信以及数据库操作。同时,也可以研究其错误处理和日志记录机制,以增强对Erlang实际开发流程的理解。 8. **实践经验**...

    erlang21.0源码

    Erlang是一种面向并发的、动态类型的编程语言,主要用于构建分布式、容错性强的系统。OTP(Open Telecom ...同时,对于研究分布式系统、并发编程或者虚拟机设计的人来说,Erlang 21.0的源码也是一个宝贵的教育资源。

    Erlang编程指南

    Erlang是运行于虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型上,Erlang属于多重范型编程语言,...

    erlang 聊天室源码

    在本项目中,我们看到"erlang 聊天室源码"是一个初学者级别的实践项目,开发者花费了两周时间完成,并且在设计上受到了知名消息中间件rabbitMQ的启发。 首先,我们要理解Erlang的核心特性,这包括轻量级进程...

    erlang服务端源码

    erlang 服务端代码 例子,演示了如何管理角色

    英雄远征源码[erlang]

    《英雄远征》是一款基于Erlang编程语言开发的网络游戏,其源码的公开为开发者提供了深入了解游戏服务端架构和Erlang在大型分布式系统应用的机会。Erlang是一种为并发、容错和实时系统设计的函数式编程语言,以其在高...

    Erlang程序设计(第二版)及源码

    本书由Erlang之父Joe Armstrong编写,是毋庸置疑的经典著作。书中兼顾了顺序编程、并发编程和分布式编程,重点介绍如何编写并发和分布式的Erlang程序以及如何在多核CPU上自动加速程序,并深入地讨论了开发Erlang应用...

    erlang源码包

    - **BEAM虚拟机**:Erlang程序运行在BEAM(Berkeley ERLang)虚拟机上,它设计为高效处理并发和容错。 - **进程模型**:Erlang采用轻量级进程模型,进程间通信快速且高效,支持分布式计算。 - **模式匹配**:Erlang...

    erlang聊天室源码

    **Erlang聊天室源码解析** Erlang是一种面向并发的编程语言,因其在分布式系统和高可用性服务中的出色表现,常被用于构建消息队列如RabbitMQ这样的项目。本篇将深入探讨一个基于Erlang实现的简单聊天室源码,帮助...

    erlang程序设计(第二版)随书源码

    《Erlang程序设计(第二版)》是一本深入探讨Erlang编程技术的书籍,其随书源码提供了丰富的实例,帮助读者更好地理解和实践Erlang编程。 在学习Erlang时,源码是极其宝贵的资源。通过阅读和分析这些代码,我们可以...

    erlang server源码

    Erlang Server源码分析与详解 Erlang是一种面向并发的、函数式编程语言,以其在分布式系统、高可用性和容错性方面的优势而受到广泛关注。尤其在构建大规模聊天室服务器这样的实时通信系统中,Erlang的性能表现突出...

    Erlang程序设计及源码

    对于初学者,可以通过阅读《Erlang程序设计》这本书了解基本语法、数据类型、控制结构、模式匹配以及Erlang的并发特性。同时,结合源码分析,可以提升实战能力。 总之,这份资源为Erlang初学者提供了全面的学习...

    远古封神Server(erlang源码)+文档+mongodb数据库

    《远古封神Server:基于Erlang的服务器架构与MongoDB数据库集成解析》 本文将深入探讨"远古封神Server"项目,这是一个采用Erlang编程语言构建的游戏服务器,搭配MongoDB数据库来实现高效的数据存储和处理。Erlang以...

Global site tag (gtag.js) - Google Analytics