1、 本科毕业论文 (科研训练、毕业设计 ) 题 目: 基于 ARM 体系的虚拟机的构架实现 整体构架与实现 姓 名: 学 院:软件学院 系: 专 业:软件工程 年 级: 学 号: 指导教师(校内): 职称: 年 月 厦门大学本科毕业论文 2 摘 要 虚拟机是一种在一种硬件平台上模拟另一种硬件平台的软件。它能够提供与真实硬件相似的行为。虚拟机的用途十分广泛,在硬件开发、操作系统开发、嵌入式开发、防病毒、娱乐等许多领域都发挥了重要的作用。由于目前的硬件平台种类 繁多,虚拟机的开发需求变得十分巨大。 本文旨在通过基于目前应用十分广泛的 ARM CPU 的虚拟机阐述如何实现一个基本的虚拟机。 本文通过阐
2、述虚拟机的基本原理和基本构架,和详细讨论每一个部件的具体实现来说明如何实现一个基于 ARM CPU 的虚拟机。 虚拟机的实现是硬件模拟的软件实现。本文讨论的 ARM 虚拟机软件核心在于 CPU 模块、MMU 模块、及 IO 接口。通过阐明这些模块的模拟方法,包括硬件的寄存器结构与软件模块数据结构、硬件的行为与软件模块的流程。另外,由于虚拟机不同于真实硬件,本文还讨论了虚拟机是如何被驱动工作的 。力图凸现出虚拟机实现中的要点。 关键词 : 虚拟机 ARM CPU MMU IO 厦门大学本科毕业论文 3 Abstract Virtual Machine(VM) is the software th
3、at emulates another hardware platform different from current platform. It can perform the same activity as the true hardware. VMs are widely used in hardware development, operating system development and embedded system development, security system, recreation and so on. Because there exists various
4、 kinds of hardware platforms today, the development of VM becomes more and more important. The destination of this article is to describe how to realize a simple VM based on ARM CPU, which is prevent nowadays. The realization of VM is to emulate a kind of hardware using software. The article discuss
5、es the main point of ARM VMs including CPU module, MMU module and I/O ports, describing the emulation of these modules, the structure of registers and software modules, date structures, hardware activity and the process of software. Besides, because VMs are different from real hardware, the article
6、describes how to drive the VMs to work as well, in order to show the main points of VMs. Key words: Virtual machine, ARM CPU MMU IO 厦门大学本科毕业论文 4 目 录 1. 引言 .6 2. 总体设计 .7 3. 详细设计 .8 3.1. ARM CPU 的模拟 .8 3.1.1. CPU 的工作方式 .8 3.1.2. 寄存器 .10 3.1.3. 指令 . 11 3.1.4. 中断与异常 .16 3.1.5. 驱动 CPU .18 3.1.6. CPU 软件模块
7、的结构 .18 3.2. 内存与 IO 映射 .20 3.2.1. MMU 的工作方式 .20 3.2.2. MMU 模拟细节 .20 3.2.3. IO 映射的模拟 .38 3.2.4. MMU 的软件模块实现 .39 3.3. 其他外设 .39 3.3.1. 外设接口的软件实现 .39 4. 实现结果 .41 5. 致谢语 .44 6. 参考文献 .45 厦门大学本科毕业论文 5 Directory 1. Introduction .6 2. Overall design .7 3. Detailed design.8 3.1. The emulation of ARM CPU .8 3.
8、1.1. CPU working mode.8 3.1.2. Registers.10 3.1.3. Instruction set . 11 3.1.4. Exceptions .16 3.1.5. Drive CPU.18 3.1.6. CPU module implementation.18 3.2. Memory and IO mapping .20 3.2.1. MMU working mode .20 3.2.2. Detailed MMU emulation .20 3.2.3. IO mapping emulation .38 3.2.4. MMU module impleme
9、ntation .39 3.3. Peripheral equipment .39 3.3.1. Peripheral equipment module implementation .39 4. System realization .41 5. Acknowledgement .44 6. References .45 厦门大学本科毕业论文 6 1. 引言 虚拟机是一种在一种硬件平台上模拟另一种硬件平台的软件。它能够提供与真实硬件相似的行为。虚拟机的用途十分广泛,在硬件开发、操作系统开发、嵌入式开发、防病毒、娱乐等许多领域都发挥了重要的作用。 虚拟机是一个软件系统。它的结 构相似与真实硬件
10、结构,但又不完全相同。虚拟机旨在模拟真实硬件的行为。 设计和完成虚拟机需要同时拥有对软件和硬件的深入了解。虚拟机的开发和测试是十分复杂的工作。为了保证虚拟机行为的正确,通常要深入的确保每一个细节模拟的正确性。同时进行大量的测试确保软件质量。例如,在虚拟机中, CPU 通常有数百句指令,每个指令都有对应的处理过程。这些大量的处理过程需要足够的测试来保证其行为的正确。 ARM 体系的 CPU 是基于 RISC 构架的,并广泛用于嵌入式领域的。现有的 ARM 模拟软件有Skyeye,这是一款中国人开发的开源软件 ,目前已经十分成熟。 由于虚拟机开发工作的庞大,我们的目的是开发出一个只具备少量核心成分
11、的虚拟机。也不追求模拟的尽可能精确,但力图将虚拟机开发的要点体现出来。 厦门大学本科毕业论文 7 2. 总体设计 整个虚拟机的结构如图 1 所示: CPUMMUIOCP1 *11* 1*1图 1 系统总览 虚拟机有一个 CPU,一个 MMU,若干个协处理器 CP,及若干个外设 IO。总体上看,这个结构不复杂。实际上,每个模块都包含大量的硬件行为模拟内容。 CPU 模块即模拟 CPU 行为的软件模块, 主要的工作在于指令、异常和中断的模拟。也是整个结构的中心。 CP 接口及协处理模块接口,主要有供 CPU 调用的协处理器访问接口。 CPU 有 15 个协处理器接口,可以和 15 个协处理器合作。
12、 MMU 是协处理器的一种,主要的工作是管理 CPU 对内存的访问。一般有一个 MMU。CPU 可以像对一般的协处理器那样对其进行访问来改变它的行为。 CPU 访问内存的操作由MMU 提供,达到对 CPU 内存访问加以控制的目的。 MMU 也能访问 CPU,比如对 CPU 触发一个内存故障异常。 IO 接口是 MMU 访问外设时,提供给 MMU 访问其寄存器的统一接口。 主要提供依据地址访问其寄存器的接口。外设也需要访问 CPU,比如对 CPU 触发一个硬件中断。 各种不同的外设有不同的功能。有些外设的模拟复杂度不亚于模拟 CPU,模拟的工作量十分大。完整的虚拟机,拥有各种外设。 我们的工作主
13、要倾向于模拟 ARM CPU,并以此构造出虚拟机。 厦门大学本科毕业论文 8 3. 详细设计 3.1.ARM CPU 的模拟 基于 ARM 的体系构架的虚拟机,核心就在于 ARM CPU 模拟的实现。模拟 CPU 的关键在与解释和模拟 CPU 指令的,及 CPU 的工作方式。在虚拟机中, CPU 被实现成一个软件模块。 3.1.1. CPU 的工作方式 从功能层次上看 CPU 虚拟机中的核心, CPU 的工作驱动了虚拟机所有的工作部件。从整体上看,模拟器的体系如图 2所示: C P U内存和 IO 管理模块协处理器其他外设图 2 CPU 模型 CPU 的和各个部件之间存在读、写、中断触发这几个
14、操作。 CPU 从内存中读取指令,然后解释指令。依照每个指令的功能要求,对内存、通过 IO 映射的外设、协处理器进行数据的读写。而内存、通过 IO 映射的外设、协处理器也会在某个时间提交中断,要求引起 CPU 的注意。 在这个体系中 CPU 和各个部件宛如齿轮。 CPU 是中心的大齿轮,其他各个部件是与之相切厦门大学本科毕业论文 9 合的小齿轮。一旦 CPU 被驱动运转起来,那么整个虚拟机也就被运转起来了。 从过程上看, CPU 执行由于流水线的原因被分成几个并行的过程,以三级流水线为例: 取址 译码 执行取址 译码取址指令计数当前指令计数当前指令计数 - 4当前指令计数 - 8图 3 指令流
15、水线 流水线对于程序来说,虽然是透明的。当它仍然影响的程序的执行。不仅在执行的效率上,也影响了程序的行为,由于流水线造成的指令计数( PC)的一种现象,程序计数器往往不是指向正在执行的指令。这使得程序涉及 到操作指令计数寄存器的情况需要特别注意。 ARM CPU 支持直接对 PC 寄存器进行读写,因此可以使用直接写 PC 寄存器进行程序的跳转。这时必须要对 PC做适当的偏移以正确的执行程序行为。在三级流水线 ARM 体系结构中有: 表 1 PC 修正 情况 PC 修正 一般函数返回 -4 未定义指令异常 0 SWI 指令 0 取址异常 -4 数据异常 -8 中断 -4 快中断 -4 虚拟机需要在保证这些情况下, CPU 工作的正确。流水线的模拟可以采用如图 4所示的形式: 厦门大学本科毕业论文 10 图 4 CPU 模拟流程 当然,只要能使行为正确。虚拟机的构造不一定要与真实的硬件运行相同,但要尽可能的保证行为一致。 3.1.2. 寄存器 寄存器是 CPU 的基本数据结构。在虚拟机中 CPU 就是由寄存器,和指令操作组成的一个对象。对于真实硬件而言,访问寄存器的速度是远快于内存的,而在虚拟机中,则可能差别不大的。因为寄存器也是分配在内存中的。 ARM CPU 拥有几套寄存器: 循环 取址( PC) 译码( PC-4) 执行( PC-8) PC=PC+4