赞
踩
将一种形式的资源, 抽象为另一种形式。解除硬件与 OS 间紧耦合关系。充分利用资源。
实际两者描述的是一个概念,实现了虚拟化平台的基本功能的抽象层
VMM:Virtual Machine Monitor
VMM直接位于硬件之上,不经过操作系统,或者它本身就是这个操作系统。VMM作为中间层,直接管理硬件资源,并在其上运行多个虚拟机。
因为直接与硬件交互,一型虚拟化提供了较好的性能和资源利用率。
VMware Esxi、Huawei FusionCompute的CNA采用的是这种架构。
这种架构的优势在于
这种虚拟化方式,VMM是作为一个应用软件架设在OS之上,是基于OS完成安装的,类比于正常的软件,管理虚拟机的创建和运行。
VMware Workstation、VirtualBox、早期的VmwareEsxServer就是这种类型。
因为经过了一层OS的翻译,性能相较于一型较差,所以业务场景一般采用的都是一型虚拟化。
早期OS在设计时,设计了一个Ring0-Ring3的权限环机制。其中只用到了Ring0和Ring3。
Ring0被称为内核态,即对硬件的敏感操作均在此;Ring3被称为用户态,一般应用软件的正常操作均在此。
Ring1-2是驱动层
关于内核态和用户态,可以自行查阅《操作系统》方面知识
当程序运行在用户模式(Ring 3)时,如果需要执行一个需要更高权限的指令,比如直接访问硬件设备,它会触发一个陷阱(trap),操作系统会捕获这个陷阱并决定是否允许该操作。如果允许,操作系统会将CPU切换到更高的特权级别(如Ring 0或1)来执行该指令。
但在虚拟化环境中,
在传统的x86架构中,存在一些指令被认为是**“敏感”**的,因为它们能够影响系统的安全和稳定性。这些指令包括但不限于:
这是VMware提出的解决方案: BT, Binary Translation 二进制翻译技术, 即将特权指令通过VMM翻译之后传出, 最后再把结果传回给虚拟机。
通过这样的方式, 就成功的欺骗了虚拟机, 让它以为自己在 0 环,即虚拟机不知道自己是虚拟机。
全虚拟化技术不需要修改客户操作系统,因此具有很好的兼容性和可移植性。
但这个方式有个问题,所有的指令都需要VMM进行翻译,性能折扣太高了。
半虚拟化指的是虚拟机知道自己是虚拟机。
半虚拟化技术是将完全虚拟化技术做为底层支撑,通过修改虚拟机操作系统内核的方式,增加专用 API 接口,将处理敏感指令的方式进行修改,由VMM或其他的方式进行执行。
半虚拟实际运行时,要实现定制化的功能,首先要了解 API 的特性,并围绕 API 定制对应的功能,才能在已改变内核的操作系统中实现。
极具代表性的是Xen。它通过Domain0进行敏感指令的操作,如下图:虚拟机需要操作逻辑卷,通过发送请求到Domain0,由Domain0与硬件交互,再返回信息到虚拟机。
由于半虚拟化对于内核需要进行修改,这只能针对于开源的操作系统。因此Windows是不能在半虚拟化主机上进行虚拟化的。
以上两种都是在当初CPU不支持虚拟化时的解决方案,而如今的CPU大部分已经支持虚拟化,如Intel的VT-x或AMD的AMD-V。
CPU提供专门的硬件支持来帮助VMM更高效地管理虚拟化环境。这些技术允许VMM运行在一个新的模式(如VMX root mode),而虚拟机操作系统运行在VMX non-root mode,这样就能够更直接地执行特权指令,同时保持系统的安全性和隔离性,减少了对软件模拟的依赖,从而提高了性能。这些技术在硬件层面提供对虚拟化的支持,允许Hypervisor更高效地管理虚拟机。
硬件辅助虚拟化结合了全虚拟化的兼容性和半虚拟化的性能优势,因为它允许未修改的操作系统运行,同时减少了虚拟化的软件开销。硬件辅助虚拟化大幅度提高了虚拟机的性能,特别是在处理大量的输入/输出操作时。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。