在具体分析erlang进程的调度和执行过程前,我们需要简单的了解下erlang虚拟机的指令集的几种形式。
Erlang程序beam文件是需要虚拟机解释执行的字节码文件,因此Erlang的进程结构不同于普通的操作系统进程,Erlang的所有进程数据包括代码,堆栈结构都是存放在数据区里,Erlang进程并没有普通进程拥有的代码区。Erlang进程的stack结构包含了函数调用帧的临时变量和返回地址,heap包含了Erlang进程执行过程中创建的数据。Erlang进程的堆栈总是同时被分配的,并且始终是在同一块区域,并且栈顶和堆顶都朝对方相向增长,当栈顶和堆顶相遇了,就进行垃圾回收。堆的大小增长在一定范围内是按Fibonacci数列增长。
每个Erlang的call frame在栈中都是以一个返回地址开始,后面紧跟是临时变量。每个Erlang的term用一个32位的unsigned word类型数据代表,每个term包含值和一个tag,tag占用4位,并且存在最小有效位中,tag用来标识term的类型,tag的定义如图2.1.1:
图2.1.1
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)
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 Instructions、Exception Handling以及进程间消息通信的Send,Receive原语。除此之外,Erlang虚拟机还提供了丰富的内建函数功能,内建函数主要是对那些访问频繁的函数进行优化处理。关于Erlang虚拟机指令集的详细说明,请参见这篇论文:The Erlang BEAM Virtual Machine Specification。
相关推荐
Erlang核心开发者Lukas Larsson在2014年3月份Erlang Factory上的一个演讲详细介绍了Erlang内存体系的原理以及调优案例 根据siyao zheng博客上听写的资源进行的翻译,大致只翻译了80%但核心部分已经完整,希望对大家...
hex, Erlang虚拟机的软件包管理器 十六进制 Hex是Erlang虚拟机的软件包管理器。这个项目目前提供了与混合。tcm 工具构建的任务。有关安装说明和其他文档,请参阅 hex.pm 。在本地安装十六进制以进行开发: mix ...
BEAM是Erlang虚拟机的缩写,它是Erlang程序运行的基础。BEAM虚拟机执行Erlang字节码,提供了垃圾回收、内存管理等功能。在源码中,你可以找到关于字节码解释器、垃圾收集算法的实现。 3. **模块和函数** Erlang...
Erlang虚拟机(Erlang VM,也称为BEAM虚拟机)是Erlang编程语言的核心组成部分,它为Erlang提供了强大的并发特性和故障容错能力。基于Erlang VM的语言充分利用了这些优势,同时也引入了不同语法和编程范式的创新。 ...
Erlang是一种面向并发的、动态类型的编程语言,主要用于构建高度可扩展的、容错性强的分布式系统。...在`code`这个文件中,你可以找到实际的源码,通过阅读和分析,将理论知识与实践相结合,提升对Erlang编程的掌握。
【标题】:“英雄远征erlang源码”指的是一个基于Erlang编程语言开发的服务器端源代码,用于支持网络游戏“英雄远征”的运行。Erlang是一种并发性极强、容错性好的函数式编程语言,常用于构建高可用性的分布式系统,...
7. **学习路径**:初学者可以通过阅读和调试这些源码,了解Erlang的基本语法、模块结构、进程通信以及数据库操作。同时,也可以研究其错误处理和日志记录机制,以增强对Erlang实际开发流程的理解。 8. **实践经验**...
Erlang是一种面向并发的、动态类型的编程语言,主要用于构建分布式、容错性强的系统。OTP(Open Telecom ...同时,对于研究分布式系统、并发编程或者虚拟机设计的人来说,Erlang 21.0的源码也是一个宝贵的教育资源。
Erlang是运行于虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型上,Erlang属于多重范型编程语言,...
在本项目中,我们看到"erlang 聊天室源码"是一个初学者级别的实践项目,开发者花费了两周时间完成,并且在设计上受到了知名消息中间件rabbitMQ的启发。 首先,我们要理解Erlang的核心特性,这包括轻量级进程...
erlang 服务端代码 例子,演示了如何管理角色
《英雄远征》是一款基于Erlang编程语言开发的网络游戏,其源码的公开为开发者提供了深入了解游戏服务端架构和Erlang在大型分布式系统应用的机会。Erlang是一种为并发、容错和实时系统设计的函数式编程语言,以其在高...
本书由Erlang之父Joe Armstrong编写,是毋庸置疑的经典著作。书中兼顾了顺序编程、并发编程和分布式编程,重点介绍如何编写并发和分布式的Erlang程序以及如何在多核CPU上自动加速程序,并深入地讨论了开发Erlang应用...
- **BEAM虚拟机**:Erlang程序运行在BEAM(Berkeley ERLang)虚拟机上,它设计为高效处理并发和容错。 - **进程模型**:Erlang采用轻量级进程模型,进程间通信快速且高效,支持分布式计算。 - **模式匹配**:Erlang...
**Erlang聊天室源码解析** Erlang是一种面向并发的编程语言,因其在分布式系统和高可用性服务中的出色表现,常被用于构建消息队列如RabbitMQ这样的项目。本篇将深入探讨一个基于Erlang实现的简单聊天室源码,帮助...
《Erlang程序设计(第二版)》是一本深入探讨Erlang编程技术的书籍,其随书源码提供了丰富的实例,帮助读者更好地理解和实践Erlang编程。 在学习Erlang时,源码是极其宝贵的资源。通过阅读和分析这些代码,我们可以...
Erlang Server源码分析与详解 Erlang是一种面向并发的、函数式编程语言,以其在分布式系统、高可用性和容错性方面的优势而受到广泛关注。尤其在构建大规模聊天室服务器这样的实时通信系统中,Erlang的性能表现突出...
对于初学者,可以通过阅读《Erlang程序设计》这本书了解基本语法、数据类型、控制结构、模式匹配以及Erlang的并发特性。同时,结合源码分析,可以提升实战能力。 总之,这份资源为Erlang初学者提供了全面的学习...
《远古封神Server:基于Erlang的服务器架构与MongoDB数据库集成解析》 本文将深入探讨"远古封神Server"项目,这是一个采用Erlang编程语言构建的游戏服务器,搭配MongoDB数据库来实现高效的数据存储和处理。Erlang以...