Lua虚拟机及其工作流程

5 篇文章 0 订阅

Lua虚拟机
解释性脚本语言与编译型语言区别:

1:由于每个脚本语言都有自己的一套字节码,与具体的硬件平台无关,所以不用修改脚本代码,就能运行在各个平台上。硬件、软件平台的差异都由语言自身的虚拟机解决
2:由于脚本语言的字节码需要由虚拟机执行,而不像机器代码这样能够直接执行,所以运行速度比编译型语言差不少

Lua使用的是基于寄存器的虚拟机实现方式,其中很大的原因是它的设计目标之一就是尽可能高效。

总结一下,实现一个脚本语言的解释器,其核心问题如下:

  • 设计一套字节码,分析源代码文件生成字节码。
  • 在虚拟机中执行字节码
  • 如何在整个执行过程中保存整个执行环境

原理在于使用了叫CIL(Common Intermediate Language通用中间语言,也叫做MSIL微软中间语言)的一种代码指令集,
CIL可以在任何支持CLI(Common Language Infrastructure,通用语言基础结构)的环境中运行,就像.NET是微软对这一标准的实现,Mono则是对CLI的又一实现。
由于CIL能运行在所有支持CLI的环境中,例如刚刚提到的.NET运行时以及Mono运行时,也就是说和具体的平台或者CPU无关。

具体过程是:C#或者VB这样遵循CLI规范的高级语言,先被各自的编译器编译成中间语言:IL(CIL),
等到需要真正执行的时候,这些IL会被加载到运行时库,也就是VM中,由VM动态的编译成汇编代码(JIT)然后在执行


虚拟机需要完成如下工作:

  1. 将源代码编译成虚拟机可以识别执行的字节码
  2. 为函数调用准备调用栈
  3. 内部维持一个IP(指令指针)来保存下一个将执行的指令地址。
  4. 模拟一个CPU的运行:循环拿出

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值