论文部分内容阅读
计算机虚拟技术一直是计算机发展的一个重要分支,部分应用技术甚至可以追溯到上个世纪60年代。在过去几十年中,各种处理器体系结构不断推陈出新以及同种体系结构的指令集不断演化,导致产生大量只能运行于这些特定处理器上的系统软件和应用软件。在二进制层次上这些运行于不同体系结构或者不同时期同种体系结构上的软件互不兼容。目前主要有三种方法解决这类兼容性问题:a)重写部分源代码并重新编译成你所需要的二进制指令。b)通过采用各种软件技术来兼容不同的指令集。c)在新的处理器体系结构中加入特定的处理器模式。用软件来解决兼容性问题具有很大优势,它不需要源代码、不需要专门的程序员去维护代码、不会增加硬件设计的复杂度以及硬件成本。但用软件方法解决二进制兼容性的最大困难在于速度和可移植性,这是自JIT(Just-in-time)技术出现以来一直亟待解决的问题。论文就这一难题提出了一系列方案,取得良好效果。 当软件仅模拟某一处理器的指令时,称之为全指令模拟器。全指令模拟器分为解释型(Bochs)和动态翻译(JVM,CRL)两大类。论文着重于动态翻译技术的研究和实现。动态翻译技术可以把某一平台上的二进制代码实时编译到另一平台运行,而无需任何修改。一般把实时编译前的二进制指令称为目标指令,模拟器称为目标机器(target),编译后则相应的称为宿主指令、宿主机器(Host or Native)。目标机器和宿主机器既可以是同构也可以是异构。随着近几年嵌入式系统不断发展,软件的品种和难度都成上升趋势。但由于嵌入式芯片性能的局限性,无法在RISC芯片上完成整个软件开发过程。在性能强大的CISC芯片上提供一个RISC芯片的模拟器,在模拟器协助下进行软件开发成为程序员的一个迫切愿望。 论文在分析和总结了现有动态翻译技术优缺点的基础上,提出具有较好移植性和较快速度的动态翻译方法。动态翻译技术不同于静态翻译,它会增加程序运行时间,控制动态翻译自身的开销是重中之重。本论文的方法充分利用程序的局部性原理,降低了管理cache和使用cache时所带来的效率损失。通过提供一个函数返回堆栈对函数调用和返回做优化,可以提高函数调用密集型的程序效率。把转换块的大小从传统上以基本块为单位变成以页(1KB—4KB)为单位进行单次转换。这个变化不仅仅减少了每条目标指令转换所需的时间,也使论文提出了一种全新的优化技术——虚拟机以零开销方式从一个基本块过渡到下一基本块执行。论文以中间宿主指令表示/译码转换方式来解决目标指令中操作数组合过多的难题(一种组合对应一段宿主实现),相比微操作方式具有简单、效率高等特性。最后以这一系列动态翻译技术为基础实现了在x86上模拟MIPS4kc整数指令集的模拟器。