虚拟机CPU平台的基本执行环境研究

时间:2022-10-25 03:19:01

虚拟机CPU平台的基本执行环境研究

摘 要:虚拟机是指通过软件方式模拟出具有完整计算机硬件系统功能的并运行在一个相对完全隔离环境中的完整计算机系统。虚拟机就像一台真正的计算机,它一样拥有自己的CPU、寄存器组、指令系统、输入输出以及堆栈等等。它和真实的计算机一样接受指令,执行指令并最终完成所规定的处理任务。虚拟机最重要的优点就是实现程序的跨平台性,即可以在不同的操作系统之间重复使用,这也是虚拟机被广泛应用的重要原因。本文对虚拟机CPU平台的基本执行环境进行了较深入的分析与研究,分别阐述了CPU平台的基本执行环境,虚拟机的数据栈、计算栈、参照栈的运行机制。

关键词 虚拟机 执行环境 运行机制

中图分类号: TP312.2文献标识码:A 文章编号:1674-098X(2015)04(a)-0000-00

虚拟机技术在现代社会有着广泛的应用范围,基于虚拟机平台的软件具有很多优点,比如可移植性、高效性、简洁性和安全性等等。可移植性既是通过采用中间语言,使得一个程序能够在多个硬件平台或多个不同操作系统上能正常、准确的执行。高效性既是尽可以以牺牲本机代码的编译速度来调动执行引擎能够更加优化的使用底层机器的特性来提高程序的执行速度,确保软件开发具有更高的执行效率。简洁性既是指所采用的中间代码通常比二进制代码具有更好的可读性和压缩性。这个特性能更好的支持动态下载代码并且非常适合一些内存紧缺的应用环境。安全性既是相对于二进制指令来说,中间代码具有更强的类型约束和语义配置操作,中间代码比二进制文件更能得到运行时系统的强制执行。深入研究虚拟机基本执行环境对于研发人员意义重大。

1运行时系统与虚拟机

计算机本身就是一个运行时系统,运行时系统是很多计算机程序赖以执行的一个环境。运行时系统提供了程序在执行时所需要的所有条件。比如运行时系统为程序分配内存、加载应用程序、执行程序中的指令、处理服务请求等等。

运行时系统的种类可以按不同的分类方式分为很多种。按执行程序指令的基本方式可以把运行时系统分为两大类。一类是以处理器本身的机器码为指令编写程序,另一类是用机器指令编写程序。以处理器本身的机器码为指令编写程序是指由计算机的操作系统和处理器构成运行时系统,操作系统负责总体筹划,而处理器用来执行程序的指令。也就是说操作系统定义了一套完整的规范,而由CPU来执行这套规范。虚拟机实际上是一整套规则,而不是单一用软件就能够简单实现的,虚拟机的实现完全是按照一套严谨的规范来定义的。虚拟机可以由任意一种程序设计语言来实现,它可以实现在任意一种硬件平台上,但前提必须是遵守它的规范。只要是遵守同一套规范的运行时系统,你就可以不需要对它进行编译而直接能在其上运行各种指令代码,这和它是一套软件模拟系统还是一台真正的计算机没有关系。

2虚拟机的栈实现

2.1虚拟机数据栈的运行机制

堆栈有很多优点,例如高效率的函数调用,清晰的递归调用,较小的上下文切换等。可以将虚拟机地址空间最顶部的那个内存段空间设置为堆栈段,用来支持以后所有的操作,所以建立一个堆栈是可行的。

AVM虚拟机启动运行,进行系统初始化的设置,首先为堆栈类型的数据动态申请几段内存空间,这段空间是虚拟机最核心的数据结构,它是由代码区、数据栈、计算栈、函数运行栈等组成的一个系统。在虚拟机中用来描述栈顶的一个元素是由计算栈和参照栈结合起来完成的,计算栈和参照栈主要实现计算功能,而数据栈则负责函数的局部变量和函数调用的运行环境。数据栈(data--Stk)是用来实现过程调用的上下文记录和切换,它的功能类似于活动记录,数据栈对任何一个过程的调用都一样,都是分配该数据栈的一个区域给该过程。每当有函数调用时,首先是压入一帧,其次当函数调用结束后,该帧出栈,最后恢复虚拟机的程序计数器。数据栈如果按区域划分可分为父过程运行环境保存区、本过程局部变量区以及传入实参区三个区域。

