simulation与emulation的区别

simulation与emulation的区别

在计算机体系结构的领域里,emulation,是通过一个平台去复现另一个平台的功能,像QEMU这种仿真器,KVM,Xen等虚拟化技术都可以称之为仿真器,它仅仅复现功能,simulation,模拟器不仅要将功能复现,还要把时间这种性能信息也完成复现,像simplescalar。

解释一:

模拟(Simulation)即选取一个物理的或抽象的系统的某些行为特征,用另一系统来表示它们的过程。模拟技术的高级阶段称为仿真模拟(Emulation)、系统仿真,即用一数据处理系统来全部或部分地模拟某一数据处理系统,以致于模仿的系统能想被模仿的系统一样接受同样的数据、执行同样的程序、获得同样的结果。

解释二:

仿真(Emulation)是试图模仿一个设备的内部设计;模拟(Simulation)是试图模仿一个设备的功能。

解释三:

Emulation:When one system performs in exactly the same way as another, though perhaps not at the same speed. A typical example would be emulation of one computer by ( a program running on) another. You migh use emulation as a replacement for a system whereas you would use a simulation if you just wanted to analyse it and make predictions about it.
Simulation: Attempting to predict aspects of the behaviour of some system by creating an approximate (mathematical) model of it. This can be done by physical modelling, by writing a special-purpose computer program or using a more general simulation package, probably still aimed at a particular kind of simulation (e.g. structural engineering, fluid flow). Typical examples are aricraft flight simulators or electronic circuit simulators. A great many simulation languages exist, e.g. {Simula}

解释四:

Simulation,是指用软件去模拟某个系统的功能,并不要求实现该系统的内部细节,只要在同样的输入下,软件的输出和所模拟系统的输出一致就可以了。比如你在PC机上用一个软件去simulate红白机的游戏“超级玛莉”,你只要让你的软件运行出来的效果和红白机上“超级玛莉”游戏一样就可以,至于这个软件你是怎么实现则无关紧要。
Emulation,是指用软件去模拟出某个系统中各个部件的组成,真实地模拟出系统的运行机制。这就要求软件的作者需要非常了解所模拟系统的内部结构,能够利用各种数据结构实现出各个部件的模型。同样去emulate红白机的游戏“超级玛莉”,首先就要用软件模拟出红白机中的各种硬件,如CPU、内存、图形处理芯片、声音处理芯片以及游戏手柄等,再通过将加载游戏的ROM来运行该游戏。现在各种游戏模拟器,如MAME、VirtualNes都是采用emulation的手段去实现游戏的模拟,所以它们又叫做emulator。
模拟就是指用在某个平台上用纯软件的方法去模拟另一个平台上程序的运行,模拟包含“Simulation”和“Emulation”,通过上面对这两者的分析大家可以知道,“Simulation”是一种高层次上的模拟,类似于“黑盒”,而“Emulation”更注重于对底层的模拟,类似于“白盒”。
仿真的解释就比较多了,有的说仿真是指用机器底层的微指令来解释执行另一个平台的指令,有的说仿真是软件结合硬件来模拟另一种平台程序的运行,即“硬件仿真+软件模拟”。其实这两者是针对不同仿真对象和宿主平台而言的:前者具体的是讲系统仿真,是以大型机CPU(现在也可以指PC机)为仿真对象的,通常在研制CPU的过程中,用宿主机的CPU去仿真其软件的运行,这样可以使硬件和软件的研发过程同步,加快整体系统的研发进度;后者一般指嵌入式仿真,做过嵌入式开发的朋友都知道,开发过程中经常要用仿真器去调试程序,我们可以在PC机上调试嵌入式系统中的某个程序,通过仿真器向嵌入式微控制器发送调试信号(如JTAG),使微控制器执行某条指令,而PC机上会相应地显示出该条指令执行的结果,看上去似乎是PC在“执行”这条指令一样,这样来达到仿真的目的。但不管怎样,仿真总是与硬件相关的,这一点与模拟是有区别的。
现在还出现了“虚拟机”一词,在我看来,虚拟机更多地采用了模拟技术,而不是仿真,但是虚拟机相对于一个模拟器而言要复杂很多,像Bochs这样的虚拟机实质上应该是一个emulator,而像VirtualPC、VMWare和VirtualBox这样的虚拟机,则采用了更为复杂的技术,既有simulation,也有emulation,甚至还有系统仿真,所以不能单纯地将它认为是一个模拟器。

上文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xybsoft/archive/2008/12/23/3591566.aspx

解释五

simulation是模拟出原系统的一个抽象模型,而不需要真的去做真实系统要做的事情。因此它其实不具备真实系统的功能,只是当某一功能执行时,通常不必输出功能执行的结果,只是在simulator中记录下由此引发的状态变化。因此它通常用于设计初期的模型验证。
emulation则更进一步,要真正地去做所有真实系统能做的事情,只不过做的“过程”不同,它一般用于处理兼容性问题和在资源有限的条件下完成系统原型的实现。

如果把真实系统比作一个人的话,simulator就是这个人的一幅肖像画,而emulator则是这个人的一个克隆人

