1.1 什么是Bochs

Bochs是一个模拟程序,用于模拟一台完整的Intel x86计算机。它仿真范围包括Intel x86 CPU、常见I/O设备和自定义BIOS。Bochs可以被编译来模拟许多不同的x86 cpu,从早期的386到最新的x86-64 Intel和AMD处理器,这些处理器甚至可能还没有进入市场(本人表示怀疑,翻译本文时bochs最新的版本是2017年)。Bochs解释从开机到重启的每条X86指令,并为所有标准的外设:键盘、鼠标、VGA卡/监视器、磁盘、计时器芯片、网卡等,建立的设备模型。因为Bochs模拟整个PC环境,所以在它上运行的软件会认为自己运行在一台真正的计算机上。因此各种软件无需修改就能运行在Bochs上,其中包括最流行的x86操作系统:Windows 95/98/NT/2000/XP和Vista、所有Linux版本、所有BSD版本等等。

Bochs是用c++编程语言编写的,可以在许多不同的主机平台[1]上运行,包括x86、PPC、Alpha、Sun和MIPS。无论运行在何种主机平台上,Bochs始终模拟x86硬件。换句话说,它的工作内容始终是解释X86指令,这不取决于主机平台的指令是什么。这既是优点也是缺点,也是Bochs与许多其他x86仿真软件(如VirtualBox、VMware等)的主要区别。因为Bochs使用软件来模拟每条X86指令,所以它可以在Alpha或Sun工作站上模拟Windows应用程序。不过这也使Bochs具有天生的缺点,模拟性能较低。为了精确地模拟X86处理器,Bochs执行每条被模拟的X86指令都必须执行多条主机平台指令,这使得模拟的机器比物理机器慢很多倍。商用PC仿真器(VMware、Connectix等)使用虚拟化[2]技术可以获得很高的仿真速度,但是它们既不能移植到非x86平台,也不开源。

要在模拟机器中执行任何有趣的操作,Bochs需要与主机平台上的操作系统(主机OS)进行交互。当您在Bochs显示窗口范围内按下键盘的某个键时,键事件将进入键盘的设备模型。当模拟计算机需要从模拟硬盘读取数据时,Bochs从主机上的磁盘映像文件进行读取。当模拟机器向本地网络发送网络数据包时,Bochs使用主机平台的网卡将数据包发送到现实世界。Bochs与主机操作系统之间的这些交互可能很复杂,在某些情况下,它们是特定于主机平台的。例如,在FreeBSD中发送网络数据包需要不同于在Windows XP中发送数据包的代码。因此,某些特性在一些主机平台支持,而另一些主机平台却不支持。在GNU/Linux上,Bochs可以模拟一张与外界通信的网卡,但是在MacOSX上,模拟的网卡可能无法工作,因为设备模型和MacOSX操作系统之间的通信代码还没有编写。

Bochs由Kevin Lawton于1994年开始编写。它最初是一个带有商业许可证的程序,价格为25美元,按原样使用。如果用户需要将其链接到其他软件,则该用户必须协商特殊许可。 [3]最终,在2000年3月,MandrakeSoft(现在称为Mandriva)收购了Bochs,并在GNU LGPL下使其成为开源软件。2001年3月,Kevin帮助一些开发人员将Bochs活动从bochs.com迁移到http://bochs.sourceforge.net的新站点。从那时起,Bochs项目已经适应了它的新环境,在SourceForge上,发布时间甚至达到了本周最活跃的项目的第一位。

[1]由于Bochs可以在一种机器上运行并模拟另一种机器,所以我们必须在术语上保持清晰,以避免混淆。主机平台是运行Bochs软件的机器。客户平台是Bochs正在模拟的操作系统和应用程序。

[2]虚拟化利用在x86机器上模拟x86指令的优势,允许大部分模拟操作以本地硬件速度进行。不过被模拟的机器与硬件通信或进入特定的特权模式(如内核代码)时,模拟器通常会接管控制权并与Bochs一样,并在软件中以更慢的速度模拟代码。

[3]我们需要Bochs的历史学家来帮忙。作为背景,了解Bochs资源过去的成本和用途将是很有趣的。我记得在某个地方看过一个采访,Kevin Lawton说了他为什么要开始,还有一些其他的背景资料。

猜你喜欢

转载自blog.csdn.net/patronwa/article/details/91360956
1.1