毕业设计论文-SVM-虚拟机设计.doc
《毕业设计论文-SVM-虚拟机设计.doc》由会员分享,可在线阅读,更多相关《毕业设计论文-SVM-虚拟机设计.doc(35页珍藏版)》请在咨信网上搜索。
1、 第 34 页 目录1 绪论11. 1课题背景及目的11.1.1为什么要设计虚拟机11.1.2虚拟机反对派观点31.2国内外研究状况31.3课题研究方法31.4论文构成及研究内容42 SVM 虚拟机设计42.1运形时系统与虚拟机42.2 SVM 虚拟机52.3 SVM虚拟机处理器设计62.3.1 机器处理器设计62.3.2 SVM虚拟机处理器设计82.4 SVM内存分配92.5 SVM内存寻址92.6 SVM 多字节存储方式102.7 SVM输入输出112.8 SVM 中断112.9 SVM 汇编器182.10 SVM 反汇编器202.11 SVM 调试器202.11.1概述202.11.2调
2、试技术212.11.3 SVM 调试器的实现212.12 建造运行时系统222.13 SVM 虚拟机的扩展223SVM 虚拟机运行时环境243.1SVM执行方式243.2 SVM调试方式254 程序设计处理294.1程序设计中的宏处理294.2程序设计中的异常处理30总 结33致 谢35参考文献361 绪论1. 1课题背景及目的1.1.1为什么要设计虚拟机就软件工业的发展趋势而言,一方面是需要运行在多种计算机平台之上的实用系统越来越多,另一方面是以网络为中心的计算情况越来越多,虚拟机也重新成为软件工业的一个潮流。基于单一操作系统的软件开发工具已经不能满足软件工程师的需要。面对杂乱的信息系统和日
3、新月异的技术发明,软件工程师们开始重新审视开发虚拟机的优点。编写虚拟机是软件开发项目的一种,它体现了一种使投资价值最大化的思路。为了从资源方面的投资得到最大的回报,企业都希望自己花钱开发出来的软件的使用期限能够尽可能地长。把软件包从一种平台移植到另一种平台的工作需要花费不小的成本,而且并不是所有的软件包都能够移植到所有的平台上去,软件包所能支持的平台种数是有限度的。大量事实表明,软件移植工作往往会变成一场噩梦。使用虚拟机就可以在一定程度上避免这类事情的发生。当遇到一种新硬件平台或者新操作系统的时候,唯一需要移植的应用级软件就是虚拟机本身1。1.1.2虚拟机反对派观点有不少人反对使用虚拟机,他们
4、的观点有许多种,其中最主要的就是虚拟机会降低程序的执行性能。他们认为,编译型语言如C语言是以计算机自身的机器码的形式执行的,因此会执行得更快些。但这种说法并不一定正确。纯粹的C+代码并不一定比由虚拟机执行的字节码(byte code)更快。程序的执行时间主要消耗在运行时库以及内核模式中断处理例程方面,只有当处理的代码是完全孤立且没有调用任何用户库或系统调用时(因为程序要等待系统的响应)才能百分之百肯定其机器码会执行得更快。对于企业应用级系统,虚拟级在可移植方面的优势足以弥补这些其实并慢不了多少的性能损失1。1.2国内外研究状况一个商业级的虚拟机实现是极其复杂的,一个开源虚拟机bochs 做得很
5、好,其2.0.2版在Win32平台下的有13万行源代码(C/C+)。能在其上运行minux(linux 前身),FreeDSB, Windows95,Windows NT 4.0等操作系统。另一种虚拟机有自己的指令集,它是针对一种语言来设计和实现的。比如JVM(JAVA virtual machine JAVA 虚拟机)。.NET平台。而由JVM所支持的JAVA语言,目前正得到广泛的应用。1.3课题研究方法一台虚拟机与一台真实存在的计算机的不同之处在于前者只是一个技术规范。这类技术规范由一系列规则构成,而软件工程师可以采用任何他自己认为适当的手段来实现这些规则。这就使虚拟机能够做到与具体的计算
6、机平台无关。对一台虚拟机来说,只要它能够遵从其技术规范里的各项规则,就可以存在于任何一种计算机平台上,就可以用任何一种计算机语言来编写1。我的毕业设计所做的虚拟机采用标准C/C+语言编写,在结构上模仿了8086计算机体系结构。1.4论文构成及研究内容本论文作为对虚拟机开发的一个尝试,实现的部分偏重于CPU也即指令执行部件。而对于虚拟机这个运行时系统的另一个很重要的部分中断处理,由于涉及面太广,故只是象征性的实现了INT 10H 0EH中断(向屏幕输出),INT 20H中断(退出程序)。我做的虚拟机取名为SVM(simple virual machine)简单的虚拟机。论文中将主要说明整个SVM
7、虚拟机的设计实现过程,由于涉及到编程语言C/C+,也参考了一些程序设计书上的内容,在文中一并写出来。(以后略)2 SVM 虚拟机设计2.1运形时系统与虚拟机运形时系统(run-time system)是各种计算机程序在其中得以执行的一个环境。运行时系统提供了程序在执行时所需要的一切东西。例如,运行时系统要负责为应用程序分配内存,把该应用程序加载到分配好的内存里,然后开始执行该程序中的指令。如果该程序通过调用系统调用要求位于底层的操作系统提供服务,该运行时系统还必须负责处理有关的服务请求。例如,如果应用程序需要进行文件I/O操作,运行时系统就必须向它提供一种与磁盘控制器进行通信并提供读写访问的机
8、制。运行时系统的种类有很多。对运行时系统进行分类的一个办法是把它们按执行程序指令的基本方式进行划分。对那些以处理其本身的机器码为指令的程序而言,某计算机的处理器和操作系统就构成了与之对应的运行时系统,处理器提供了一种执行指令的机制。CPU把编码为数值形式的指令从内存里取出并根据那些指令完成相应的动作,操作系统则实现了(由处理器和操作系统构成的)这个运行时系统的策略部分。CPU负责执行指令, 操作系统负责决定事情何时,何地发生。对那些用机器指令编写的程序来说,计算机本身就是一个运行时系统。程序的指令由物理CPU在机器级上执行,指令执行的具体过程由操作系统管理。这类运行时系涉及计算机硬件和软件。那
9、些指令不由物理处理器来直接执行的程序需要一个完全由软件构成的运行时系统。在这种情况下,程序的指令将由一台虚拟机来执行。虚拟机是类似于计算机的一个软件程序,它会像真正的处理器那样取出并执行程序指令,但两者的区别在于虚拟机的指令执行过程发生在软件级而不是硬件级,即指令是由软件而不是硬件执行的1。2.2 SVM 虚拟机SVM虚拟机是通过模拟硬件平台而实现的。 SVM采用8086指令集。这样可以省去一些建造虚拟机的重要步骤比如,指令集不用重建(事实上,我也没有能力去定义一个完备的指令集)。SVM虚拟机采用单任务方式,每次只运行一个程序。虚拟机总体结构如下:图2.1 虚拟机总体结构SVM 虚拟机源文件组
10、成:c8086.h 声明8086处理器类;c8086.cpp 实现8086处理器类;ram.h 声明内存类;ram .cpp 实现内存类;disasm.h 反汇编函数声明;disasm .cpp 反汇编函数定义;debug.h 调试器函数声明;debug.cpp 调试器函数定义;fileLoader.h com文件加载函数声明;fileLoader.cpp com文件加载函数定义;global.h 全局数据类型定义;test_CPU.cpp SVM测试程序主函数。编译执行环境:运行,开发平台:Windows 98 SE , Windows 2000 professional SP4编译器:Vi
11、sual C+ 6.0/7.0(VC是对标准C/C+支持很好的一个编译器)2.3 SVM虚拟机处理器设计2.3.1 机器处理器设计中央处理器可以实现为基于寄存器或者基于堆栈的机器。一个基于寄存器的处理器,如Intel 公司的Pentium芯片,有8个用来完成基本运算的32位寄存器。一个基于堆栈的处理器,如Harris半导体公司的RTX32P芯片,有两个用来完成基本运算的片上堆栈。基于堆栈的处理器在嵌入式系统中比较流行,这是因为这类处理器支持比较短小的程序,在资源有限的场合也能工作得很好。同时函数调用在基于堆栈的机器上完成得也更有效率,因为函数参数都已经被放到堆栈里去了。而在一台基于寄存器的机器
12、上,函数参数必须逐个收集并压入堆栈,这就需要做更多的工作。上下文切换在基于堆栈的机器上的开销也比较小。如果是在一台基于寄存器的机器上进行上下文切换,就必须把它所有的寄存器的状态都保存起来。对拥有大量寄存器的RISC体系结构来说,上下文切换是一个消耗内存的操作。基于堆栈的机器就不存在这种问题。基于堆栈的计算机可以为每个进程分别准备一个堆栈,切换上下文时只需变一下堆栈就行了。既然有这么多的优点,基于堆栈的机器为什么没有成为计算机体系结构的主流呢?这是因为基于寄存器的处理器有一个极其重要的优势:速度快。寄存器就在CPU的内部,如果是对保存在寄存器里的数据进行运算,那它的运算速度将是非常快的。Inte
13、l 公司在它新推出的64位处理器Itanium里安排了好几百个片上寄存器,目的就是为了让程序操作尽可能多地在芯片上执行。再看基于堆栈地处理器,它们的片上堆栈几乎总是会延伸到内存里去。这就造成了这样一种后果:即使执行的是一个面向堆栈的基本操作,处理器也不得不到内存里去读取数据。这就大大降低了基于堆栈的处理器的执行速度。并且基于寄存器的处理器比较容易调试(debug),因为指令的执行过程更清晰(一部分操作数在寄存器中,在运算完后还可以检查参与运算的数值是多少)1。表2.1 基于寄存器的处理器和基于寄存器的处理器的优缺点基于堆栈的处理器基于寄存器的处理器优点比较小的内存开销比较快的函数调用基本操作比
14、较快(整体性能更好)执行过程比较清晰(易于调试)缺点比较快的进程切换基本操作比较慢上下文切换时要消耗大量内存调用函数时要多做很多工作2.3.2 SVM虚拟机处理器设计由于虚拟机完全由软件构成,没有硬件设备,所以它不存在刚才提到的某些缺陷。与硬件处理器的分类相似,虚拟机也有基于堆栈和基于寄存器之分。JVM就是基于堆栈的。这可以使JAVA字节码文件很短。而我将SVM虚拟机的中央处理器实现为基于寄存器的机器。直接采用8086指令集。要知到,设计一个完备的指令集可不是一件简单的事,至少我还没有那种实力。SVM虚拟机的设计目标是能够运行原8086平台下的部分16位com程序(程序只能使用除去HLT,WA
15、IT,IN,OUT,LOCK,ESC的88条指令,并限制使用INT指令)。SVM虚拟机处理器的组成:寄存器SVM虚拟机有8个通用整数寄存器,4个段寄存器,一个指令指针,一个指令指针,一个标志寄存器(它有16位,但只使用其中的9位)。这些寄存器及其用途如图所示:表2.2寄存器及其用图AX = AHAL整数寄存器(累加器)BX = BHBL整数寄存器 (基数寄存器)CX = CHCL整数寄存器 (计数器)DX = DHDL整数寄存器 (数据寄存器)BP基址指针SP堆栈指针SI源变址寄存器DI目标变址寄存器CS代码段寄存器DS数据段寄存器SS堆栈段寄存器ES扩展段寄存器IP指令指针FLAG标志位其中
16、,AX,BX,CX,DX 都能划分为两个8位寄存器。一个用来保存低字节,一个用来保存高字节(如AX寄存器可以划分为AH 和 AL)。运算单元由C8086类(在C8086.C中)的成员函数实现。2.4 SVM内存分配SVM 虚拟机在启动时会请求分配1M字节的内存空间,内存空间有可能会到虚拟内存中去,因为没有对可用物理内存进行检查。但由于只能加载com程序,实际上只使用了其中的64KB字节。2.5 SVM内存寻址SVM 模拟8086处理器,选用20位的实模式的地址空间,内存中某个字节的地址时由两位16位数值指定的,这两个数值分别叫做“段地址”(segment address)和“偏移地址”(off
17、set address)。一个给定字节的内存地址是这样计算出来的:把16位段地址乘以16(即0x10),然后把结果与偏移地址相加。2.6 SVM 多字节存储方式多字节数据在内存中有两种存放方式:降序格式(big-endian)和升序格式(little-endian)。如果一个多字节数据的最高位字节存放在内存中的最低位地址,我们就说它采用的是降序记号。升序记号方式正好相反多字节数据的最低位字节降存放在内存中的最低地址。请看下面这个例子。假设有一个多字节值“0Xabcdef12”存放在内存中的某个地方(我们不妨假设从地址24处开始存放)。这个数据的降序和升序表示法如图所示:ABCDEF12降序存储
18、方式:24 25 26 2712EFCDAB升序存储方式: 24 25 26 27 图:多字节数据值在内存中的两种存放方式:降序和升序以降序方式表示的数据也称为“网络顺序”(network order)。这是因为TCP/IP等网络协议要求通过网络传输的信息都必须采用降序格式1。 SVM虚拟机的设计目标是执行DOS下的使用8086指令集的程序,故对多字节排列采用升序方式。2.7 SVM输入输出对于8086平台,它有两个指令可以用来把寄存器长度的数据读写到外设:IN 和OUTIN指令用来从某个I/O端口读入数据。OUT用来把某个数据写到某个I/O端口。I/O端口是被映射到某个外设或者外设的某个部件
19、的一个数字。端口号的范围是0到65535。由于对计算机里的I/O硬件进行设置需要考虑太多的细节,需要很长的时间去收集齐全外设的信息(工作原理,功能号,端口号等),所以,在实现SVM虚拟机的I/O时,我只能用软件来模拟实现I/O(还只能实现向屏幕输出单个字符)。输出 INT 0X10 功能号 0X0E,模拟实现。虽然在Win32下,用软件实现SVM虚拟机的I/O时,使用底层的系统调用(system call)能够获得更好的性能,这些操作更接近硬件,并且一般不提供缓冲功能(bufferring)或额外的格式化(formatting)。C语言标准的函数就是建立在系统调用层之上的(即封装具体平台下的底
20、层系统调用),它更侧重于功能而不是执行速度。但倚赖与C语言标准API对我来说好入手一些,同时,也利于对SVM虚拟机本身的移植。2.8 SVM 中断实模式下的中断处理通过置位/清零,FLAG的第10个比特位(如果下标从0开始计算,就是第9位),我们就能激活/禁止实模式下的软件中断。人们把这个标志位称为IF(interrupt flag中断标志)。IF标志可用两条指令进行置位或清除。STI指令用来对IF标志进行置位,从而使处理器能够对中断做出响应。CLI指令用来清除IF标志,从而使(大多数)中断都被屏蔽。软件中断是用INT指令产生的。每执行一条INT指令,就会产生一个软件中断。INT指令的操作数是
21、一个单字节的整数,人们把它称为“中断向量”(interrupt vector)。例如,用来处理第12个中断向量的指令就是“INT 12”。中断向量可以是0到255之间的任意整数。中断向量其实只是“中断向量表”(interrupt vector table ,IVT)的下标,IVT中的元素都是双字(4字节)数值。既然中断向量有256个可能的取值,IVT表的长度就是1024个字节。中断向量表从处理器地址空间的最底端开始,因此它将占据内存的第一个KB。IVT表中的每一个双字数据项包含着某个中断服务程序的段地址和偏移地址。偏移地址保存在第一个字节里,段地址保存在随后的第二个字里。中断下向量表的构造情况
22、如图所示:图2.2 中断下向量表的构造图处理器在执行中断指令时将按如下步骤进行:1) 把FLAG寄存器压入堆栈2) 把CS寄存器压入堆栈3) 把IP寄存器压入堆栈(向量中断处理结束后将要执行的下一条指令)。4) 清除IF和TF标志位5) 根据中断向量找到对应的IVT数据项6) 把IVT中的段地址和偏移地址分别加载到CS 和 IP 寄存器里去。从效果上讲,这等于是让程序控制条转到中断服务程序,中断服务程序去做自己该做的事。为了让处理器回到一种“清醒”的状态,放到中断服务程序里的第一条指令应该是STI指令,这将唤醒处理器并使它能够再次接受中断请求。中断服务程序必须用IRET指令返回,IRET指令将
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 论文 SVM 虚拟机 设计
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。