虽然我大致了解模拟和仿真的含义,但我几乎总是混淆它们。如果我创建一个模拟现有硬件/软件的软件,应该称其为模拟器还是仿真器?
有人能说明编程方面的区别吗?
奖励问题:这两个术语在英语中的区别是什么? (抱歉,我的母语不是英语 :))
虽然我大致了解模拟和仿真的含义,但我几乎总是混淆它们。如果我创建一个模拟现有硬件/软件的软件,应该称其为模拟器还是仿真器?
有人能说明编程方面的区别吗?
奖励问题:这两个术语在英语中的区别是什么? (抱歉,我的母语不是英语 :))
模拟器: 它类似于解释器。也就是说,它会逐行执行真实代码以模拟其行为。
仿真器: 它类似于可执行文件。也就是说,它会接收已编译的代码并执行它。
模拟器是真实系统的替代品,但模拟器用于优化、理解和估计真实系统。
模拟和仿真可以相互包含。
如果您模拟文件系统,为了实用性,您可能会选择将文件保存到真实文件系统上(可能带有一些附加的元信息)。在这种情况下,仿真似乎创建了真正的“价值” - 可用的文件!
但是这仅仅是巧合,因为您的模拟文件系统实际上也仿真了一个文件系统。您实际上在仿真中仿真了外部文件系统!
安全性是区别的典型例子。TPM是一个特定的设备,用于保护它自己的密钥(身份来源),而HSM是一个通用的设备,用于保护外部密钥(验证身份)。
趣闻:我的手指经常打错TMP而不是TPM。
如果您模拟TPM,则会对安全性产生巨大影响,因为您可以观察TPM的内部状态。这会使所有的安全性都失效。即使这样的仿真可以为改进TPM本身的设计提供有价值的提示,您也不会希望将宝贵的数据真正暴露给仿真TPM。
但是,如果您仿真TPM,则会尽可能隐藏这些内部状态。这样的仿真TPM可以用于比没有仿真TPM更好地保护其他内容。
使用真实的TPM无法仿真真实HSM的属性。您只能模拟HSM,但这将不具备真实HSM的安全性质,因此存储在模拟HSM中的所有数据都不受保护(仅在仿真中受保护)。
相反,使用真正的HSM可以仿真一个真正TPM的所有属性。为此,HSM需要构造得不需要离开TPM的信息。
(请注意,我不知道特定的HSM或TPM信息,因此可能不存在能够提供仿真TPM的HSM。)
如果我们的世界是模拟的,那么我们也是模拟产生的。因此一些观察者(我们称之为上帝)可以随时查看我们并更改模拟。同样,我们无法确定自己是否被模拟。由于我很确定我知道我是谁,所以我不认为自己是被模拟的,因为自我意识对我来说似乎具有真实的组成部分,这与模拟相矛盾。这也意味着我们的世界也不能是模拟的,因为如果我是模型的一部分,那么模拟只能影响到我,就像世界一样。
但我们的世界仍然可以被仿真(就像电影“黑客帝国”中一样),因为我证明这个世界的唯一方法是我的思想状态和感官输入,而我无法验证它们,因为我无法离开自己。如果我不是仿真的一部分,那么应该有机会观察到不连续性(就像电影“黑客帝国”中一样),以防仿真不完美。两者都是一种对象的模型,你可以通过某些方式控制输入并观察输出。
关键区别在于:
让我举个例子——假设你想进行一些系统测试,以查看向系统添加新传感器(如温度计)会如何影响系统。你知道温度计每秒发送8次包含其测量值的消息。
仿真——如果你还没有温度计,但你想测试这个消息速率不会超载你的系统,你可以通过连接一个每秒发送随机数的单元来模拟传感器。你可以运行任何不依赖于传感器实际发送值的测试。
仿真器——假设你有一个非常昂贵的温度计,精确到0.001摄氏度,并且你想要看看是否可以使用一个只精确到最近0.5摄氏度的更便宜的温度计。你可以使用昂贵的温度计来模拟更便宜的温度计,然后将读数四舍五入到最近的0.5摄氏度,并运行依赖于温度值的测试。
请注意,仿真也可以用于预测或预测行为。有限元分析仿真在许多应用中都被使用,包括天气预报和虚拟风洞。
这些术语的定义: