使用 Bochs 进行平台仿真(1)


Bochs 是较小的 GNU 公共许可证(GNU Public License,GPL)下获得许可的一种 x86 PC 仿真器和调试器。该平台提供对整个 PC 平台的仿真,包括一个或多个处理器和各种不同的 PC 外围设备,比如硬盘、显示器、CD-ROM 驱动器以及其他常用外围设备。您可以使用 Bochs 来运行针对 PC 平台的操作系统,它还是一个适用于操作系统开发的理想应用程序(因为除了 Bochs 提供的调试功能外,在来宾机器内可以隔离开发中操作系统的崩溃)。虽然 Bochs 通过仿真完成此操作,但是却以性能为代价。

让我们快速浏览并了解仿真和目前更常用的虚拟化方法之间的不同。

平台仿真

Bochs 是一种平台仿真器,这意味着它其实并不是现代意义上的虚拟化,而是模拟。在虚拟化中,虚拟机监控程序和虚拟机(VM)在裸机硬件上执行(通常通过硬件指令,虚拟机监控程序创建环境在 VM 之间共享硬件)。因为通过主机处理器直接执行指令,所以此过程通常被称为直接执行。此种类型的虚拟化使用来自现代处理器的支持(如 Intel Virtualization Technology for x86 [VT-x] 或 AMD virtualization [AMD-V])。仿真通常在 VM 和底层硬件和操作系统之间提供层以便创建如图 1 中所示的预期的平台环境的幻想。

图 1. 虚拟化 vs.仿真

图 1. 虚拟化 vs.仿真

仿真还常常解释来宾 VM 的指令(与虚拟化相比,此处来宾的指令集架构必须与主机相同)。这就为仿真建立了有趣的优势,此处来宾 VM 平台完全不同于主机(例如,在 IBM® PowerPC® 目标上运行 x86 来宾)。

仿真的另外一个有趣的优势就是对环境的完全控制,即更容易暂停整个机器来检查其状态以及将任何类型的故障引入仿真以测试操作系统的错误树。虽然此功能以性能为代价,但是它才是此类环境的真正好处。此外,仿真器提供了来宾机器与主机的真正隔离。这样,仿真器可以提供完全透明的环境。

仿真性能

在某些情况下仿真可用于性能架构。一个示例就是 Transmeta 创建的代码融合技术。Transmeta 的处理器是可以仿真 x86 代码序列的超长指令字(Very Long Instruction Word,VLIW)超级标量架构。它通过仿真或动态编译代码系列(类似于 QEMU 功能)来实现这一点。Transmeta 在 1995 年开启了其大门,然后又在 2007 年底将其关闭。

其他示例包括 Java 技术,它从 Java 字节码到主机的底层架构得到解译。Java 技术实现了实时(just-in-time,JIT)编译以便解决一些效率低下工作,类似于 Transmeta 和大量其他的仿真解决方案(包括 QEMU,它是另外一种类似于 Bochs 的平台仿真解决方案)。但是 Bochs 也实现了高效仿真(在现代处理器上高达每秒钟 1 亿条指令 [MIPS]),同时还是便携的。对于解译的 x86 指令执行和平台仿真,Bochs 完全是用 C++ 语言开发的。


相关内容

    暂无相关文章