论文部分内容阅读
伴随着计算机体系结构的快速发展,代码迁移这一课题显得越发重要。新的体系结构如果不能广泛的被应用软件支持,将很难生存下去。龙芯是我国自主研发的通用CPU,采用MIPS架构,它的发展有着重大的意义。但是,在当今处理器市场中,X86架构的CPU占据着主导地位,大量的软件和操作系统都是基于该平台开发。在这样的环境下,发展龙芯及其相关产业链的首要任务就是要在软件层上实现对X86架构的兼容。解决跨平台软件兼容问题的常用方法就是利用动态二进制翻译工具在体系结构之上构建一个虚拟层来让目标软件运行。目前,动态二进制翻译工具进行系统级模拟构建虚拟层的相关研究大多是在用户空间下的移植和优化。在此基础上,本文提出了新的思路,内嵌跨平台无需硬件支持的虚拟层到操作系统内核中去,让操作系统直接支持虚拟层、让虚拟层直接与硬件交互,从而提高虚拟层的运行效率。为了验证这一想法,动态二进制翻译工具QEMU被内嵌到了Linux内核中,以便让QEMU进行系统级模拟构建出的虚拟层运行在内核态并可以独占计算机资源。QEMU内核化项目的最终目标是在龙芯平台上构建内核空间中的虚拟层,而本文则实现了以X86平台为基础的具有基本功能的内核化虚拟层这一近期目标。文章首先分析了内核化QEMU的主要思路,给出了内核化虚拟层的架构和大致实现流程。然后,详细介绍了接口移植问题。接口移植问题的实质是QEMU在用户空间使用的库函数的内核化问题。待移植接口可分为四类,分别是可直接移植接口、通过组装修改可实现的接口、用内核方法可替代的接口和需要重写的接口。解决接口移植问题的主要方法是利用内核函数实现QEMU调用的库函数的功能。接着,重点分析了内核化QEMU的设备模拟问题。为了减少设备模拟带来的性能损耗,解决该问题的核心思想是让虚拟层直接与硬件进行交互。在介绍设备模拟问题时,以VGA显卡直通、虚拟层输入问题和内核化QEMU的DMA模拟方案为例进行了详细的分析。最后,含有QEMU的Linux内核被部署在X86平台上进行了实验。通过一系列的测试表明,内核化QEMU的性能确实得到了一定的提升,从而证明了本文提出的优化思路是有效的。通过本文对内核化虚拟层的研究,为如何在龙芯上构建跨平台并且高效的系统级虚拟层提供了一个新的思路。