AVM虚拟机在运行时,会启动一个虚拟机实例,首先向宿主操作系统申请分配内存,然后用分配到的内存组成一个人工地址空间,这个空间用来提供给单个应用程序来使用。这段地址空间在内存中可被划分成堆栈段和代码段两个部分。首先,在虚拟机的初始化过程中,为数据段和进程代码段建立映射,然后将数据段和代码段的内容读入内存,这一工作是由虚拟机系统的过程加载处理函数负责的。此外,凡是未被赋初值的局部变量初始值都为零,这是因为虚拟机的初始化会将数据堆栈段清零。代码段分为只读数据和运行代码两个部分,在内存中,代码段的类型是只读的,所以代码段绝对不会被改写,任何企图修改代码段的指令都将会引发严重的错误。程序在执行过程中除了有数据段和代码段的支持外,还要有动态环境的支持,堆栈就是其中重要的一个动态环境。

在计算机领域中,数据堆栈是一种非常重要而且会被经常用到的抽象数据类型。堆栈有两个非常重要的操作,即是Push操作和Pop操作,也就是压入和弹出操作。数据堆栈的特点是最后进入数据堆栈的对象最先被弹出,即它是 LIFO(Lastin,firstout)后进先出。从操作层面上来讲,数据堆栈是一个后进先出的队列,它的方向与内存的方向正好相反。从物理层面上来讲,数据堆栈其实就是一段连续分配的内存地址空间。它是由一系列堆栈帧组成的。栈帧的定义是将一个过程调用在堆栈中存放的父过程运行环境保存区、本过程的局部变量区以及传入实参数区域总称为一个栈帧 (StackFralne)。当调用过程时逻辑堆栈帧被压入栈中,当过程返回时逻辑堆栈帧被从栈中弹出。在虚拟机执行过程中,有时虚拟机会根据中间字节码的一些指令把这些数据存入堆栈,有时也会用寄存器来传递一些指令。

2.2虚拟机计算栈和参照栈的运行机制

计算栈的作用是主要用来进行各种算数运算和逻辑运算,还有保存计算式中的子函数的返回值以及运算数、运算符等,计算栈经常在自动转换字符类型时使用。计算栈也是一组普通的字节数组,它在进行PUSH压入和POP弹出操作的时候必须要依靠参照栈来执行。

参照栈主要用来描述像每次出栈入栈的长度还有出入栈的数据类型等在计算栈中存放的信息的属性。

在计算栈中进行push或pop操作和其相互关联的栈中元素是保持参照关系的。

虚拟机可以完成很多功能,例如模拟不同类型的操作系统,模拟网卡、硬盘等硬件设备,进行一些病毒试验,模拟组建大型网络和各种计算机软件相关试验等。一些通用型的大型机需要占用大量的资源,如对软件授权的要求,对存储器的要求,对中央处理器的要求等等,在资源相对紧张的嵌入式领域中并不能得到广泛的认同。只有掌握了虚拟机技术,才可以为大型应用软件的开发提供了一个功能更加强大、扩展性更加良好的应用平台。

参考文献

[1] Bill Blunden著. 杨涛等译. 虚拟机的设计与实现――C/C++. 机械工业出版社.2003年1月

[2]孙希、俞建新:Java虚拟机新技术探讨南京大学计算机软件新技术国家重点实验室,《计算机应用》第21卷第8期

[3] 朱成光.栈式虚拟机的开发运行平台的设计与实现.硕士学位论文,2007年3月.

[4] 赵旭泽.虚拟机平台的设计与关键模块的实现.硕士学位论文,2011年3月.

[5] 林巧民.虚拟机相关技术研究及实现.硕士学位论文,2004年5月.

作者简介:李静(1977---),女 ,汉族 ,辽宁职业学院 讲师、网络工程师。

上一篇:浅议当前课堂教育的弊端 下一篇:基于低碳经济的内蒙古产业经济发展探讨