前言
虚拟机是计算机编程领域的常见概念。在去年入职Shopee之前,我的整个职业生涯都是构建在虚拟机之上的,所以很有必要研究一下虚拟机,特别是虚拟机的分类:
- 基于栈的虚拟机,比如JVM虚拟机
- 基于寄存器的虚拟机,比如Dalvik虚拟机
虚拟机的概念
首先问一个基本的问题,作为一个虚拟机,它最基本的要实现哪些功能?
他应该能够模拟物理CPU对操作数的移进移出,理想状态下,它应该包含如下概念:
- (1)将源码编译成VM指定的字节码。
- (2)包含指令和操作数的数据结构(指令用于处理操作数作何种运算)。
- (3)一个为所有函数操作的调用栈。
- (4)一个“指令指针(Instruction Point —IP)”:用于指向下一条将要执行的指令。
- (5)一个虚拟的“CPU”–指令的派发者:
- 1)取指:获取下一条指令(通过IP获取)
- 2)译码:对指令进行翻译,将要作何种操作。
- 3)执行:执行指令。
以上是CPU的三级流水线操作,实际上五级流水线还包括回写,即把执行后生成的结果回写进存储器。