仿真和模拟有啥区别? [复制]

Posted

技术标签:

【中文标题】仿真和模拟有啥区别? [复制]【英文标题】:What's the difference between emulation and simulation? [duplicate]仿真和模拟有什么区别? [复制] 【发布时间】:2011-01-11 14:11:02 【问题描述】:

可能重复:Simulator or Emulator? What is the difference?

用简单易懂的术语来说,这两个术语有什么区别?

[我已经看过this、this和this]

【问题讨论】:

【参考方案1】:

(以您的第一个链接为例)

您想复制旧 HP 计算器的行为,有两种选择:

    您编写了绘制计算器显示屏和按键的新程序,当用户单击按键时,您的程序会执行旧计算器的操作。这是一个模拟器

    您会得到计算器固件的转储,然后编写一个程序来加载固件并以计算器中的微处理器相同的方式对其进行解释。这是一个模拟器

模拟器试图复制设备的行为模拟器试图复制设备的内部工作

【讨论】:

我从未见过更简单的解释...非常感谢:) 更具体地说,模拟器试图从外部角度复制设备的整个行为。它可能需要也可能不需要复制设备的内部工作来实现这一点。模拟尝试复制设备行为的特定子集。 我不同意这里给出的答案。这两个例子都是模拟的,只是在不同的层次上。如果您从计算器上拔下处理器,插入探针,运行计算器,您会得到相同的答案,那么探针就是模拟器。 Jay Elston 在下面给出了更好的答案,狡猾的,半无用的。 有趣的是,这个答案与duplicate question 给出的答案完全相反。 对于这些词在技术背景下的含义似乎存在不同的看法,正如对重复问题截然相反但很受欢迎的answer 所证明的那样。我会支持 Carlos 的回答,因为在我看来,模仿的程度是有区别的,我认为在他的回答中做出了正确的区分。另请参阅 Peter Hans van den Muijzenberg 对 this page 关于胃痛和吃未成熟苹果的看法。【参考方案2】:

这是一个很难明确回答的问题,因为这些术语经常被误用或混淆。

通常,模拟器是对特定设备或平台的完全重新实现。模拟器的行为与真实设备完全一样。例如,NES 模拟器实现 CPU、声音芯片、视频输出、控制器信号等。NES castridge 中未修改的代码可以转储,然后生成的图像可以加载到我们的模拟器中并播放。

模拟器是设备/平台的部分实现,它的功能足以满足其自身目的。例如,iPhone 模拟器运行一个“iPhone 应用程序”,该应用程序专门针对 x86 和 Cocoa API 而不是真实设备的 ARM CPU 和 Cocoa Touch API 进行编译。但是,我们在模拟器中运行的二进制文件无法在真机上运行。

【讨论】:

NES 模拟器不是一个完整的重新实现,它只是看起来在外部观察者看来就像一个 NES。作为模拟器的用户,这当然是您想要的,但它并不意味着内部实现可能与您正在模拟的原始设备有很大不同。【参考方案3】:

两者都是对象的模型,您可以通过某种方式控制输入和观察输出。使用模拟器,您希望输出与您正在模拟的对象完全相同。对于模拟器,您希望输出的某些属性与对象将产生的属性相似。

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

模拟 - 如果您还没有温度计,但您想测试此消息速率不会使您的系统过载,您可以通过附加一个每秒发送 8 次随机数的单元来模拟传感器。您可以运行任何不依赖于传感器发送的实际值的测试。

仿真 - 假设您有一个非常昂贵的温度计,其测量值为 0.001 C,并且您想看看是否可以使用仅测量到最接近的 0.5 C 的更便宜的温度计。您可以使用更便宜的温度计来模拟通过将读数四舍五入到最接近的 0.5 C 并运行依赖于温度值的测试来购买昂贵的温度计。

【讨论】:

查看链接,他说的是硬件仿真【参考方案4】:

我不知道这是否是普遍看法,但我一直根据它们的用途来区分两者。如果您确实想使用仿真机器进行输出,则使用仿真器。另一方面,模拟器适用于您想要研究模拟机器或测试其行为的情况。

例如,如果您想在您的应用程序(在通用 CPU 上运行)中编写一些状态机逻辑,您可以编写一个小型状态机模拟器。如果您想研究状态机对特定问题的效率或可行性,您可以编写一个模拟器。

【讨论】:

这也是我的理解。我什至为这种区别创造了一个流行语:“模拟器就是执行任务的模拟器”。【参考方案5】:

根据软件和系统工程经验,我将区别总结如下:

模拟:对我来说,这总是在软件中 - 真实系统的每个方面都只是由一些代码和/或数学建模。模拟试图准确地再现(或预测)真实系统的行为,但只是对其进行近似。

