虚拟化 - 概念和虚拟化软件
1. 虚拟化及分类
虚拟化是指计算机元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
http://m.ctocio.com.cn/virtualization/392/12425892_m.shtml
顾名思义,虚拟化就是在计算上虚拟出一些实际计算机里真实存在的东西,以达到更方便、简单、成本低、安全性高的目的。比如,虚拟计算机硬件,可以安装操作系统;以现有操作系统为蓝本,再虚拟出几个一摸一样的;虚拟一个操作系统环境,可以安装应用软件。这个解释,是本人很通俗的说法,严格精准的定义,至今还未看到。
虚拟化技术,经过数年的发展,已经成为一个庞大的技术家族,其技术形式种类繁多,实现的应用也一大箩筐了。但对其分类,网上的介绍比较含糊,分类属性不一。如将服务器虚拟化、硬件虚拟化、cpu虚拟化相提并论,但其实它们都属一个类别,只是按不同属性分类得出的不同名称。
1.1 以实现层次来分:硬件虚拟化,操作系统虚拟化,应用程序虚拟化。
言归正传,现在按照不同属性,对虚拟化做一个分类:
- 以被应用的领域来划分:服务器虚拟化、存储虚拟化、网络虚拟化、桌面虚拟化。
- 还有从以某类里衍生出来的,无法归类,比如cpu虚拟化,文件虚拟化。
这些不用属性的类别之间的关系又是交错联系的,下面逐一简单介绍一下。
1.1.1 硬件虚拟化
硬件虚拟化,就是用软件来虚拟一台标准电脑的硬件配置,如cpu、内存、硬盘、声显卡、光驱等,成为一台虚拟的裸机,然后就可以在上面安装操作系统了,其代表产品VMware。
使用时,先在操作系统里安装一个硬件虚拟化软件,用其虚拟出一台电脑,再安装系统,做到系统里运行系统,并可虚拟出多台电脑,安装多个相同或不同的系统。
其代表产品为VMware,其余几个知名的有:微软的Virtual PC,开源免费的VirtualBox。
为虚拟机分配的硬件资源要占用实际硬件的资源,对性能损耗也较大。因为是在系统里安装虚拟化软件,再在虚拟的电脑上装系统,所以就有原系统和虚拟化软件两层消耗,为了提高性能,出现了另外一种硬件虚拟化形式:直接在裸机上安装虚拟化软件,然后安装多个系统,并同时运行。跳过原系统这一环节,性能大大提高。这种虚拟化又叫做准虚拟化。VMware推出的相关产品叫VMware ESXi,微软的该类产品为Hyper-V,主要应用于服务器领域。
1.1.2 操作系统虚拟化(OS-level virtualization)
操作系统虚拟化就是以一个系统为母体,克隆出多个系统。它比硬件虚拟化要灵活方便,因为只需在系统里装一个虚拟化软件,就能以原系统为样本,很快克隆出系统,克隆出的系统与原系统除去一些ID标识外,其余都一样。
看似与硬件虚拟化一样,都是虚拟多个操作系统出来,但与硬件虚拟化还是很多不同之处:
1. 操作系统虚拟化是以原系统为样本,虚拟出一个近乎一摸一样的系统;硬件虚拟化是虚拟硬件环境,然后真实的安装系统。它们虚拟的东西不一样。
2. 操作系统虚拟化,虚拟的系统都只能为同样的系统;硬件虚拟化,虚拟的系统可以为不同的系统,如linnux、mac、windows家族。
3. 操作系统虚拟化,虚拟的多个系统有较强的联系,体现在:第一,可以多个虚拟系统同时进行配置,更改了原系统,就改了所有;第二,如果原系统损坏,会殃及所有虚拟系统。硬件虚拟化虚拟的多个系统,是相互独立,与原系统也无联系。原系统的损坏不会殃及虚拟的系统。
4. 操作系统虚拟化的性能损耗低,它们都是虚拟的系统,而非硬件虚拟化那样真实安装的实体;没有硬件虚拟化的虚拟硬件层,也大大降低了性能损耗。
这种方式由FreeBSD jails首创;类似的例子包括Solaris Containers, OpenVZ, Linux-VServer, AIX Workload Partitions, Parallels Virtuozzo Containers, 以及 iCore Virtual Accounts。
1.1.3 应用虚拟化
前两种虚拟化技术,大多应用于企业、服务器和一些IT专业工作领域。随着虚拟化技术的发展,逐渐从企业往个人、专业往大众应用的趋势发展,便出现了应用程序虚拟化技术,简称应用虚拟化。它近年虚拟化的新贵和热门领域。
前两种虚拟化的目的是虚拟完整的真实的操作系统,应用虚拟化的目的也是虚拟操作系统,但只是为保证应用程序的正常运行虚拟系统的某些关键部分,如注册表、C盘环境等,所以较为轻量、小巧。
1.2 根据虚拟化程度分为:软件全虚拟化、软件半虚拟化和硬件辅助虚拟化
纯软件的“全虚拟化”方式不需要修改客户机操作系统,但是其性能较未虚拟化时影响比较大。支持完全虚拟化的虚拟机软件包括VMware Workstation和Virtual PC等。
半虚拟化模式,这种模式需要对客户机操作系统进行更改,使得客户机操作系统知道其运行在虚拟化环境下,从而可以获得更高的性能。半虚拟化的典型产品包括Xen、UML等。
看虚拟化技术是完全虚拟化还是半虚拟化,首先看虚拟化技术有没有修改内核,xen虚拟化技术需要修改内核,因此它有完全虚拟化和半虚拟化之分,kvm没有修改内核,因此,它只有完全虚拟化;还要看cpu是否支持硬件虚拟化,支持硬件虚拟化,就是完全虚拟化,不支持,就是半虚拟化。xen有两种选择,而kvm只有一种选择,所以,xen有完全虚拟化和半虚拟化之分,kvm只有完全虚拟化。
硬件辅助虚拟化技术,在处理器中加入了新的特权级来运行虚拟机监控层,使得客户机操作系统可以运行在原始特权级,不需要更改,并且由硬件来完成两个特权级之间的转换。硬件辅助虚拟技术提高了虚拟机的兼容性和性能。支持硬件辅助虚拟化的有 Linux KVM和Xen等。
1.3 按照虚拟层次分为:分为程序级虚拟化和系统级虚拟化
前者通常是在应用层上创建虚拟机,这种虚拟机通常是为了运行应用程序而创建,并且随着应用程序的退出而结束。应用级虚拟机的一个典型例子就是Java虚拟机(JVM)。
系统级虚拟化包括一个Hypervisor或者VMM(Virtual Machine Monitor)。Hypervisor是位于硬件资源和操作系统之间的软件层。它使得多个单独的虚拟机实例可以同时运行,并使得多个虚拟机可以共享各种物理硬件资源。Hypervisor协调这些硬件资源(CPU、内存和各种I/O设备)的访问,为虚拟机分配各种需要使用的资源。
对于系统级虚拟化,根据虚拟机监视器 Hypervisor或VMM的实现层次,主要可以分为基于宿主操作系统的系统级虚拟化和基于硬件的系统级虚拟化。
基于宿主操作系统的虚拟机作为应用程序运行在宿主操作系统(Host OS)之上,其架构如图1 所示。因此Guest VM需要由Guest Os内核先经过Hypervisor,再经过宿主操作系统才能访问硬件。支持基于宿主操作系统虚拟化的产品有 Virtual PC、VMWare Workstation和VirtualBox等。
另外一种虚拟化是基于硬件的系统级虚拟化。在这种模式下,如图2虚拟机监控层Hypervisor或VMM直接运行在裸机硬件之上。它具有最高的特权,可以直接管理和调用底层的硬件资源。虚拟机监控层向Guest VM提供虚拟的硬件资源,而Guest Vm对硬件资源的访问都需要通过这一层。支持基于硬件的系统级虚拟化产品包括VMware ESX/ESXi和Xen等。
1.5 其它虚拟化
-
虚拟内存,将不相邻的内存区,甚至硬盘空间虚拟成统一连续的内存地址
-
存储虚拟化,将实体存储空间(如硬盘)分隔成不同的逻辑存储空间
-
网络虚拟化,将不同网络的硬件和软件资源结合成一个虚拟的整体
-
虚拟专用网络(VPN),在大型网络(通常是Internet)中的不同计算机(节点)通过加密连接而组成的虚拟网络,具有类似局域网的功能
-
存储器虚拟化,将网络系统中的随机存储器聚合起来,形成统一的虚拟内存池
-
桌面虚拟化,在本地计算机显示和操作远程计算机桌面,在远程计算机执行程序和储存信息
-
数据库虚拟化
-
软件虚拟化
-
服务虚拟化
2. Hypervisor:用来创建和运行虚拟机的软件,固件或硬件
http://www.cnblogs.com/beanmoon/archive/2012/12/18/2822050.html
Hypervisor 是用来创建和运行虚拟机的软件,固件或硬件。运行Hypervisor的电脑叫做主机(host machine),hypervisor之上运行的操作系统叫做客户机(guest machine)。hypervisor 把主机的硬件资源虚拟化,从而为客户机提供了运行其操作系统的平台。按hypervisor运行的层次不同,可以把它可以分为两类,如下所示:
1)type1 hypervisor(也叫bare metal hypervisor)直接运行在硬件层面上,常见的type1 hypervisor有vmware的Esxi(集成在vmware vsphere中的)和开源软件Xen,两者都是免费的。我们可以把它们刻录到光盘中然后从光盘启动就可以直接安装到硬件层面上了。由于type1 hypervisor提供的界面是非常简单的使得对其的管理还需借助另一种管理软件——hypervisor management software(这个是要收费的)。Vmware把hypervisor和hypervisor management software集成到一起了,也即是vsphere。
2)type2 hypervisor相信大家就比较熟悉了,像我们平常使用的vmware workstation或者vitual box都属于此类,我们在自己的windows机上安装上vmware workstation或者vitual box,然后创建新的操作系统,接着就同时运行几个虚拟的操作系统了(前提是你的内存足够大以容纳这些操作系统)。
type1 hypervisor和type2 hypervisor的工作机制是差不多的(vsphere的管理界面甚至和vmware workstation类似),只是前者直接工作在硬件层面,效率较高,两者还有一个区别是前者的虚拟客户机所需要的内存是按需分配的(例如你分配了1G内存给虚拟客户机,如果现在该客户机只需512M就可以了,那么type1 hypervisor就只给它分配512M内存),这样你所有正在运行的虚拟机的所分配内存之和可以比实际的物理内存大(后者就不行);而type2 hypervisor是你给虚拟客户机分配多少内存,你的虚拟客户机就在内存中占用多少内存空间,此外在type2 hypervisor中还要考虑主机的操作系统的内存使用。
2. 几种Hypervisor介绍
http://www.cnblogs.com/skyme/archive/2013/06/05/3114265.html
2.1 RedHat KVM
- 虚拟化方式:完全虚拟化
- 架构:寄居架构(linux内核); 祼金属架构RHEV-H
- 特点:祼金属架构RHEV-H或在关键的硬盘和网卡上支持半虚拟化VirtIO,达到最佳性能。
- I/O协议栈:KVM重用了整个Linux I/O协议栈,所以KVM的用户就自然就获得了最新的驱动和I/O协议栈的改进。
架构图:
2.2 VmWare ESX
- 虚拟化方式:完全虚拟化
- 架构:裸金属架构
- I/O协议栈:VMware 选择性能,但是把I/O协议栈放到了hypervisor里面。不幸的是,VMware kernel是专有的,那就意味着VMware不得不开发和维护整个协议栈,会导致开发速度会减慢,你的硬件可能要等一段时间才会得到VMware的支持。
架构图:
2.3 Citrix XenServer
- 虚拟化方式:半虚拟化(linux安装linux); 全虚拟化(linux安装windows),硬件辅助虚拟化
- 架构:裸金属架构
- I/O协议栈:Xen选择了可维护这条道路,它将所有的I/O操作放到了Linux guest里面,也就是所谓的domain-0里面。重用Linux来做I/O, Xen的维护者就不用重写整个I/O协议栈了。但不幸的是,这样就牺牲了性能:每一个中断都必需经过Xen的调度,才能切换到domain 0, 并且所有的东西都不得不经过一个附加层的映射。
架构图:
xen的完全虚拟化与半虚拟化的区别是,完全虚拟化需要cpu支持硬件虚拟化,而半虚拟化不需要cpu支持硬件虚拟化。也就是,cpu支持了硬件虚拟化,xen配置完成后就是完全虚拟化,cpu不支持就是半虚拟化。
2.4 Microsoft Hyper-V
- 虚拟化方式:半虚拟化
- 架构:裸金属架构 Hyper-V Server; 寄居架构 Windows 2008
- 特点:父分区(宿主机操作系统)的位置挪到了子分区(虚拟机操作系统)的旁边,宿主机操作系统和虚拟机操作系统是平级的,没有谁依附谁之上的关系。
- I/O协议栈:虚拟机看到的所有设备不再都是虚拟出来的,有部分的硬件资源是真实的物理设备。
架构图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端