论文部分内容阅读
二进制翻译(Binary Translation)是指在不需要可执行程序源代码的情况下,将源机器平台上的二进制程序经过一定的转换之后运行在目标机器平台上的过程。动态二进制翻译是二进制翻译技术的重要分支,通常的过程是边翻译边执行,并在执行期对目标代码进行动态优化。动态二进制翻译为解决代码遗留,代码移植以及构建分布式虚拟计算环境等问题提供了一个良好的解决方法,因此在近年来得到了越来越广泛的关注和研究。如何提高动态二进制翻译系统的性能,是每个动态二进制翻译系统亟需解决的问题之一。传统的动态二进制翻译系统大量采用基于Profile信息的动态优化技术。然而,动态优化过程的所有工作都是在运行时完成,在获取Profile信息和进行目标代码优化时,自身付出的性能损耗是不得不考虑的问题。同时,Profile所获得信息的丰富程度又直接影响着后续优化算法的效果。因此,如何在动态优化的性能开销和优化效果中找到平衡是二进制翻译的研究者和开发者面临的巨大难题。为解决优化过程的开销和效果之间的矛盾,本文的研究目的是通过提出一种适用于动态二进制翻译的静态优化架构(Sinof),既有效的屏蔽Profiling过程和优化算法的性能开销,同时又对目标代码进行深入的优化,由此得到大约30%-50%的执行性能提升。其原理是通过在源代码首次翻译执行时,收集丰富的Profile信息,并将这些信息和目标代码保存。在静态环境下,根据这些信息对目标代码进行深入的优化。在之后的翻译执行中,复用这些优化后的目标代码,从而得到较大的性能提升。本文的主要创新点和意义有:1)开发出一种适合于动态二进制翻译的静态优化架构,有效的屏蔽Profiling技术和优化策略的性能开销;2)设计了一种基于边之间关系的Profiling技术,为后续的优化方案作充足的信息准备;3)实现了在静态环境下利用Profile信息识别热路径,调整代码块相对位置;4)利用Profile信息在静态环境下实现链接,进一步减少了上下文切换次数和系统开销;5)记录可重定位信息,使目标代码拥有可重定向性,使之在以后程序执行时可被复用。