模拟器还是仿真器?有什么区别?

598

虽然我大致了解模拟和仿真的含义,但我几乎总是混淆它们。如果我创建一个模拟现有硬件/软件的软件,应该称其为模拟器还是仿真器?

有人能说明编程方面的区别吗?

奖励问题:这两个术语在英语中的区别是什么? (抱歉,我的母语不是英语 :))


4
在移动应用开发中,iPhone 有一个模拟器,而Android 则有一个模拟器。更多信息请参见 - https://dev59.com/LW855IYBdhLWcg3wFALy - Vishnu Haridas
3
我发现维基百科对此的解释很有启发性:http://en.wikipedia.org/wiki/Emulator#Emulation_versus_simulation - AmigoNico
这也可以帮助解释以下内容:http://programmers.stackexchange.com/questions/134746/whats-the-difference-between-simulation-and-emulation?newreg=f4c51f8411974305a89637a60047d35e - Hakan Fıstık
24个回答

5

模拟器: 它类似于解释器。也就是说,它会逐行执行真实代码以模拟其行为。

仿真器: 它类似于可执行文件。也就是说,它会接收已编译的代码并执行它。


4
这两个术语之间的区别有点模糊。在我所处的世界中,“仿真器”是一种硬件,可以让您调试嵌入式系统。记得有些产品可以让您拥有ICE(电路仿真)功能,以调试PC平台。因此,我认为将“仿真”这个术语用于模拟硬件行为的软件有点不恰当。
我对当前使用该术语的理由是仿真可能会“增强”功能,并且仅关注系统行为的“合理”近似。
ICE:(电路仿真) 一种插入到板子上替代实际处理器的硬件。它允许您像实际处理器存在时一样运行系统。通常,这些硬件上有处理器的变体来实际执行软件,带有粘合逻辑以允许用户在硬件控制下中断执行并单步执行。一些还提供日志记录功能。大多数现代处理器开发系统已经用JTAG仿真替换了ICE类型的仿真,其中JTAG只通过特殊目的串行链接与处理器通信,并且所有执行都由安装在板上的处理器执行。
软件仿真器: 一个0x86仿真器只关心能够执行0x86汇编语言,而不是提供特定的0x86处理器的精确逐周期行为模型。 Bochs就是一个例子。 QEMU这样做,但还允许使用特殊内核模块进行“虚拟化”。
模拟器: 德州仪器提供了其处理器的逐周期行为模型,用于软件开发,旨在为开发人员提供SPECIFIC处理器核心行为的准确仿真,以便在拥有工作硬件之前使用。
增强功能的软件仿真器: BLEEM不仅允许您运行Playstation软件,而且还允许以比Playstation能够提供的更高分辨率输出显示,并利用了更先进的GPU功能(即更好的纹理混合和平滑处理)。

4

模拟器是真实系统的替代品,但模拟器用于优化、理解和估计真实系统。


4
模拟是指一种行为类似于其他系统的系统,但采用完全不同的方式实现。它提供了一个系统的基本行为,但不一定遵守被模拟系统的所有规则。它的作用是让你了解某个东西的工作原理。
仿真是指一种行为与其他系统完全相同的系统,并遵守被仿真系统的所有规则。它实际上是另一个系统的完全复制,甚至二进制兼容于被仿真系统的输入和输出,但在不同的环境中运行。规则是固定的,不能更改,否则系统将失败。

4
这两个术语完全不同,只有很少的交集。找到正确的术语其实很容易,只需考虑以下几点:
模拟不会真正产生任何结果,只是进行研究学习,例如计算机如何工作。飞行模拟器中的飞机坠毁不会造成任何实际损失,天气预报模拟本身并不会改变天气。
仿真则会对现实产生影响,可以像使用物理计算机一样操作仿真计算机并创建文档。在飞行模拟器中,飞机坠毁会产生实际效果,可能会对人造成实际伤害。
“研究模拟”和“访问仿真”通常很相似,容易混淆。《黑客帝国》中提到了模拟,但是《黑客帝国》运行的是仿真,因为它对所有黑客帝国成员都有实际影响。相比之下,训练室没有真正的影响,所以这是一个(黑客帝国的)模拟。
例如:模拟雨和仿真雨的区别。模拟雨会让人们责怪你弄湿了他们,但是仿真雨人们会责怪天气。仿真雨真实地像现实中的雨一样行为,这种仿真破坏了现实,让人们相信错误的罪魁祸首。
要记住,模拟可以产生副作用,例如天气预报就是基于模拟的。在“模拟雨”的例子中,人们被淋湿只是一个副作用,而不是模拟的一部分。如果在这个模拟中模拟出彩虹,那么这个彩虹只是水滴的副作用导致阳光折射出来的结果。
虚拟计算机也有两种情况:如果你将文件保存在模拟硬盘上,则这些文件无法离开模拟驱动器。如果硬盘能够保存数据,并且该数据可以在模拟之外使用,则您可以在模拟内使用仿真的硬盘来进行操作。

