为什么在虚拟机pipe理程序中部署虚拟机pipe理程序成为可能?

为什么虚拟机需要在物理硬件上的虚拟机pipe理程序可以部署在虚拟机中?

例如,XenServer(实际的pipe理程序)可以部署在ESX VM中?

为什么这是可能的(虽然不是一个好主意有很多原因,但仍然有效)。

另外,为什么人们说pipe理程序需要物理硬件(从架构的angular度来看,而不是明显的性能原因)。

谢谢

裸机pipe理程序 (例如ESX,Hyper-V)只是一个旨在控制和监视对硬件的访问的操作系统。 所以很自然地,虚拟机中的一个虚拟机pipe理程序将会控制和监视对它所访问的硬件的访问。 这是有效的,因为虚拟硬件看起来就像真正的硬件。

另一方面,半虚拟化 (例如Xen)不会将硬件架构传递给虚拟客户端,而是提供一个API来使用资源。 因此,传统的操作系统(和pipe理程序)将无法在半虚拟化系统上运行。

这取决于pipe理程序的types。 可以在其他虚拟机pipe理程序中部署虚拟机pipe理程序。 有很多问题,在64位下的硬件支持不好。 我必须强调的是,除了testing之外,您绝对不会这样做 – 即使如此,它也仅用于testing某些function(如VMware的vMotion或HA)。 它并不能说明软件在生产环境中的performance如何。

首先,您需要了解x86特权级别(环): http : //en.wikipedia.org/wiki/Ring_ ( computer_security)

通常情况下,操作系统(有权访问硬件)将在Ring 0中运行,其用户级程序(必须通过OS代理硬件交互)将在Ring 3中运行。当程序进行系统调用时,将消息传递给操作系统,要求它在Ring 0空间中运行一个特定的函数,并将结果返回给Ring 3程序。

当您在软件中完全实现虚拟化时(没有像英特尔VT-x或AMD-V这样的硬件协助),您实质上是在检查正在运行的虚拟机内的代码的特权级别。 在VMware中,这种技术被称为二进制翻译。 在环3中运行的任何代码都会继续在环3中运行,而不会被修改。 环0中运行的任何东西都在环1中运行,环0的硬件访问通过pipe理程序的虚拟硬件代理。 虚拟硬件只是一套软件,告诉主机操作系统在Ring 0空间中做些什么。

某些硬件不提供对二进制翻译的支持,因为它不支持实现二进制翻译所需的响铃级别。 值得注意的是,环1和2在大多数现代x86处理器的64位模式中不存在(一些AMD处理器支持它,但Intel不支持)。 因此,二进制翻译通常仅限于32位客户操作系统。

由于您在使用具有二进制翻译的pipe理程序时已经在使用Ring 1,因此无法在另一台pipe理程序中运行BTpipe理程序。 (好吧,假设有人可以编写一个使用Ring 2的pipe理程序,而这个pipe理程序本身就是虚拟化的,这是一个非常有利的情况,我认为没有人做到这一点)。

像Xen这样的半虚拟化pipe理程序在类似的前提下工作。 半虚拟化的虚拟机pipe理程序使用经过特殊修改的虚拟机内核,而不是在0环中运行,知道它们没有在物理硬件上运行,并被编码为使用特殊方法与虚拟机pipe理程序交谈。 由于准虚拟化完全可以在操作系统已经使用的环形级别内工作,因此我相信,只要虚拟化pipe理程序本身不需要任何直接硬件访问权限,就应该能够运行任意级别的半虚拟化虚拟化pipe理程序。 对于你能走多深有明显的实际限制,如前所述,性能不会很好。

另一方面,硬件扩展与二进制转换的工作方式相反 – 它们提供超级特权的pipe理程序级别,或者Ring -1(位于Ring 0之下的一级),它可以在所有的Ring 0代码中不加修改地运行。 当使用这些指令集时,Ring-1提供了一个虚拟机的Ring 0操作被虚拟机pipe理程序捕获和处理的环境,没有任何运行代码的分析。

即使您试图并行运行,您也不能同时使用硬件扩展来运行两个虚拟机pipe理程序。 例如,如果您已经使用VirtualBox运行使用硬件虚拟化支持的虚拟机,则无法在Windows 7中运行Windows XP Mode。

让我们留下的是,您可以使用硬件虚拟化在虚拟机pipe理程序中运行二进制翻译虚拟机pipe理程序,而不是相反。 另外,hypervisor-in-a-hypervisor通常只能运行32位guest虚拟机,但其性能影响往往不如其他海报所build议的那么重要。 (像数据库服务器这样需要大量内存访问的应用程序仍然会受到影响,因为他们必须通过两套虚拟页表。)大多数虚拟机pipe理程序会检测到它们在另一个虚拟机pipe理程序中运行,并拒绝运行。 一些虚拟机pipe理程序在testing能力上工作得很好; 例如,您可以在VMware Workstation下运行多个VMware ESXi实例(但只能在VMware Workstation下托pipe的任何ESXi虚拟机中使用BT模式)。

Xen不执行二进制翻译 – 它使用硬件辅助虚拟化或执行准虚拟化。 可以在另一个虚拟机pipe理程序下运行Xen半虚拟化,但不能以这种方式使用全硬件虚拟化运行Xen-ESX虚拟机。

希望这可以帮助。

您无法在任何虚拟机中运行Hyper-V。 它必须直接在硬件上运行。 您可以在某些虚拟化系统下安装Hyper-Vangular色,但不能运行虚拟机。 但是,您可能能够运行Hyper-Vpipe理器程序。

为什么虚拟机需要在物理硬件上的虚拟机pipe理程序可以部署在虚拟机中?

它不能 – 具有良好的性能。

另外,为什么人们说pipe理程序需要物理硬件(从架构的angular度来看,而不是明显的性能原因)。

为什么累了?

pipe理程序通常使用硬件虚拟化function。 这不是虚拟层中的客户端应用程序所支持的。 处理器基本上有一个用于pipe理程序的工作模式,一个用于正常的操作系统,而正常的操作系统不能切换回pipe理程序模式。

在没有硬件虚拟化的情况下,你不得不模拟这个东西,并且需要一个d-acutally – 在许多处理器指令(通过一个pogram),结果是比硬件水平慢很多。