在某台计算机上模拟其他计算机的历史已经很长,通常是为了使用遗留应用程序,或者是为了使用更稳定、响应更快的OS的系统上运行流行的OS而编写的应用程序。随着Linux越来越流行,当开发人员规划将运行于非Linux系统上的二进制程序时,需要审视他们的选择。本文将研究模拟器的功能,并将详细地研究硬件模拟和软件模拟的问题。
在某台计算机上模拟其他计算机已有多年的历史。模拟老的计算机的一个常见原因是怀旧,不过不可否认,很多模拟器能够非常出色地运行多种计算机游戏。模拟其他计算机的另一个原因是为了使用只存在于某个特定平台上的应用程序软件。
通常,应用程序模拟以占据较大市场份额的平台为目标。例如,WINE 项目尝试去提供一个运行 Windows二进制程序的途径。
不过,近年来Linux已经被证明是一个稳定而且全能的操作系统;因而,它的市场份额也有所增长。市场份额的增长激起了人们对模拟Linux的兴趣。本文评论了在其他系统上进行Linux二进制程序模拟的现状,并着重指出为了让人们更方便地在模拟环境中运行他们的二进制程序,开发人员应该紧记的一些问题。
基本的模拟器
模拟器的思想很简单。计算机是充分可预测的。如果您想确切地了解如果给出一段特定的代码计算机会做什么,那么通过建立这台计算机的模型就可以得到结果。当然,这会涉及到相当多的开销,但是,如果要模拟的计算机比正在进行模拟的计算机老得多,那么模拟环境将比原来的机器更快。
有一些模拟层,比如NetBSD的Linux模拟层,只是提供某个环境的软件部分的模拟,从 Linux 程序库取得系统调用,并处理返回结果,使得看起来像是在使用 Linux内核。其他的模拟层,比如VirtualPC,可以模拟整台计算机,包括处理器。模拟处理器的速度会更慢,但是可以带来更好的兼容性。
发行版本格式的模拟器
尽管本文重点关注的是在其他平台上运行Linux二进制程序的方法,但是,经过编译的二进制程序发行版本同样占有一席之地。随着Linux模拟环境越来越普及,Linux二进制程序格式成为发行简单程序(不给出源代码)的一个可行方法。Linux二进制程序可以在多种系统上运行,无可否认,有时需要付出一些代价――以Linux二进制程序格式作为通用发行版本格式还会遇到一些挑战。
通常,模拟不足以让您在为另一个系统构建的程序中运行为某个系统构建的共享对象。如果您的产品大部分是以共享程序库对象的形式发行的,那么这些产品可能不会被加载到其他平台上。
有人认为,使用Linux二进制程序格式来向其他平台发行代码是疯狂的。也许这很疯狂,但它是可行的。近几年,我的主要的Web浏览器就一直在模拟环境中运行(更不用提字处理器、文档转换器,甚至信用卡处理软件)。
我们乐于使用的大部分软件应用程序都是商用的,并且,能够发行可以运行在很多平台之上的单一的二进制程序会使商业软件供应商大大受益。如果有多种多样的Linux模拟环境可用,那么Linux二进制程序格式会表现为第一个真正的软件发行版本选择。
噢,移植源代码是与发行有很大区别的任务;通常,移植任务更为简单。
完全硬件模拟器
完全硬件模拟器会模拟一台完整的机器;不只是处理器,还包括机器所有其余部分。例如,被模拟的计算机可能拥有自己的键盘控制器和视频卡。
完全硬件模拟常用于使用较老机器的程序。MAME街机游戏(arcade game)模拟器就是一个流行的示例,它模拟了多种老式街机游戏机的硬件。
就某些方面而言,完全硬件模拟器是进行模拟的最简单方式。很多工作都需要构建一个完全硬件模拟器,但是一旦您拥有这样一个模拟器,所有的事情就都可以迎刃而解。例如,用于 Macintosh 的 VirtualPC 版本 3 开始支持 Linux.
硬件模拟可以解决使用其他方式难以解决的问题。例如,我以前有一个BIOS闪存工具,仅以用于DOS的自解压缩的映像文件的格式发布。更糟糕的是,运行它的机器必须在传统的 ISA 软盘控制器上安装实际的软盘(我的 Windows 桌面机有一个 LS-120 驱动器)。通过模拟来解决这个问题吧!我在模拟器下运行该程序,将数据写入已经插入 Mac 的一个 USB 软盘驱动器。
硬件模拟也有其不利方面。为了让一切都能够运转,需要付出很大努力。如果需要网络,那么还需要很好地模拟网络芯片,以使得操作系统可以在这个芯片上运行。此外,模拟本身所没有的指令的代价可能非常高昂。通常,像这样一个系统可以近乎完美地运转,但是,与时限(timing)相关的功能可能会不可靠。
完全硬件模拟器已经使用了很长时间,最适合处理速度可能受模拟影响的遗留系统和代码。
虽然如此,想要在 Macintosh 或者任何其他非 x-86 机器上运行x86Linux二进制程序的用户,为了尝试运行程序,可能要完全依赖于某种当前可用的x86模拟器。在类似这样的系统上,大部分工具程序将运行得非常好(虽然可能较慢)。要担心的惟一一个主要顾虑是,为了提高性能,这种系统的用户可能安装较小的或者较老的 Linux 发行版本。使用 32 MB 内存来运行模拟机器的那些人不可能运行最新版本的 KDE.
部分硬件模拟器
部分硬件模拟器是一个中间解决方案:它们模拟一台计算机,但是这台计算机只能是与它们实际上所在的计算机类型相同的计算机。由于执行的速度与宿主机器相当,所以类似这样的程序可以降低模拟的成本。此类模拟器的示例包括 Serenity Virtual Station 和 VMWare.
当您拥有用于多种操作系统的应用程序,而且需要同时运行它们时,这些系统最为实用。类似于完全硬件模拟,这样的系统将运行一个完全的 Linux OS 环境,只要您的程序能够适当地跨Linux系统移植,那么就没什么问题。不过,再次声明,Linux的移植到较老版本的可移植性将有非常有用。使用虚拟机的人们可能愿意在这样的系统上运行一个较老的、占空间较小的 Linux 版本。