虽然我理解模拟和模拟的一般含义,但我几乎总是对它们感到困惑。假设我创建了一个模仿现有硬件/软件的软件,我应该如何称呼它?模拟器还是模拟器?
有人能从编程的角度来解释一下吗?
福利:这两个词在英语中有什么区别?(对不起,我的母语不是英语:))
虽然我理解模拟和模拟的一般含义,但我几乎总是对它们感到困惑。假设我创建了一个模仿现有硬件/软件的软件,我应该如何称呼它?模拟器还是模拟器?
有人能从编程的角度来解释一下吗?
福利:这两个词在英语中有什么区别?(对不起,我的母语不是英语:))
这个问题最好的答案可能是看一看历史实践。
在过去,我曾在PlayStation和SEGA的PC上看到过游戏主机模拟器。
模拟器是指那些试图模拟现实生活行为的软件,比如驾驶或飞行。《Gran Turismo》和《微软飞行模拟器》都是模拟游戏的经典例子。
就语言差异而言,模仿通常指的是模仿某人(或某事)值得称赞的特征或行为。仿真与模仿是不同的,模仿是为了嘲弄而复制一个人。
动词“simulation”在语言学上的意思基本上是假装或模仿某人或某事。
如果一个飞行模拟器可以把你从a带到B,那么它就是一个飞行模拟器。
仿真器可以代替原来的,以供实际使用。 虚拟PC是一种模拟PC的设备。
模拟器是用于研究和分析的模型。
模拟器总是必须接近实时运行。对于模拟器来说,情况并非总是如此。地质模拟可以做到1000年/秒甚至更久。
模拟是模拟外部可观察到的行为以匹配现有目标的过程。模拟机制的内部状态不必准确地反映它所模拟的目标的内部状态。
另一方面,仿真涉及到对目标的基本状态进行建模。一个好的仿真的最终结果是,仿真模型将模拟它所模拟的目标。
理想情况下,您应该能够查看模拟并观察到您在查看原始目标时也会看到的属性。在实践中,由于性能原因,模拟可能存在一些快捷方式——也就是说,模拟的某些内部方面实际上可能是模拟。
MAME是一款街机游戏模拟器;Hyperterm是一个(不是很好的)终端仿真器。没有必要为街机或终端详细建模以获得所需的模拟行为。
《Flight Simulator》是一款模拟器;SPICE是一个电子模拟器。他们尽可能地模拟目标的每个细节,以表示目标在现实中的行为。
EDIT: Other responses have pointed out that the goal of an emulation is to able to substitute for the object it is emulating. That's an important point. A simulation's focus is more on the modeling of the internal state of the target -- and the simulation does not necessarily lead to emulation. In particular, a simulation may run far slower than real-time. SPICE, for example, cannot substitute for an actual electronics circuit (even if assuming there was some kind of magical device that perfectly interfaces electrical circuits to a SPICE simulation.) A simulation does not always lead to emulation --
这是焦点的不同。模拟器1专注于重新创建系统的行为,而不考虑系统内部的功能。模拟器s2着重于系统组件的建模。当你主要关心一个系统做什么时,你使用模拟器;当你关心它如何做时,你使用模拟器。
就其一般的英文含义而言,emulation是“在品质或行为上努力达到或超过他人”,而simulation是“模仿、复制、复制行为、外观或特性”。差别不大。竞赛来自æmulus,“奋斗,竞争”,与“模仿”和“形象”有关,这表明表面上的相似。“模拟”来自similis的“像”,“相似”一词也是如此,这可能暗示了更深层次的一致性。
引用:
维基百科:模拟器 维基百科:计算机模拟 Wiktionary:模拟 Wiktionary:模拟 词源在线:仿真 词源在线:模拟
几年前,我想出了一个非常简短的格言,我相信,它很好地抓住了差异的本质:
模拟器是执行任务的模拟器。
我的意思是,当你不能使用真正的东西时,你可以使用模拟器,当你不能使用真正的东西时,你可以使用模拟器,当你想找到一些关于它的东西时。
这两个术语之间的区别有点模糊。来自一个“模拟器”是允许您调试嵌入式系统的硬件的世界。记住那些允许你拥有ICE (In Circuit Emulation)功能来调试PC平台的产品,我发现术语“仿真”的使用对于模拟一块硬件行为的软件来说有点不恰当。
我对当前使用“仿真”一词的理由是,它可以“增强”功能,并且只与系统行为的“合理”近似有关。
ICE: (In Circuit Emulation) A piece of hardware that is plugged into a board in place of the actual processor. It allows you to run the system as if the actual processor was present. Typically these have a variant of the processor on them to actually execute the software with glue logic to allow the user to break executation and single step under hardware control. Some would also provide logging capability. Most modern processors development systems have replace ICE type emulation with JTAG Emulation, where the JTAG just talks to the processor via a special purpose serial link and all execution is perform by the processor mounted on the board.
软件模拟器: 0x86仿真器只关心是否能够执行0x86汇编语言,而不提供特定0x86处理器的精确的每周期行为模型。Bochs就是一个例子。QEMU做到了这一点,但也允许使用特殊的内核模块进行“虚拟化”。
模拟器: 德州仪器为软件开发提供了一个处理器的CYCLE ACCURATE行为模型,该模型旨在精确模拟特定处理器核心的行为,供开发人员在拥有工作硬件之前使用。
软件模拟器增强功能: BLEEM不仅允许你运行Playstation软件,还允许显示器输出比Playstation能够提供的分辨率更高的分辨率,并且还利用了可用的gpu的更高级功能。(即更好的混合和平滑纹理。)
在计算机科学中,模拟和仿真都从相同的输入产生与原始系统相同的输出;但是,仿真也使用相同的过程来实现它,并且由相同的材料制成。模拟使用与原始系统不同的进程。同样值得注意的是术语复制,它是两者的中间——使用相同的过程,但由不同的材料制成。
所以如果我想在我的PC上运行我的旧《超级马里奥兄弟》游戏,我会使用SNES模拟器,因为它使用相同或类似的计算机代码(进程)来运行游戏,并使用相同或类似的材料(硅芯片)。 然而,如果我想在我的个人电脑上驾驶波音747喷气式飞机,我会使用飞行模拟器,因为它使用的过程与原来的完全不同(没有实际的机翼、升力或空气动力学!)。
以下是摘自计算机科学术语表的准确定义:
模拟是一种系统模型,它捕捉了系统输入和输出之间的功能连接,但不一定基于与系统本身相同或相似的过程。
复制是一种系统模型,它捕获系统输入和输出之间的功能连接,并基于与系统本身相同或相似的过程。
仿真是某种系统的模型,它捕获系统输入和输出之间的功能连接,基于与该系统相同或类似的过程,并且由与该系统相同的材料构建。
参考文献:The Open University, M366 Glossary 1.1, 2007
我不认为模拟器和模拟器可以比较。两者都模仿某些东西,但不是同一推理范围的一部分,它们不在同一上下文中使用。
简而言之:模拟器被设计用来复制原始程序的某些特性,甚至可以在真实环境中替换它。模拟器的设计不是为了复制原物的特征,而是为了在人类看来与原物相似。没有了原有的功能,仿真器无法在实际环境中代替原有的功能。
An emulator is a device that mimics something close enough so that it can be substituted to the real thing. E.g you want a circuit to work like a ROM (read only memory) circuit, but also wants to adjust the content until it is what you want. You'll use a ROM emulator, a black box (likely to be CPU-based) with a physical and electrical interfaces compatible with the ROM you want to emulate. The emulator will be plugged into the device in place of the real ROM. The motherboard will not see any difference when working, but you will be able to change the emulated-ROM content easily. Said otherwise the emulator will act exactly as the actual thing in its motherboard context (maybe a little bit slower due to actual internal model) but there will be additional functions (like re-writing) visible only to the designer, out of the motherboard context. So emulator definition would be: something that mimic the original, has all of its functional features, can actually replace it to some extend in the real world, and may have additional features not visible in the normal context.
A simulator is used in another thinking context, e.g a plane simulator, a car simulator, etc. The simulation will take care only of some aspect of the actual thing, usually those related to how a human being will perceive and control it. The simulator will not perform the functions of the real stuff, and cannot be sustituted to it. The plane simulator will not fly or carry someone, it's not its purpose at all. The simulator is not intended to work, but to appear to the pilot somehow like the actual thing for purposes other than its normal ones, e.g. to allow ground training (including in unusual situations like all-engine failure). So simulator definition would be: something that can appear to human, to some extend, like the original, but cannot replace it for actual use. In addition the pilot will know that the simulator is a simulator.
我认为我们不会看到ROM模拟器,因为ROM不与人类交互,我们也不会看到任何平面模拟器,因为在现实世界中,飞机无法有一个替代物来执行相同的功能。
在我看来,模拟器或模拟器中的模型可以是任何东西,并且不必与原始模型相似。一个ROM模拟器模型将很可能是软件而不是硬件,MS飞行模拟器不能比它更软件。
这两个术语的比较将与当前选择的答案(来自Toybuilder)相矛盾,后者将差异放在内部模型上,而我的建议是,差异在于假的是否可以用于执行实际世界中的实际功能(确实在某些可接受的范围内)。
注意,飞机模拟器还必须模拟地球、太阳、风等,这些都不是飞机的一部分,所以飞机模拟器必须模拟飞机的某些方面,以及飞机的环境,因为它不是在这个实际环境中使用,而是在一个训练室中使用。
This is a big difference with the emulator which emulates only the orginal, and its purpose is to be used in the environment of the original with no need to emulate it. Back to the plane context... what could be a plane emulator? Maybe a train that will connect two airports -- actually two plane steps -- carrying passengers, with stewardesses onboard, with car interior looking like an actual plane cabin, and with captain saying "ladies and gentlemen our altitude is currenlty 10 kms and the temperature at our destination is 24°C". Its benefit is difficult to see, hum...
总之,模拟器是一个真实的东西,旨在工作,模拟器是一个假的,旨在欺骗用户。
模拟=用于分析和研究
模拟=作为替代品使用
模拟器是模拟环境,而模拟器是复制原始设备或系统上的使用情况的环境。
模拟器模拟它所模拟的事物的活动。它“看起来”(根据上下文,很多人都可以用这个“看起来”)与被模拟的事物相同。例如,对用户来说,飞行模拟器“看起来”是一次真实的飞行,尽管它并不能将你从一个地方运送到另一个地方。
另一方面,模拟器实际上“做”被模拟的事情,在这样做的时候,它也“看起来在做同样的事情”。仿真器可以使用不同的协议集来模拟被仿真的对象,但结果/结果总是与原始对象相同。例如,EMU8086模拟计算机上的8086微处理器,显然它不是在8086上运行的(=不同的协议),但它给出的输出是真正的8086所给出的。
To understand the difference between a simulator and an emulator, keep in mind that a simulator tries to mimic the behavior of a real device. For example, in the case of the iOS Simulator, it simulates the real behavior of an actual iPhone/iPad device. However, the Simulator itself uses the various libraries installed on the Mac (such as QuickTime) to perform its rendering so that the effect looks the same as an actual iPhone. In addition, applications tested on the Simulator are compiled into x86 code, which is the byte-code understood by the Simulator. A real iPhone device, conversely, uses ARM-based code.
相比之下,模拟器模拟真实设备的工作。在模拟器上测试的应用程序被编译成实际设备使用的实际字节码。仿真器通过将字节码转换为可由运行仿真器的主机执行的形式来执行应用程序。
为了理解模拟和模拟之间的微妙区别,假设您试图说服一个孩子玩刀是危险的。为了模拟这种情况,你假装用刀割伤自己,并痛苦地呻吟。为了模仿这一点,你真的会割伤自己。
两者都是对象的模型,您可以通过某种方式控制对象的输入和观察对象的输出。
关键的区别在于:
使用模拟器,您希望输出与所模拟的对象将产生的结果完全匹配。 使用模拟器,您希望输出的某些属性与对象将产生的类似。
让我举个例子——假设你想做一些系统测试,看看在系统中添加一个新的传感器(比如温度计)会如何影响系统。你知道温度计每秒发送8次包含其测量值的信息。
模拟——如果你还没有温度计,但是你想测试这个消息速率不会使你的系统过载,你可以通过附加一个每秒发送8次随机数的单元来模拟传感器。您可以运行任何不依赖于传感器发送的实际值的测试。
模拟——假设你有一个非常昂贵的温度计,测量值为0.001 C,你想看看是否可以使用一个更便宜的温度计,只能测量到最近的0.5 C。你可以使用一个昂贵的温度计模拟更便宜的温度计,然后将读数四舍五入到最近的0.5 C,并运行依赖于温度值的测试。
注意,模拟也可以用于预测或预测行为。有限元分析模拟应用于许多领域,包括天气预报和虚拟风洞。
术语的定义:
竞赛——超越或完全匹配 模仿——模仿外表或性格
简单的解释。
如果你想把你的电脑(运行Windows)转换成Mac,你可以做以下任何一项:
你可以简单地在你的Windows上安装一个Mac主题。所以,你的电脑感觉上更像Mac,但实际上你不能运行任何Mac程序。(模拟)
(or)
(2)你可以把你的电脑编程成像Mac一样运行(我不确定这是否可能:P)。现在你甚至可以成功地运行Mac程序,并期望得到与Mac上相同的输出。
在第一种情况下,你可以体验Mac,但你不能期待与Mac相同的输出。 在第二种情况下,你可以期待与Mac上相同的输出,但事实仍然是它只是一台PC。
模拟是一种行为类似于其他事物,但以完全不同的方式实现的系统。它提供了系统的基本行为,但不一定遵守被模拟系统的所有规则。它的存在是为了让你了解事物是如何工作的。
模拟是一种行为完全类似于其他系统的系统,并且遵守所模拟系统的所有规则。它实际上是另一个系统的完全复制,甚至与仿真系统的输入和输出二进制兼容,但在与原始仿真系统的环境不同的环境中运行。规则是固定的,不能更改,否则系统会失败。
模拟器:
Consider a situation that you know only English and you are in China. In order to interact with a Chinese person you need a translator. Now, role of translator is that it will seek input from you in English and convert to Chinese and and give that input to the Chinese person and gets response from the Chinese person and convert to English and give the output to you in English. Now that translator and Chinese person is the emulator. Both combine will provide similar functionality as if you were communicating with the English person. So hardware may be different but functionality will be same.
模拟器:
我想不出比SPICE或飞行模拟器更好的例子了。两者都将用与硬件行为相似的软件或数学模型取代硬件组件行为。
最后,哪种解决方案更适合项目需求取决于上下文。
词语的定义最好地描述了差异。谷歌搜索给出了以下模拟和仿真的定义:
模仿…的外表或特征。
模仿,赶上或超越(某人或某项成就),通常是通过模仿。
仿真模拟一个系统。仿真可以很好地模拟一个系统,从而可以取代它,甚至可能超过它。
在计算中,模拟将是它所模拟的系统的替换。通常情况下,它甚至会超越它所模仿的系统。例如,游戏控制台模拟器通常会做一些改进,比如更好的硬件兼容性、更好的性能和更好的音频/视频质量。
另一方面,模拟由于是模型而受到限制。它们是模拟系统的最佳尝试,而不是系统的替代品。有硬件模拟器,因为硬件可以被模仿,而且很难区分。没有种植模拟器,因为没有仿真可以取代实际的种植。我们只能模拟一种耕作模式,以了解如何更好地耕作。
模拟器是一个比模拟器更广泛的东西,似乎这个术语的双重性在上面的帖子中被过度考虑了。
模拟器
人们决定在“计算机世界”中使用一个新词模拟,当他们开始以直接的方式替换现有系统的一些硬件部分时——模仿它们的行为,并依赖于计算性质,以确保不会破坏某些东西,并使所有东西都处于等效状态。所以我们模拟了这个部分!(整个系统仍然像以前一样工作)
模拟器通常在数字领域的狭义上用于替代和虚拟化——以数字形式作为一个软件——以前已知和存在的东西(虚拟芯片、电路板、电子设备)。因此,当世界变得更加数字化,并将模拟器这个词带给大众时,大众也为它增加了不确定性(或额外的原因)。
模拟器
首先,我看到许多关于模拟器可以代替真实的东西的评论,但是模拟器不能。
但是飞行模拟器是用来做真实的事情的——它训练飞行员,提高他们的技能和知识,它取代了昂贵的真实飞机,节省了很多钱。我们不能只是说一个飞机模拟器,因为我们有内心的感觉,这远远不止于此,所以我们叫它模拟器:)飞机模拟器可以包含模拟雷达或应答器,这是真的。
相反,模拟器用于分析和研究(模拟器用于真实的东西),但这种分析和研究并不比模拟GSM板更真实(在我们生活的信息时代更是如此)。分析为业务增加了价值,降低了成本或指出了不低于替换(模拟)硬件的利润。
模拟器类似于对我们由于某些原因(成本、技术、物理不可能性)而无法获得的东西进行建模。它通常是模拟一些新的、无形的、复杂的或者我们不太了解的东西,比如市场、天气、燃烧、用户。这就是飞行,黑洞,股票交易,模拟。
最后:
模拟器比模拟器更广泛 模拟器倾向于模拟/建模更多的全局过程/事物,并具有缩小模仿范围的能力(例如,带有代表一些已知模型的预置的电容器模拟器) 模拟器倾向于模仿具有特定规格、已知特征和属性的特定硬件设备(例如SNES模拟器、Intel 8087或Roland TB-303)
至于词源
它们都来自拉丁语,意思是:
“仿效”是“平等”(看起来更有侵略性和更直接-竞争) 模拟是“相似”(看起来更狡猾和狡猾-模仿)
这两个术语是完全不同的,只有很少的交集。找到正确的术语其实很简单,只需考虑以下几点:
模拟游戏不会做任何真实的事情。你可以研究它,例如计算机是如何工作的,但它通常没有其他结果。飞行模拟器中的飞机坠毁不会造成真正的伤害。天气预报模拟本身并不会改变天气。
仿真可以真实地做一些事情。你可以像使用物理计算机一样使用模拟计算机并使用它创建文档。在飞行模拟器中,飞机坠毁会有一个结果,就像人们经历真实的影响一样,包括可能的身体伤害。
您的困惑可能源于这样一个事实,即“研究模拟”和“访问模拟”通常是完全相同的事情。
你并不是唯一有困惑的人。电影《黑客帝国》讲的就是模拟。然而,《黑客帝国》正在进行模拟,因为它对《黑客帝国》的所有成员都有真实的影响。相比之下,训练室没有真正的影响,所以这是(黑客帝国)的模拟。
让我们来看一些例子。
模拟雨和模拟雨
在花园里拿根水管,让它下雨。这里模拟和仿真的区别是什么?
当你在模拟下雨时,人们还是会责怪你淋湿了。你的降雨对世界有一些真实的影响,但你的模拟没有,因为模拟没有欺骗任何人,因为它是真实的降雨。
相反,当你在模拟下雨时,人们会责怪天气。这就是,你模拟的雨真的表现得像现实中的雨。 这场雨般的竞赛因此扭曲了现实, 让人们相信错误的罪犯。
我花了好长时间才明白这一点。 因此,这既不容易也不明显,这就解释了所有的困惑。
记住,模拟可能会有副作用, 就像天气预报是基于模拟, 这需要相当大的计算能力和电能, 这对环境有影响。
因此,在“模拟降雨”的例子中,人们被淋湿只是一个副作用,而不是模拟的一部分。如果你用这个模拟的雨来模拟彩虹也是一样的。虽然“彩虹是如何工作的”属性是这个模拟的一部分,但模拟本身并没有提供彩虹,这只是由于太阳对水滴的折射而发生的。
模拟计算机与仿真计算机
虽然你可能认为“模拟计算机可以有一个结果”,但这实际上是错误的推理。如果将文件保存到模拟硬盘驱动器上,这些文件不能离开模拟驱动器。您可以通过研究模拟驱动器来获得这些文件,但这不是模拟本身的一部分。
如果硬盘保存的数据是这样的,即数据在模拟之外实际上是可用的,那么在模拟中就有一个模拟硬盘来这样做。
因此,模拟可以是模拟的一部分,反之亦然。
模拟与仿真文件系统
如果您模拟一个文件系统,出于实用性考虑,您可能会选择按原样将文件保存到您真正的文件系统上(可能带有一些额外的元信息)。在这种情况下,模拟似乎在模拟之外创造了真正的“价值”:可用的文件!
但这只是巧合,因为模拟的文件系统实际上也模拟文件系统。您实际上在模拟中模拟了外部文件系统!
模拟与仿真TPM或HSM
一个很好的例子就是,当你想到安全性的时候。TPM是用于保证自身密钥安全(身份来源)的特定设备,而HSM是用于保护外密钥(验证身份)的通用设备。
有趣的事实:我的手指经常输入TMP而不是TPM。
如果模拟TPM,这对安全性有很大的影响,因为这样您就可以观察到TPM的内部状态。这样所有的安全措施都失效了。即使这样的模拟可以为改进TPM本身的设计提供有价值的提示,您也不希望将有价值的数据真实地暴露给模拟的TPM。
但是,如果您模拟TPM,您将尽可能地将这些内部状态隐藏到外部。这样的模拟TPM可以用来真正地保护其他东西,比没有TPM更好。
使用真正的TPM,您无法模拟真正HSM的属性。所有您可以存档的是模拟HSM,但这将不具有真实HSM的安全属性,因此存储在这个模拟HSM中的所有数据将不受保护(它们将只在模拟本身中受到保护)。
相反,对于真正的HSM,您可以使用真正TPM的所有属性来模拟TPM。为此,HSM需要构造成这样,即没有信息需要离开HSM,而这些信息也不需要离开TPM。
(请注意,我对hsm或tpm一无所知,所以可能没有hsm能够提供模拟tpm。)
模拟世界与模拟世界
If our world is simulated, we are simulations, too. Hence some spectator (let's call her God) can look at us and change the simulation any time. Also we cannot find out if we are simulated or not. As I am pretty sure that I know that I am, I do not think I am simulated, because self-awareness looks like an effect with a real component to me, which contradicts simulation. This also means, our world cannot be a simulation, too, as a simulation can only affect me like the world does, if I am part of the simulation.
但我们的世界仍然可以被模拟(就像电影“黑客帝国”中那样),因为我所要“证明世界”的只是我的精神状态和感官输入,而我无法验证,因为我离不开我自己。如果我不是模拟的一部分,那么应该有机会观察到不连续性(就像在电影“黑客帝国”中那样),以防模拟不能完美地工作。
当我在模拟器中运行操作系统时,这种情况也会发生变化。然后我无法观察到这样的错误,因为我的状态可以从模拟(称为Sleep)中重置,而不会观察到中断。
然而,我更愿意认为这个世界是一个全息的幻觉,而不是一个类似模拟的东西。因为如果它是模拟的,那么我就会被某人(叫他Rick)为了某种目的而运行模拟,而幻觉纯粹是我自己的东西。
我就讲到这里,因为幻觉会把我们引向完全不同的东西。