“模拟器”和“虚拟机”之间的具体区别是啥? [复制]

Posted

技术标签:

【中文标题】“模拟器”和“虚拟机”之间的具体区别是啥? [复制]【英文标题】:What are the specific differences between an "emulator" and a "virtual machine"? [duplicate]“模拟器”和“虚拟机”之间的具体区别是什么? [复制] 【发布时间】:2011-09-08 05:57:14 【问题描述】:

我看到它们是不同的东西,但我真的不知道为什么。 有人说:“模拟器是用来玩游戏的,虚拟机是用来做操作系统的” 我不同意这个答案,因为除了视频游戏机(AMIGA(?))之外还有其他平台的模拟器

你能帮帮我吗?

【问题讨论】:

【参考方案1】:

虚拟机利用 CPU 自我虚拟化,无论它存在的程度如何,为真实硬件提供虚拟化接口。模拟器在不依赖 CPU 的情况下模拟硬件,能够直接运行代码并将一些操作重定向到控制虚拟容器的管理程序。

一个特定的 x86 示例可能会有所帮助:Bochs 是一个模拟器,即使它在兼容的物理处理器上运行,它也会在软件中模拟整个处理器; qemu 也是一个模拟器,虽然使用内核端的 kqemu 包,当模拟的机器与物理硬件匹配时,它获得了一些有限的虚拟化能力——但它不能真正利用完整的 x86 自虚拟化,所以它是一个有限的管理程序; kvm 是一个虚拟机管理程序。

可以说管理程序“模拟”受保护的访问;不过,它并不模拟处理器,更正确的说法是它调解受保护的访问。

受保护的访问意味着诸如设置页表或读/写 I/O 端口之类的事情。对于前者,管理程序验证(并且通常修改,以匹配管理程序自己的内存)页表操作并执行受保护的指令本身; I/O 操作映射到模拟设备硬件而不是模拟 CPU。

更复杂的是,Wine 也更像是一个虚拟机管理程序/虚拟机(尽管 ABI 级别更高)而不是一个模拟器(因此“Wine 不是模拟器”)。

【讨论】:

非常感谢!然后,主要区别在于虚拟机直接运行代码,但模拟器不(即使它模拟相同的处理器),不是吗? (对不起,我是新手。我必须选择最佳答案吗,比如 YA?) 基本上,是的。正如我所指出的,它是有一定程度的,但主要问题是您是模拟整个处理器还是让主机处理器完成大部分繁重的工作。 JumpIfNotEqual 的术语是正确的,这是虚拟化和仿真之间的区别。虚拟机和模拟器的区别是微妙的。【参考方案2】:

虚拟机的目的是创建一个隔离的环境。

模拟器的目的是准确地再现某些硬件的行为。

两者都旨在实现与主机硬件的某种程度的独立性,但虚拟机倾向于模拟足够的硬件以使客户机工作,并且这样做时强调仿真/虚拟化的效率。最终,虚拟机可能不像真正存在的任何硬件那样运行,并且可能需要特定于 VM 的驱动程序,但客户驱动程序集将在大量虚拟环境中保持一致。

另一方面,模拟器试图准确地再现一些被模拟的真实硬件的所有行为,包括怪癖和错误。所需的来宾驱动程序将与所模拟的环境完全匹配。

虚拟化、半虚拟化和仿真技术或某种组合可用于虚拟机的实现。模拟器通常不能使用虚拟化,因为这会使抽象有些泄漏。

【讨论】:

很好的解释。前两行直接回答了这个问题。 非常明确的答案。【参考方案3】:

戴尔准确解释了模拟器和虚拟机之间的区别。

来源 - https://www.delltechnologies.com/en-us/blog/emulation-or-virtualization-what-s-the-difference/

仿真或虚拟化:有什么区别?

仿真和虚拟化有许多相似之处,但它们 明显的操作差异。如果您想访问较旧的 新架构中的操作系统,仿真将是您的 首选路线。相反,虚拟化系统的行为独立于 底层硬件。我们将把这些经常混淆的东西分开 术语,并描述每个术语对业务 IT 运营的意义。

有什么区别?

简而言之,仿真涉及使一个系统模仿另一个系统。为了 例如,如果一个软件运行在系统 A 而不是系统 B 上, 我们让系统 B “模拟” 系统 A 的工作。然后软件 在系统 A 的仿真上运行。

在同一个示例中,虚拟化将涉及采用系统 A 和 将它分成两台服务器,B 和 C。这两个都是“虚拟的” 服务器是独立的软件容器,有自己的访问权限 到基于软件的资源——CPU、RAM、存储和网络——以及 可以独立重启。它们的行为与真正的硬件完全一样, 并且应用程序或另一台计算机将无法告诉 区别。

这些技术中的每一种都有自己的用途、好处和 缺点。

仿真

在我们的仿真示例中,软件填充硬件 - 创建一个 以类似硬件的方式运行的环境。这需要付出代价 通过为仿真过程分配周期来在处理器上 - 而是用于执行计算的周期。因此,一个 大部分 CPU 力量都用于创建这个环境。

有趣的是,您可以在模拟的环境中运行虚拟服务器 环境。所以,如果仿真如此浪费资源,为什么 考虑一下?

仿真可以有效地用于以下场景:

• 运行适用于其他硬件的操作系统(例如,Mac PC上的软件;计算机上基于控制台的游戏)

• 运行适用于其他操作系统的软件(运行 PC 上的 Mac 专用软件,反之亦然)

• 在类似硬件过时后运行旧版软件

在为多个系统设计软件时,仿真也很有用。 编码可以在单机上完成,应用程序可以 在多个操作系统的仿真中运行,所有操作系统都在运行 同时在他们自己的窗口中。

虚拟化

在我们的虚拟化示例中,我们可以肯定地说它利用 以高效、实用的方式计算资源——独立 他们的物理位置或布局。具有充足 RAM 的快速机器 并且足够的存储空间可以拆分成多台服务器,每台服务器都有一个 资源池。那台机器,通常部署为 单个服务器,然后可以托管公司的网络和电子邮件服务器。 现在可以使用以前未充分利用的计算资源 充分发挥潜力。这有助于大幅降低成本。

虽然模拟环境需要软件桥才能与之交互 硬件,虚拟化直接访问硬件。然而, 尽管总体上是更快的选择,但虚拟化仅限于 运行已经能够在底层上运行的软件 硬件。虚拟化最明显的好处包括:

•与现有 x86 CPU 架构的广泛兼容性

•能够在所有硬件和软件中显示为物理设备

•每个实例都是独立的

在仿真和虚拟化之间,您的业务可以发挥最大的作用 虚拟系统功能。虽然这两种服务听起来很相似,但这一切 围绕您如何使用该软件展开。如果你想要软件 为了让路,虚拟化允许来宾代码运行 直接在CPU上。相反,模拟器将运行来宾代码 自己,为其他任务节省 CPU。

【讨论】:

以上是关于“模拟器”和“虚拟机”之间的具体区别是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥win7 安卓模拟器之后 安装虚拟机 提示错误

黑苹果虚拟机是啥

“head”和“header”标签之间的真正区别是啥? [复制]

“constinit”和“constexpr”之间的真正区别是啥? [复制]

如何在vmware中启用主机和虚拟机之间的复制粘贴,虚拟机是ubuntu [关闭]

CentOS7的虚拟机 配置了静态IP之后 出现了两个IP是啥情况?