首页 > 技术文章 > 【Bochs 官方手册翻译】 第一章 Bochs介绍

boluoke 2016-09-22 16:45 原文

Bochs 是一个可以完全模拟 Intel x86 计算机的虚拟机系统。它包含了 Intel x86 CPU 仿真、常见设备仿真、以及定制 BIOS。Bochs 可以虚拟多种不同类型的 x86 CPU ,从早期的 386 到最新的 x86-64 Intel 和 AMD 处理器,甚至是市场上还没有销售的 CPU。

Bochs 会去解释从电源启动开始的每一条指令,以及所有 PC 标准外设:键盘、鼠标、VGA 卡/监视器、磁盘、网卡、定时器芯片 等等。由于 Bochs 模拟了所有的 PC 环境,因此所有的运行的系统,就如同运行在一台真实的机器中。这种方式使得 Bochs 可以运行各种软件。例如多种流行的 x86 操作系统:Windows 95/98/NT/2000/XP 和 Vista,所有的 Linux类型以及BSD类型的操作系统等等。

Bochs 使用 C++ 编写,被设计运行于多种主机平台,包括 x86、PPC、Alpha、Sun、MIPS。无论运行在什么平台 Bochs 都只能模拟 x86 硬件。换句话说,它不依赖于这些主机的本地 CPU 指令集。这种方式有它的优点,但也有缺点。这是它与其它的仿真软件(如:VirtualBox、Vmware 等等)不同之处。

由于 Bochs 使用软件仿真 x86 指令,因此可以虚拟出在 Alpha 或 Sun 工作站上的 Windows 应用程序。然而这种软件仿真方式,会直接影响到仿真设备的性能。为了精确的模拟处理器,Bochs 每运行一条 x86 ,实际上真正执行的CPU指令远不只一条,这就造成,仿真机运行速度比物理机器要慢许多。商业 PC 仿真软件(VMware、Connectix 等)使用 virtualization 技术可以获取更高的虚拟性能,但它们不能工作于非 x86平台,软件体积也十分庞大,而且不是开源的。

当人们在虚拟机中做出任意一件有趣的行为时,Bochs 希望在主机平台上都产生相应的效果。当你在 Bochs 显示界面中按下一个按键,按键行为会被发送到 Bochs 的设备模型中。当 虚拟机需要读取虚拟硬盘, Bochs 会从主机上的磁盘镜像读取数据。当虚拟机发送网络数据包到本地网络,Bochs 使用主机的网卡发送数据包到真实世界。这种主机与 Bochs 的交互可能是十分复杂的,有些情况下和主机平台有密切的关系。例如在 FreeBSD 和WindowsXP 两种系统中发送网络数据需要使用不同的代码。正是由于这种原因,某些主机所支持的特性,在其它的主机中就可能不被支持,Bochs 可以虚拟一个网卡与真实世界进行通讯,但在 MacOSX 中虚拟网卡就不能工作,因为 MacOSX 中相应的代码还没有编写.

Bochs 由 Kevin Lawton 1994 年开始创建. 一开始,它使用的是商业许可,不加改动的使用原始程序,我们需要为它花上 25 美元。如果用户需要将它也其它的软件进行链接,那么使用者需要同意一个特别许可协议。最终在2000年3月, MandrakeSoft (现在称为 Mandriva) 买下了 Bochs 并利 GNU LGPL 协议公开了它的源码. 2001 3月,Kevin 帮助一些开发人员,将 Bochs 从 bochs.com 移至 http://bochs.sourceforge.net。至此 Bochs 项目正式落户新家, 其新版本的发布时间,一度排到了 SourceForge 周榜第一。

注释


【1】 自从 Bochs 在一台机器上运行后,可以仿真出其它的机器,我们就不得不搞清专业术语,避免概念上产生混乱。主机平台是运行 Bochs 软件的机器。客户平台是 Bochs 虚拟出的 操作系统和应用软件。

【2】 Virtualization 利用 x86 机器上 x86 仿真指令,允许大部分仿真操作直接访问CPU,从而实现和主机一样的执行速度,每当虚拟机与硬件进行交互或进入某一特权模式(如内核代码)虚拟机通常需要控制和虚拟一些软件代码,这种操作通常和 Bochs 一样执行速度都比较缓慢。