模拟和仿真可以相互包含。

模拟文件系统 vs. 仿真文件系统

如果您模拟文件系统,为了实用性,您可能会选择将文件保存到真实文件系统上(可能带有一些附加的元信息)。在这种情况下,仿真似乎创建了真正的“价值” - 可用的文件!

但是这仅仅是巧合,因为您的模拟文件系统实际上也仿真了一个文件系统。您实际上在仿真中仿真了外部文件系统!

模拟TPM或HSM vs. 仿真TPM或HSM

安全性是区别的典型例子。TPM是一个特定的设备,用于保护它自己的密钥(身份来源),而HSM是一个通用的设备,用于保护外部密钥(验证身份)。

趣闻:我的手指经常打错TMP而不是TPM。

如果您模拟TPM,则会对安全性产生巨大影响,因为您可以观察TPM的内部状态。这会使所有的安全性都失效。即使这样的仿真可以为改进TPM本身的设计提供有价值的提示,您也不会希望将宝贵的数据真正暴露给仿真TPM。

但是,如果您仿真TPM,则会尽可能隐藏这些内部状态。这样的仿真TPM可以用于比没有仿真TPM更好地保护其他内容。

使用真实的TPM无法仿真真实HSM的属性。您只能模拟HSM,但这将不具备真实HSM的安全性质,因此存储在模拟HSM中的所有数据都不受保护(仅在仿真中受保护)。

相反,使用真正的HSM可以仿真一个真正TPM的所有属性。为此,HSM需要构造得不需要离开TPM的信息。

(请注意,我不知道特定的HSM或TPM信息,因此可能不存在能够提供仿真TPM的HSM。)

模拟世界 vs. 仿真世界

如果我们的世界是模拟的,那么我们也是模拟产生的。因此一些观察者(我们称之为上帝)可以随时查看我们并更改模拟。同样,我们无法确定自己是否被模拟。由于我很确定我知道我是谁,所以我不认为自己是被模拟的,因为自我意识对我来说似乎具有真实的组成部分,这与模拟相矛盾。这也意味着我们的世界也不能是模拟的,因为如果我是模型的一部分,那么模拟只能影响到我,就像世界一样。

但我们的世界仍然可以被仿真(就像电影“黑客帝国”中一样),因为我证明这个世界的唯一方法是我的思想状态和感官输入,而我无法验证它们,因为我无法离开自己。如果我不是仿真的一部分,那么应该有机会观察到不连续性(就像电影“黑客帝国”中一样),以防仿真不完美。
当我也被仿真时,情况就发生了变化,就像在仿真器中运行操作系统一样。然后我无法观察到这样的错误,因为我的状态可以从仿真中重置(称之为:睡眠),而没有可观察到的不连续性。
然而,我更倾向于认为世界是一种全息幻觉,而不是像仿真一样。因为如果它是仿真的,那么我就被某个人(称他为Rick)所控制,他为了某种目的而运行仿真,而幻觉纯粹是我的东西。
我就到这里,因为幻觉会让我们进入完全不同的话题。

自我意识如何与模拟相矛盾,你是由粒子发展成生命形式的结果。 - spO_oks
@spO_oks 我唯一能确定的事情就是我是真实存在的。因为我确实存在。其他所有的东西都可能只是幻觉。(例如,我无法证明你是真实存在的,也无法证明除了我之外还有其他任何东西。假设外面世界除了我之外没有其他东西是毫无意义的,因为最合理的假设是外面世界确实存在,这不是常识吗?) 由于模拟不能真正改变任何事情,但我确实在改变,因此生命是模拟与我存在的事实相矛盾。 - Tino