举个例子,我们要实现一个p2p文件分发系统。
最开始的时候我们可以实现一个simulator:它用一个函数来模拟节点间的通信,这个函数的输入是网络性能(带宽,跳数…),输出是通信时延————注意,并没有真正的数据在传输和拷贝,甚至都没有真正的节点,我们只是模拟了通信时延这个“特征(feature)”。
接下来,我们把这个分发系统实现了,编译成一个exe文件,但这时我们发现我们没有足够多的计算机来组成一个真实的、具有足够规模的网络来进一步测试(通常p2p网络的节点数成百上千),这时,我们可以写一个emulator:它可以区分同一个计算机上的不同进程,因此我们可以在一台计算机上开100个进程,这样可以用100台计算机模拟出10000台计算机的网络————注意,此时数据真的是通过Socket在传输,只不过有的数据走的是loopback口,并没有真的进网卡。

解释六

simulation是用软件实现,emulation要涉及到硬件实现的部分。这个区分很简单明了,在很多情况下也是适用的(包括上面举的p2p分发系统的例子)。但是这种说法只是对于大多数情况的一种归纳性解释,因此在某些情况下就无法区分二者了。比如,这种解释无法区分Operating System Emulator和Operating System Simulator————这个时候二者都不涉及硬件,这是因为真实系统(Operating System)本身就不涉及硬件。

再说说“模拟”与“仿真”。首先,即使在正式场合下(如论文标题),{模拟,仿真}和{simulation,emulation}这两个集合并不是一一映射的。你可以看到"模拟-simulation"的组合,也可以看到"仿真-simulation"的组合。显然,这个不一致现象是由于同时存在两种一一映射造成的。这个问题不是说理能解决的,还得随着使用次数越来越大,看大多数人的习惯。个人感觉,simulation翻译成“模拟”,而emulation翻译成“仿真”的情况多一些。

最后,提一下“虚拟”这个概念。这个概念最近火的不行,英文名叫virtualization。我还没有仔细调查它和前两个概念的细微差别,但是可以肯定的是,virtualization和emulation比较相似,和simulation不是一回事。其他的,以后查到再补进来吧。

解释七

维基百科上对仿真器(emulator)和模拟器(simulator)的解释如下:
仿真器(Emulator),又称仿真程序,在软件工程中指可以使计算机或者其他多媒体平台(掌上电脑,手机)能够运行其他平台上的程序,常被错误的称为模拟器。仿真器多用于电视游戏和街机,也有一些用于掌上电脑。仿真器一般需要ROM才能执行,ROM的最初来源是一些原平台的ROM芯片,通过一些手段将原程序拷贝下来(这个过程一般称之为“dump”)然后利用仿真器加载这些ROM来实现仿真过程。 (http://zh.wikipedia.org/wiki/%E6%A8%A1%E6%8B%9F%E5%99%A8)
模拟器(simulator),又称模拟程序,在计算机科学技术的软件工程中,是指完全基于主机程序并模拟了目标处理器的功能和指令系统的程序。而仿真器(emulator)具有更强大的硬件模仿功能。 (http://zh.wikipedia.org/w/index.php?title=%E4%BB%BF%E7%9C%9F%E5%99%A8&variant=zh-cn)
直观解释这两者的区别,可以比较Palm Os的仿真器(emulator) 和模拟器(simulator) 。
Palm Os的仿真器(emulator)
Palm Os仿真器(emulator) 显得更真实一些,在使用中,需要载入实际Palm上的ROM文件,而且,从外观,界面到操作上,也逼真地再现实际Palm。可以说,仿真器(emulator) 就是一个用软件实现的Palm PDA.
Palm Os的模拟器(simulator)的使用相对比较简单一些,也可以测试和实现Palm上的绝大多数功能。

解释八

Simulator纯粹以软件来模拟源平台的功能和运行结果;Emulator以软件和硬件来模拟源平台的内部设计、行为和运行结果。
举例来说:

  1. 有使用硬件来模拟的,都是Emulator。比如基于单片机的模拟。(什么是叫使用硬件模拟?比如模拟源平台的Timer/PPU/SPU, 直接使用目标平台的Timer/PPU/SPU,那么就是硬件模拟)。
  2. 一般的,在PC上运行的模拟器都叫Simulator,常见的是模拟LCD的显示画面; 在嵌入平台上运行的模拟器都是Emulator,因为在嵌入平台运行的话,为了提高效率,都会以对应的硬件模块来模拟源平台。
  3. PC上的模拟器如果模拟其内部设计、行为,比如读取ROM文件,精确中断、异常,OS等都是Emulator。

解释九

Simulator 都是软件,Emulator有硬有软也可以软硬结合
比如pc上常说的GBA、PS游戏模拟器,严格意义上讲,应该是仿真器才对!它从二进制rom文件中取出一行行电视游戏机CPU的机器码,识别后再仿真该游戏机cpu的行为。即在PC上仿真执行其他CPU的机器码,称之为binary level仿真,因为它是直接执行机器码。

下次你再见到什么“wm模拟器”、“iphone模拟器”,一定要对它有深入理解,知道它是否真的仿真到机器码的级别才能给出它真正的名字。因为我对他们不了解,所以我也不敢妄下结论。

总的来说,接触仿真器(emulator)的机会更多一些,我一时居然想不到有什么著名的开发用的真正的模拟器(simulator)
另外就是硬件仿真器,MDK的debug选项下有两个选择

左上的use simulator,指使用软件仿真。
右上的ULINK 指使用实时仿真器,即硬件仿真器。ADS下使用另外一种实时仿真器叫ICE(In Circuit Emulator,ICE)。

经常看见这两个词,很容易混淆,按我的理解如下:
Simulator是模拟目标系统的功能和行为。Simulator和目标系统看上去是一样的。
Emulator是模拟目标系统的底层接口。目标系统直接运行于Emulator之上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值