在某台计算机上模拟其他计算机的历史已经很长,通常是为了使用遗留应用程序,或者是为了使用为更稳定、响应更快的 OS 的系统上运行流行的 OS 而编写的应用程序。随着 Linux? 越来越流行,当开发人员规划将运行于非 Linux 系统上的二进制程序时,需要审视他们的选择。本文将研究模拟器的功能,并将详细地研究硬件模拟和软件模拟的问题。
在某台计算机上模拟其他计算机已有多年的历史。模拟老的计算机的一个常见原因是怀旧,不过不可否认,很多模拟器能够非常出色地运行多种计算机游戏。模拟其他计算机的另一个原因是为了使用只存在于某个特定平台上的应用程序软件。
通常,应用程序模拟以占据较大市场份额的平台为目标。例如,WINE 项目尝试去提供一个运行 Windows? 二进制程序的途径,因为 —— 面对现实吧 —— Windows 上的优秀应用程序比 Linux 上的多得多(尽管正如他们所指出的那样,WINE 不是模拟器(WINE Is Not an Emulator))。
不过,近年来 Linux 已经被证明是一个稳定而且全能的操作系统;因而,它的市场份额也有所增长。市场份额的增长激起了人们对模拟 Linux 的兴趣。本文评论了在其他系统上进行 Linux 二进制程序模拟的现状,并着重指出为了让人们更方便地在模拟环境中运行他们的二进制程序,开发人员应该紧记的一些问题。
基本的模拟器
模拟器的思想很简单。计算机是充分可预测的。如果您想确切地了解如果给出一段特定的代码计算机会做什么,那么通过建立这台计算机的模型就可以得到结果。当然,这会涉及到相当多的开销,但是,如果要模拟的计算机比正在进行模拟的计算机老得多,那么模拟环境将比原来的机器更快。
有一些模拟层,比如 NetBSD 的 Linux 模拟层,只是提供某个环境的软件部分的模拟,从 Linux 程序库取得系统调用,并处理返回结果,使得看起来像是在使用 Linux 内核。其他的模拟层,比如 VirtualPC,可以模拟整台计算机,包括处理器。模拟处理器的速度会更慢,但是可以带来更好的兼容性。
发行版本格式的模拟器
通常,模拟不足以让您在为另一个系统构建的程序中运行为某个系统构建的共享对象。如果您的产品大部分是以共享程序库对象的形式发行的,那么这些产品可能不会被加载到其他平台上。