【3】 这儿我们需要一个 清楚 Boch历史的人来帮帮忙。介绍一下相关的背景信息,关于 Bochs 花费了多少时间编写这个程序以及开发这个程序的最初目的。我记得我在什么地方看到过 Kevin 的采访,他讲过他为么要开始这个项目,以及其它一些背景信息。

谁在使用 Bochs

很难估计到底有多少人已经用过或正在使用 Bochs,但有一些统计数据给了我们一些提示。bochs 开发者邮件列表是 最新Bug 和 新版本发布 这些消息的主要来源,目前它已经有超过 400 个订阅。在 SourceForge 上最新版本的 bochs 下载数已经超过 150,000 次,这儿还没有统计其它的镜像网站以及 SVN 用户。

Bochs 可用于许多地方,不同的人会用来它来做不同的事情。很多人在没有 多台计算机 或 双系统 的情况下,利用 Bochs 安装一个虚拟机,从而运行一些特定的程序。常见用法在 非 x86 工作站上或 x86 Unix 系统上运行 Windows 软件。另外由于每个硬件指令和模拟器代码的每一行代码都是可阅读和理解的,因此 Bochs 还可常常用于调试新的操作系统。如果你自制的操作系统编写的启动代码没有工作,Bochs 会生成一份非常详细的启动信息报告,告诉你在启动过程中,到底发生了什么问题。Bochs 调试程序让你通过快速、慢速、暂停运行这些操作,随时可以观察个内存和CPU寄存器的情况。或者你想了解那部分程序发费的时间太长,你就可以使用 Bochs 评估某些代码运行所花费的时间。

Bochs 还是常常用于操作系统原理的教学,学生可以通过使用和修改Bochs 了解 PC 硬件的工作原理。在一个最终项目中,学生不得不添加新的外部设备,这时他们就可以通过 Bochs 学习所有关于 I/O 端口、中断、设备驱动的相关知识。在工业生产中可用于现代硬件中支持 很老的应用程序,或测试新的 x86 兼容硬件时的测试平台。

这还有一些更多应用,你想运行老的 DOS 游戏 ? 在不离开你的 Windows 系统的情况下学习 GNU/Linux 编程,或使用反向工程分析你的打印机驱动,这一切都由你决定。

Bochs 适合我嘛?

Bochs 对于一些应用十分有用,但并不适用于所有情况。这章将尝试回答问题:”Bochs 适合我嘛?“

Bochs 对你来说可能合适也可能不合适,这完全依赖于你想做什么。也你只是想在GNU/Linux 运行 1,2个 原本只能运行于 Windows 中的程序,反之亦然。也许你最关心的是速度和性能。也许你不介意调整一些文件选项使得一些应用可以工作。也许 需要在 x86 上虚拟 x86 硬件,VirtualBox, Wine 和 VMware 也许是更好的选择。

另一方面,也许你有一些十分重要的程序只能运行在很老操作系统中,而这种操作系统又只能运行在很久以前的硬件中。你担心你硬件已经被时代所淘汰,你缺少备用硬件和工具,缺少售后支持。你需要通过网络传送备份的磁盘镜像,为硬件维护使用最新软件。也许在大型机是运行一个十分重要的软件,如64位机器或一台服务器主机,Bochs 将是一个很好的解决方案。

也许你想调试软件或硬件驱动。bochs 提供的控制环境,能更好的帮助你更好的跟踪捕获程序运行时产生的各种软硬件信息。你可以通过快照显示程序运行时的背后信息。你可以
隔离潜在的系统崩溃风险。你可以拥有多个镜像,并进行比较。在这种情况下, Bochs 可以为你节省时间和资源。

信息技术的变化速度,远超过其它领域。因此很容易忘记过时的技术,但在所有领域,老旧的技术同样十分重要的,理解过去的技术,对于掌握新技术是十分重要的,计算机程序员,无论怎样都不会像建筑师那样,到希腊去旅游或是触摸一个柱子来感受历史。大多数的计算机技术的历史都是留在了腐蚀的磁盘和故障硬件中。Bochs 让你拥有一个或多个完整的计算机环境的好处在于,你可以从中获取到操作系统或程序运行的第一手资料。这些东西是无法从 “emulator“ 中(如: Wine) 中获取到的。

推荐阅读