虚拟化到底有多虚拟?

虚拟化到底有多虚拟?

在阅读不同主题的不同材料时,我时不时会回到这个问题:虚拟化到底有多虚拟?我所说的“虚拟化”是指 Virtual PC 和 VMWare 之类的东西,它们允许您运行客户操作系统。特别是,我不明白的是:

  • 虚拟机是否提供与物理机基本无异的环境?当然,会存在一些实际差异(如虚拟机管理程序调用逃生舱、虚拟硬件组件名称等),允许检测虚拟机,但是否存在不兼容性?
  • 如果环境与物理机完全兼容,那么嵌套虚拟机是否可以?
  • 如果不是,是否意味着客户操作系统必须经过专门调整才能在虚拟机内运行?如果是这样,是否意味着当今大多数操作系统已经针对大多数 VM 供应商进行了调整?
  • 基于软件的虚拟化和基于硬件的虚拟化有何不同?
  • 基于软件的虚拟化和基于硬件的虚拟化到底有什么区别?

答案1

据我所知:

  • 有研究表明“无法检测的 rootkit”,其中恶意的虚拟机管理程序位于您的计算机和硬件之间安全公司(和 CPU 供应商)对有人发明了这样的东西并声称没有人能够检测到它感到愤怒,所以他们实际上想出了一种使用计时函数并将结果与​​外部源进行比较的方法。因此虚拟化是几乎无法察觉,但如果你非常关注小细节,并且有外部参考,找出您正在进行虚拟化的方法。不过,这不会造成任何不兼容。
  • 不是。虚拟 CPU 不具备物理 CPU 所具有的功能。例如,英特尔虚拟化指令仅适用于主机操作系统。但这并不意味着您不能在虚拟机内拥有虚拟机:它只是意味着它会非常慢。
  • 操作系统不必为虚拟机而调整。相反,情况恰恰相反。
  • 是的,在某种程度上确实如此。软件虚拟化始终有效。硬件虚拟化通常不是可传递的(客户操作系统不能使用硬件虚拟化来托管更多客户操作系统)。
  • 肯定还有更多的事情,但我认为这是一个好的开始。

答案2

让我逐一回答一下:

1 虚拟机是否提供与物理机基本无区别的环境?当然,会存在一些实际差异(如虚拟机管理程序调用逃生舱、虚拟硬件组件名称等),允许检测虚拟机,但是否存在不兼容性?

如果忽略“虚拟机管理程序调用逃生舱、虚拟硬件组件名称”,所有其他不同之处都被视为错误。......除此之外,请参见下文。

2 如果环境与物理机完全兼容,那么嵌套虚拟机是否可以?

这取决于具体情况。如果你使用硬件虚拟化,你就不能在虚拟机管理程序下运行虚拟机管理程序。(理论上,你也可以模拟它,但没人愿意做这些麻烦的工作)

3 如果不是,是否意味着客户操作系统必须经过专门调整才能在虚拟机内运行?如果是这样,那么是否意味着当今大多数操作系统已经针对大多数 VM 供应商进行了调整?

你搞反了。我们在虚拟机之前就有了操作系统。虚拟机适应操作系统,而不是相反。 (也有一些例外,例如旧版本的Xen。但这是例外)

4 基于软件的虚拟化和基于硬件的虚拟化有何不同?

见2。

5 基于软件的虚拟化和基于硬件的虚拟化到底有什么区别?

见4。

答案3

虚拟机试图提供足够好的环境来运行客户操作系统和应用程序。提供与物理环境无法区分的环境几乎是不可能的,因为存在很难隐藏的时序效应(至少在高效运行的虚拟机中)

嵌套虚拟机可以通过纯粹模拟的虚拟机(例如 Bochs)来实现,但是 Virtual PC 和 VMware 使用了一些并非为嵌套而设计的硬件支持。

基于软件的虚拟化模拟每个 CPU 指令(有时基于软件的解决方案使用 Ring-1 来本地运行 Ring-0 代码作为优化,并且此技巧不能嵌套)。

基于硬件的虚拟化在处理器中使用一种特殊模式,旨在将控制权传递给虚拟机管理程序并设置额外级别的页表。

答案4

据我所知,虚拟化软件无缝模拟了 HAL(硬件抽象层),因此客户操作系统不知道其中的差别。即:使用普通操作系统。

相关内容