3
在计算机科学中,模拟和仿真都能够产生与原系统相同的输出,使用相同的输入;然而,仿真还会使用相同的过程来完成,并且是由相同的材料制成。模拟使用与原系统不同的过程。值得注意的是复制这个术语,是两者之间的中间状态-使用相同的过程,但是由不同的材料制成。
因此,如果我想在我的电脑上运行旧版超级马里奥兄弟游戏,我需要使用SNES模拟器,因为它使用相同或类似的计算机代码(过程)来运行游戏,并使用相同或类似的材料(硅芯片)。然而,如果我想在我的电脑上驾驶波音747飞机,我需要使用飞行模拟器,因为它使用与原始系统完全不同的过程(实际上没有机翼、升力或空气动力学涉及!)。
以下是从计算机科学词汇表中提取的确切定义:
模拟是一个系统的模型,捕获系统输入和输出之间的功能连接,但不一定基于与系统本身相同或类似的过程。
复制是一个系统的模型,捕获系统输入和输出之间的功能连接,并基于与系统本身相同或类似的过程。
仿真是某个系统的模型,捕获该系统输入和输出之间的功能连接,基于与该系统相同或类似的过程,并且由该系统相同的材料构建。
参考:开放大学,M366词汇表1.1,2007

3
这些词的定义最能描述它们之间的区别。在谷歌搜索中,simulate和emulate的定义如下:
simulate:模仿外貌或特点。
emulate:通过模仿来匹配或超越(一个人或成就)。
模拟是对系统的模仿。仿真则可以对系统进行如此逼真的模拟,以至于可以取代它甚至可能超越它。
在计算机领域,仿真将是被仿真系统的替代品。往往它甚至会超过正在模仿的系统。例如,游戏机模拟器通常会进行一些改进,比如更好的硬件兼容性、更好的性能和更好的音视频质量。
另一方面,模拟受到它们作为模型的局限性。它们是模仿系统的最佳尝试,但不是它的替代品。有硬件模拟器,因为硬件可以被模仿,很难分辨出差异。然而没有农场模拟器,因为没有仿真能够代替实际种植业务。我们只能模拟农业模型,以获得更好的农业生产洞察力。

3
这个问题可能最好通过查看历史惯例来回答。
过去,我曾在PC上见过PlayStation和SEGA游戏机模拟器。
当涉及到试图模仿现实生活行为的软件时,模拟器是很常见的。 Gran Turismo和Microsoft Flight Simulator是经典的模拟器示例。
至于语言上的区别,仿真通常指复制某人(或某物)值得称赞的特性或行为。仿效不同于模仿,后者是为了嘲弄一个人而进行复制。
动词“模拟”的语言意义本质上是假装或模仿某人或某事。

3

两者都是一种对象的模型,你可以通过某些方式控制输入并观察输出。

关键区别在于:

  • 使用仿真器时,你希望输出与你正在模拟的对象产生的输出相似
  • 而使用模拟器时,你希望输出完全匹配被模拟对象的输出。

让我举个例子——假设你想进行一些系统测试,以查看向系统添加新传感器(如温度计)会如何影响系统。你知道温度计每秒发送8次包含其测量值的消息。

仿真——如果你还没有温度计,但你想测试这个消息速率不会超载你的系统,你可以通过连接一个每秒发送随机数的单元来模拟传感器。你可以运行任何不依赖于传感器实际发送值的测试。

仿真器——假设你有一个非常昂贵的温度计,精确到0.001摄氏度,并且你想要看看是否可以使用一个只精确到最近0.5摄氏度的更便宜的温度计。你可以使用昂贵的温度计来模拟更便宜的温度计,然后将读数四舍五入到最近的0.5摄氏度,并运行依赖于温度值的测试。

请注意,仿真也可以用于预测或预测行为。有限元分析仿真在许多应用中都被使用,包括天气预报和虚拟风洞。

这些术语的定义:

  • 仿真器——外观或特征上模仿
  • 模拟器——超过或完全匹配

请注意,这与已被标记为此问题的重复项(https://dev59.com/H3I95IYBdhLWcg3wvwoQ)的答案非常相似。我添加了术语的定义(在问题中要求但尚未回答),并添加了有关模拟用途(有限元分析)的一些信息,以便更多地模拟设备。 - Jay Elston

2
一个虚拟PC试图从程序员的角度模拟一台计算机,同时从电气工程师的角度模拟一台计算机。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接