虚拟化的类型有哪些

ilovetech 2009-08-07 01:24:34
实现虚拟化的方法不止一种。实际上,有几种方法都可以通过不同层次的抽象来实现相同的结果。本节将介绍 Linux 中常用的 3 种虚拟化方法,以及它们相应的优缺点。业界有时会使用不同的术语来描述相同的虚拟化方法。本文中使用的是最常用的术语,同时给出了其他术语以供参考。

硬件仿真

毫无疑问,最复杂的虚拟化实现技术就是硬件仿真。在这种方法中,可以在宿主系统上创建一个硬件 VM 来仿真所想要的硬件,如图 2 所示。

图 2. 硬件仿真使用 VM 来模拟所需要的硬件


正如您所能预见的一样,使用硬件仿真的主要问题是速度会非常慢。由于每条指令都必须在底层硬件上进行仿真,因此速度减慢 100 倍的情况也并不稀奇。若要实现高度保真的仿真,包括周期精度、所仿真的 CPU 管道以及缓存行为,实际速度差距甚至可能会达到 1000 倍之多。

硬件仿真也有自己的优点。例如,使用硬件仿真,您可以在一个 ARM 处理器主机上运行为 PowerPC® 设计的操作系统,而不需要任何修改。您甚至可以运行多个虚拟机,每个虚拟器仿真一个不同的处理器。

完全虚拟化

完全虚拟化(full virtualization),也称为原始虚拟化,是另外一种虚拟化方法。这种模型使用一个虚拟机,它在客户操作系统和原始硬件之间进行协调(参见图 3)。“协调”在这里是一个关键,因为 VMM 在客户操作系统和裸硬件之间提供协调。特定受保护的指令必须被捕获下来并在 hypervisor 中进行处理,因为这些底层硬件并不由操作系统所拥有,而是由操作系统通过 hypervisor 共享。

图 3. 完全虚拟化使用 hypervisor 来共享底层硬件


虽然完全虚拟化的速度比硬件仿真的速度要快,但是其性能要低于裸硬件,因为中间经过了 hypervisor 的协调过程。完全虚拟化的最大优点是操作系统无需任何修改就可以直接运行。惟一的限制是操作系统必须要支持底层硬件(例如 PowerPC)。

超虚拟化

超虚拟化(paravirtualization)是另外一种流行的虚拟化技术,它与完全虚拟化有一些类似。同样使用了一个 hypervisor 来实现对底层硬件的共享访问,还将与虚拟化有关的代码集成到了操作系统本身中(参见图 4)。这种方法不再需要重新编译或捕获特权指令,因为操作系统本身在虚拟化进程中会相互紧密协作。
  
图 4. 超虚拟化与客户操作系统共享进程


正如前面介绍的一样,超虚拟化技术需要为 hypervisor 修改客户操作系统,这是它的一个缺点。但是超虚拟化提供了与未经虚拟化的系统相接近的性能。与完全虚拟化类似,超虚拟化技术可以同时支持多个不同的操作系统。
CloudEx云主机将完全虚拟化与超虚拟化结合,服务器虚拟化将标准的 x86 服务器,包括其现有的处理器、内存、磁盘以及网络设备,转换到一个逻辑运算资源池中,操作系统及其应用程序被隔离到安全、可移动的虚拟机中。Xen 直接安装运行在服务器的硬件(裸机)之上,每台服务器都向虚拟基础架构提供资源。Xen 提供了一个稳固的虚拟化层,这个虚拟化层使得每台服务器上都可以运行多台安全、可移动的虚拟机,而这些虚拟机可同时在一台物理服务器上运行。基于这样的裸机架构,Xen 可以完全控制服务器资源,并将其分配给虚拟机。运行于 Xen 之上的虚拟机具有物理机的性能,并且有着企业级的可扩展性。
优化的Xen 提供细致入微的资源管理方式,利用这种资源管理方式,Xen 可以将物理服务器的资源在多台正在运行的虚拟机之间共享,从而最大限度地利用服务器资源,同时确保虚拟机的隔离。

操作系统级的虚拟化
我们要介绍的最后一种技术是操作系统级的虚拟化,它使用的技术与前面所介绍的有所不同。这种技术在操作系统本身之上实现服务器的虚拟化。这种方法支持单个操作系统,并可以将独立的服务器相互简单地隔离开来(参见图 5)。

图 5. 操作系统级虚拟化实现服务器的隔离


操作系统级的虚拟化要求对操作系统的内核进行一些修改,但是其优点是可以获得原始性能。


...全文
547 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

6,905

社区成员

发帖
与我相关
我的任务
社区描述
《新程序员》读者俱乐部
其他 其他
社区管理员
  • 《程序员》杂志社区
  • SoftwareTeacher
  • 《新程序员》编辑部
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