仿真:与仿真相反,它不近似真实系统的行为,它复制真实系统的行为。仿真器可能涉及硬件。但它也可能完全在软件中。例如。您可以为 Sega Genesis 等旧游戏机获得这些软件模拟器。那是一个模拟器,因为它复制了真正的创世纪功能,因此您可以在模拟器中运行原始的创世纪代码。创世模拟器将无法运行原始代码,它只会近似其行为,产生类似的结果,具体取决于原始系统的模型有多好。

系统组件的模拟器可以包含在更大的系统中,完全替换它正在模拟的组件 - 模拟器不能,因为它不能足够准确地表示原始组件的行为。

【讨论】:

【参考方案6】:

“模拟器” 是基于软件的硬件模拟器的术语,但通常两者是同义词。

【讨论】:

我真的什么都不知道,但我猜有时模拟器可能不会真正模拟实际的低级硬件,而是模拟高级平台api的软件。 两者是有区别的。 “模拟”意味着比“模拟”更详细的行为重复。【参考方案7】:

来自硬件开发领域。 . .

模拟测试功能。 2+2 = 4 等等

仿真在特定环境(64 位、16 位、手指和脚趾)上测试功能。

这是一个食物示例:

您有两片面包、一把刀、花生酱和果冻,将送给幼儿园的孩子。 您编写有关如何制作三明治的说明。

在模拟中,你会表演这个过程,假装你打开罐子,假装撒花生酱等等。

如果在说明结束时您只剩下果冻而不是花生酱,那么您的模拟失败了,您需要修正您的说明。另一方面,如果你有一个完整的“三明治”,那么说明应该是有效的

在仿真中,您将使用实际零件的近似表示(相同的面包、刀花生酱等)。如果你给你幼儿园的孩子一把便宜的塑料刀和非常厚实的花生酱会发生什么?刀会在仿真中损坏,需要澄清或修复说明以适应这个问题。在这种情况下,您可能会建议在微波炉中加热花生酱。

在实践中:考虑您正在编程的 64 位系统和实际运行代码的 32 位系统。您添加两个非常非常大的数字并打印结果。在模拟中一切正常(您设法使代码正确添加两个数字)但是在模拟中您发现您得到了错误的答案。发生了什么? 32 位系统的仿真无法处理大量数字。这是一个正确功能(即模拟)的示例,但没有正确支持您的运行时环境(模拟)

【讨论】:

【参考方案8】:

如果我错了,请原谅我。我必须提前承认,我没有对这两个术语进行任何研究。总之……

仿真是模仿具有详细已知结果的事物,无论内部行为实际上是什么。我们只是努力把事情做好,不太关心里面发生了什么。

另一方面,模拟是模仿具有某些已知行为的事物来研究尚不知道的事物。

我的 2 美分

【讨论】:

【参考方案9】:

这是一个示例 - 我们最近开发了一个模拟模型来测量尚未开发的系统的远程传输响应时间。仿真分析无法及时为我们提供升级带宽容量的答案,因此我们采用了仿真方法。因为我们最感兴趣的是确定带宽需求,所以我们主要关心事务大小和数量,而不是系统的处理。仿真模型位于一个独立的软件上,该软件旨在模拟离散事件过程。总结一下您的问题,仿真是一种模拟。但是,在这种情况下,模拟不是模拟,因为它不能完全代表新系统,只代表交易的规模和数量。

【讨论】:

【参考方案10】:

我对这两个过程感到困惑。我发现了这个关于模拟器和模拟器之间区别的简单解释

    模拟器: 假设你在一个文件和对应的exe中编写了汇编程序 文件准备好了。模拟器是读取指令的电脑软件 从 exe 和 'minmics' 处理器的操作。

    模拟器: 模拟器是一个(PC软件+处理器)。处理器可以插入 当您想实时测试开发的软件时的目标板 检查运行时错误。不用的时候可以拔掉。处理器 将与 PC 具有并行或 JTAG 接口,用于下载 exe 执行文件。

因此,虽然模拟器的执行速度很慢,但模拟器将能够 对开发的代码进行实时验证。 通常你会先在模拟器上测试你开发的代码,然后再去 用于检查模拟器。

来源:http://www.dsprelated.com/groups/c6x/show/148.php

【讨论】:

以上是关于仿真和模拟有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

模拟器还是模拟器?有啥区别?

模拟和存根有啥区别?

使用 Mockito 时,模拟和间谍有啥区别?

如何让我的应用在安卓模拟器中读取系统文件?

在模拟器和设备上运行 monotouch 有啥区别?

VR虚拟现实与VM虚拟制造有啥区别?