论文部分内容阅读
摘 要:本文设计对虚拟机CPU平台的核心模块进行设计分析。将以虚拟机技术为主要研究对象,较深入地分析和研究了核心模块的设计与实现,为最终用C++实现一个基于Windows平台的面向科学计算的小型虚拟机软件系统ICU的实现做好准备。
关键词:虚拟机 CPU C++
中图分类号:G4 文献标识码:A 文章编号:1673-9795(2013)02(b)-0181-01
虚拟机发展到今天已经有几十年的历史了,在很长一段时间内虚拟机技术完全没有引起人们的足够重视,但最近几年在计算机工程应用领域范围内,随着计算机性能的不断增强,计算机能力的不断增加,人们对传统的虚拟机技术的研究重新成为计算机领域的热点。
1 小型虚拟机软件系统ICU的基本环境设置
1.1 64位CPU平台设计
本文将要设计的虚拟CPU环境包括23个64位寄存器和5个32位寄存器。将其分为以下几大类:
3个段寄存器($CC、$DD、$VV);
3个指针寄存器($SS、$PS、$JS);
12个通用型整数寄存器($T1-$T12);
5个双精度IEEE754浮点寄存器($S1-$S5);
5个单精度IEEE754浮点寄存器($D1-$D5);
以下是用C++语言描述的小型虚拟机软件系统ICU的CPU环境的内部结构:
Public://定义一个共有类型变量
Struct ICUprocessor{
ICU_W BB;//定义一个累加器BB
ICU_W SI;//定义一个堆栈指针SI
ICU_W CC;//定义一个保存代码段开始的段寄存器CC
ICU_W DD;//定义一个保存数据堆段开始地址的段寄存器DD
ICU_W VV;// 定义一个保存堆栈段开始地址的段寄存器VV
ICU_W ZZ;//定义一个变址寄存器ZZ
ICU_W IR;//定义一个指令寄存器IR
ICU_W PC;//定义一个程序计数器PC
ICU_W SS;//定义一个基址指针SS
BOOL A,B,C;//定义一个标志寄存器ABC保存指令操作的结果状态
ICUprocessor cpu;//小型虚拟机软件系统ICU的中央处理器
在以上程序中ICU_W是定义的一个字类型。小型虚拟机软件系统ICU包括一个累加器BB,一个堆栈指针SI,一个用于记录代码段起始地址的段寄存器CC,一个用来保存数据堆段起始地址的段寄存器DD,一个用于保存堆栈段起始地址的段寄存器VV,一个变址寄存器ZZ,一个指令寄存器IR,一个程序计数器PC,一个基址指针SS,一个标志寄存器ABC,用来保存当前指令操作的结果状态。64位寄存器$T1到$T12用来存放整数值。32位寄存器$D1到$D5用来存放单精度IEEE754浮点数。64位寄存器$S1到$S5用来存放双精度IEEE754浮点数。
1.2 CPU平台的栈设计的特点
由于堆栈在处理函数调用方面有着很高的效率、在解决递归问题上也相当的简单明了、在切换上下文时开销也比较小等优点,所以决定建立一个堆栈,将堆栈段设置为虚拟机地址空间最顶部的那个内存段,用来支持以后所有的操作。
2 虚拟机CPU平台的核心模块的实现
小型虚拟机软件系统ICU实际上是一个程序,由于在堆设计与实现过程中内存的分配和释放存在内存泄露问题和悬空指针等等诸多问题,急需解决。针对这种情况,我将采取的研究方法是使用一种基于顺序匹配算法的最先匹配算法对内存进行分配和回收。所谓顺序匹配算法既是允许内存以可变的尺寸进行分配和回收。这种解决办法的关键是需要使用某种数据类型的链接列表来跟踪数据堆里的已经分配和没有分配的内存块。这是因为链接列表这种数据结构只关心内存块的起始位置和结束位置,所以无论从数据结构的大小还是从搜索时间等等方面来讲,它对性能的影响会小很多。最先匹配算法既是把第一个尺寸足够大的可用内存块分配给最先提出请求的程序段。
当小型虚拟机软件系统ICU程序成功正确的启动时,首先开始执行的是保存在字节码里的可执行文件里的指令。这些字节码可执行文件是一种二进制的文件,在启动ICU前在命令行上要先给出一个正确的字节码可执行文件名,这样才能保证ICU成功正常的运行。字节码可执行文件里主要是一些字节长度和指令,小型虚拟机软件系统明确知道这些字节码指令的作用,程序开始工作后,ICU将不断的从存储器里将字节码文件里的指令加载到已经开辟出来的内存空间里,然后开始执行这些指令。
小型虚拟机软件系统ICU的生命周期可以划分为五个阶段。第一阶段建立系统的出错日志;第二阶段处理命令行数据;第三阶段构造虚拟CPU环境;第四阶段字节码的验证阶段;第五阶段执行指令阶段。这五个阶段的组织形式是按顺序发生的。当虚拟机在命令行上成功启动后,小型虚拟机软件系统就已经进入到它自己的第一个阶段建立系统的出错日志,然后进入第二阶段在命令行处理数据,如果一切正确,就会进入到第三个阶段也就是成功的建立起虚拟CPU的基本执行环境,然后进入第四阶段对字节码进行验证的阶段。当字节码指令全部通过验证检查之后,真正的执行阶段就开始了。执行阶段位于小型虚拟机软件系统生命周期中的最后一个阶段。虚拟机不断连续地执行字节码指令,直到处理完所有的指令和数据或者是遇到极其严重的问题后方能截止。和C++语言写成的绝大多数程序一样,小型虚拟机软件系统ICU的基本操作是从main函数开始执行的,小型虚拟机软件系统生命周期中的五个阶段将通过这个函数来启动和执行。以下为main函数主体。
Void main(int grac,char *grav[])
{
Struct cmdline aq;
/*开始建立出错日志*/
Setuperrorfile();
……
/*处理命令行数据*/
Dbg_maino(invoking handlearguments()\n);
C1=handlergrments(grac,grav);
……
/*初始化虚拟环境*/
Dbg_maino(invoking initICU()\n);
……
/*字节码验证*/
Dbg_maino(invoking reformat()\n);
……
/*执行指令*/
Dbg_maino(invoking run()\n);
……
}/*end main*/
综上所述,小型虚拟机软件系统ICU的核心模块的设计与分析基本全部完成,我的大致设计理念就是用C++语言实现虚拟CPU平台的核心模塊的设计与实现,主要包括虚拟寄存器的实现。对虚拟机的一些关键技术进行了探讨和研究。
参考文献
[1] Bill Blunden.虚拟机的设计与实现[M].机械工业出版社,2003.
[2] 朱成光.栈式虚拟机的开发运行平台的设计与实现[D].硕士学位论文,2007.
关键词:虚拟机 CPU C++
中图分类号:G4 文献标识码:A 文章编号:1673-9795(2013)02(b)-0181-01
虚拟机发展到今天已经有几十年的历史了,在很长一段时间内虚拟机技术完全没有引起人们的足够重视,但最近几年在计算机工程应用领域范围内,随着计算机性能的不断增强,计算机能力的不断增加,人们对传统的虚拟机技术的研究重新成为计算机领域的热点。
1 小型虚拟机软件系统ICU的基本环境设置
1.1 64位CPU平台设计
本文将要设计的虚拟CPU环境包括23个64位寄存器和5个32位寄存器。将其分为以下几大类:
3个段寄存器($CC、$DD、$VV);
3个指针寄存器($SS、$PS、$JS);
12个通用型整数寄存器($T1-$T12);
5个双精度IEEE754浮点寄存器($S1-$S5);
5个单精度IEEE754浮点寄存器($D1-$D5);
以下是用C++语言描述的小型虚拟机软件系统ICU的CPU环境的内部结构:
Public://定义一个共有类型变量
Struct ICUprocessor{
ICU_W BB;//定义一个累加器BB
ICU_W SI;//定义一个堆栈指针SI
ICU_W CC;//定义一个保存代码段开始的段寄存器CC
ICU_W DD;//定义一个保存数据堆段开始地址的段寄存器DD
ICU_W VV;// 定义一个保存堆栈段开始地址的段寄存器VV
ICU_W ZZ;//定义一个变址寄存器ZZ
ICU_W IR;//定义一个指令寄存器IR
ICU_W PC;//定义一个程序计数器PC
ICU_W SS;//定义一个基址指针SS
BOOL A,B,C;//定义一个标志寄存器ABC保存指令操作的结果状态
ICUprocessor cpu;//小型虚拟机软件系统ICU的中央处理器
在以上程序中ICU_W是定义的一个字类型。小型虚拟机软件系统ICU包括一个累加器BB,一个堆栈指针SI,一个用于记录代码段起始地址的段寄存器CC,一个用来保存数据堆段起始地址的段寄存器DD,一个用于保存堆栈段起始地址的段寄存器VV,一个变址寄存器ZZ,一个指令寄存器IR,一个程序计数器PC,一个基址指针SS,一个标志寄存器ABC,用来保存当前指令操作的结果状态。64位寄存器$T1到$T12用来存放整数值。32位寄存器$D1到$D5用来存放单精度IEEE754浮点数。64位寄存器$S1到$S5用来存放双精度IEEE754浮点数。
1.2 CPU平台的栈设计的特点
由于堆栈在处理函数调用方面有着很高的效率、在解决递归问题上也相当的简单明了、在切换上下文时开销也比较小等优点,所以决定建立一个堆栈,将堆栈段设置为虚拟机地址空间最顶部的那个内存段,用来支持以后所有的操作。
2 虚拟机CPU平台的核心模块的实现
小型虚拟机软件系统ICU实际上是一个程序,由于在堆设计与实现过程中内存的分配和释放存在内存泄露问题和悬空指针等等诸多问题,急需解决。针对这种情况,我将采取的研究方法是使用一种基于顺序匹配算法的最先匹配算法对内存进行分配和回收。所谓顺序匹配算法既是允许内存以可变的尺寸进行分配和回收。这种解决办法的关键是需要使用某种数据类型的链接列表来跟踪数据堆里的已经分配和没有分配的内存块。这是因为链接列表这种数据结构只关心内存块的起始位置和结束位置,所以无论从数据结构的大小还是从搜索时间等等方面来讲,它对性能的影响会小很多。最先匹配算法既是把第一个尺寸足够大的可用内存块分配给最先提出请求的程序段。
当小型虚拟机软件系统ICU程序成功正确的启动时,首先开始执行的是保存在字节码里的可执行文件里的指令。这些字节码可执行文件是一种二进制的文件,在启动ICU前在命令行上要先给出一个正确的字节码可执行文件名,这样才能保证ICU成功正常的运行。字节码可执行文件里主要是一些字节长度和指令,小型虚拟机软件系统明确知道这些字节码指令的作用,程序开始工作后,ICU将不断的从存储器里将字节码文件里的指令加载到已经开辟出来的内存空间里,然后开始执行这些指令。
小型虚拟机软件系统ICU的生命周期可以划分为五个阶段。第一阶段建立系统的出错日志;第二阶段处理命令行数据;第三阶段构造虚拟CPU环境;第四阶段字节码的验证阶段;第五阶段执行指令阶段。这五个阶段的组织形式是按顺序发生的。当虚拟机在命令行上成功启动后,小型虚拟机软件系统就已经进入到它自己的第一个阶段建立系统的出错日志,然后进入第二阶段在命令行处理数据,如果一切正确,就会进入到第三个阶段也就是成功的建立起虚拟CPU的基本执行环境,然后进入第四阶段对字节码进行验证的阶段。当字节码指令全部通过验证检查之后,真正的执行阶段就开始了。执行阶段位于小型虚拟机软件系统生命周期中的最后一个阶段。虚拟机不断连续地执行字节码指令,直到处理完所有的指令和数据或者是遇到极其严重的问题后方能截止。和C++语言写成的绝大多数程序一样,小型虚拟机软件系统ICU的基本操作是从main函数开始执行的,小型虚拟机软件系统生命周期中的五个阶段将通过这个函数来启动和执行。以下为main函数主体。
Void main(int grac,char *grav[])
{
Struct cmdline aq;
/*开始建立出错日志*/
Setuperrorfile();
……
/*处理命令行数据*/
Dbg_maino(invoking handlearguments()\n);
C1=handlergrments(grac,grav);
……
/*初始化虚拟环境*/
Dbg_maino(invoking initICU()\n);
……
/*字节码验证*/
Dbg_maino(invoking reformat()\n);
……
/*执行指令*/
Dbg_maino(invoking run()\n);
……
}/*end main*/
综上所述,小型虚拟机软件系统ICU的核心模块的设计与分析基本全部完成,我的大致设计理念就是用C++语言实现虚拟CPU平台的核心模塊的设计与实现,主要包括虚拟寄存器的实现。对虚拟机的一些关键技术进行了探讨和研究。
参考文献
[1] Bill Blunden.虚拟机的设计与实现[M].机械工业出版社,2003.
[2] 朱成光.栈式虚拟机的开发运行平台的设计与实现[D].硕士学位论文,2007.