虚拟化是一个广义的术语,是指计算元件在虚拟的基础上而不是真实的基础上运行,是一个为了简化管理,优化资源的解决方案。如同空旷、通透的写字楼,整个楼层没有固定的墙壁,用户可以用同样的成本构建出更加自主适用的办公空间,进而节省成本,发挥空间最大利用率。这种把有限的固定的资源根据不同需求进行重新规划以达到最大利用率的思路,在IT领域就叫做虚拟化技术。

(虚拟化的第二种阐释)

那么下面说说虚拟化的分类。

1、按照虚拟化的程度分类

(1)完全虚拟化技术

完全虚拟化技术又叫硬件辅助虚拟化技术,最初所使用的虚拟化技术就是全虚拟化(Full Virtualization)技术,该模型使用虚拟机协调客户操作系统和原始硬件。这里"协调"是一个关键词,因为VMM在客户操作系统和裸硬件之间用于工作协调。一些受保护的指令必须由Hypervisor(汉译过来是“超级监督者”,也叫做VMMVirtual Machine Monitor,中文叫虚拟机监视器。它不是一款具体的软件,而是一类软件的统称。)来捕获和处理。因为操作系统是通过Hypervisor来分享底层硬件。

hypervisor可以划分为两大类。

  • 类型一: hypervisor是直接运行在物理硬件之上的。
  • 类型二: hypervisor运行在另一个操作系统(运行在物理硬件之上)中。

说明:

类型1:hypervisor的一个例子是基于内核的虚拟机(KVM —— 它本身是一个基于操作系统的 hypervisor)。

类型2:hypervisor 包括 QEMUWINE

提示:

x86平台指令集分为4个特权模式:Ring0Ring1Ring2Ring3、OS工作在Ring0级别,应用软件工作在Ring3级别,驱动程序工作在Ring1Ring2

如下图所示:

如何将虚拟机越级的指令使用进行隔离,1998年VMware首次找到了解决办法,通过虚拟化引擎,捕获虚拟机的指令,并进行处理,即全虚拟化方案。

在全虚拟化的情况下,VMM工作在Ring 0 ,Guest OS工作在Ring 1 ,应用程序工作在Ring 3,可是这时候Guest OS是不知道自己工作在虚拟机里的,认为自己还是工作在Ring 0 ,所以它还是按照Ring 0级别产特权生指令,Guest OS产生的每一条指令都会被VMM截取,并翻译成宿主机平台的指令,然后交给实际的物理平台执行,由于每一条指令都需要这么翻译一下,所以这种虚拟化性能比较差。

如下图所示:

解释说明:完全虚拟化结构图。

  • hardware是硬件。
  • Guest Os宿主操作系统,这就是所谓的虚拟机了。
  • Hypervisor就相当于是Guest OS和hardware中间的一个翻译者的角色。
  • Apps是在虚拟机上安装的应用程序。

我们看到的虚拟机是运行在宿主机之上的,这种虚拟化就直接工作在硬件之上。也就意味着Hypervisor是可以和硬件直接交互的。

当Apps调用Guest Os的内核,内核通过参数或者指令,发送给HypervisorHypervisor在把接受到的信息,翻译给硬件。硬件做出响应给HypervisorHypervisor传递给Guest Os,Guest Os对应的资源给对应的Apps。

这就是完全虚拟化的一个运行流程。

(2)半虚拟化技术

半虚拟化技术,也叫做准虚拟化技术。它就是在全虚拟化的基础上,把客户操作系统进行了修改,增加了一个专门的API,这些API可以将客户操作系统发出的指令进行最优化,即不需要Hypervisor费一定的资源进行翻译操作,因此Hypervisor的工作负担变得非常的小,因此整体的性能也有很大的提高。

如下图所示:

提示

半虚拟化是对Guest OS做相应修改,以便和VMM协同运作。在硬件辅助虚拟化兴起之前,半虚拟化性能胜过全虚拟化。在半虚拟化情况下,Guest OS知道自己并不是直接运行在硬件资源上,而是运行在虚拟化环境里,工作在非Ring 0,那么它原先在物理机上执行的一些特权指令,就会修改成其他方式(超级调用),这种方式是可以和VMM约定好的,半虚拟化不需要VMM层进行二进制翻译,所以性能较好,但是实现比较麻烦(要修改OS内核代码),典型的半虚拟化技术有xen。

如下图所示:

总结:

相当于在Hypervisor和Guest OS中间加了一层管理或者优化的过程。这样Hypervisor的工作效率的提高了。

这种半虚拟化是需要对Guest Os宿主操作系统进行优化的,增加一个优化层。生产环境中应用比较少,因为耗时和提升不成正比。

(3)完全虚拟化与半虚拟化优缺点

1)完全虚拟化

  • 优点是客户机的操作系统内核不需要做特殊配置,部署便利,灵活,兼容性好。
  • 缺点是客户机操作系统的内核不能够直接管理底层硬件,内核通过Hypervisor管理底层硬件需要有转换开销,性能比裸机操作要差。

2)半虚拟化

  • 优点是半虚拟化的虚拟机操作系统内核能够直接管理底层硬件,性能比全虚拟化技术更强。
  • 缺点是客户机操作系统内核需要事先进行修改,对于一些闭源的操作系统,例如Windows我们就无法使用半虚拟化技术,部署的便利性和灵活性都不够,兼容性不够好。

2、从虚拟化架构分类

在虚拟化环境下,物理服务器的CPU、内存、硬盘和网卡等硬件资源被虚拟化并受Hypervisor的调度,多个操作系统在Hypervisor的协调下可以共享这些虚拟化后的硬件资源,同时每个操作系统又可以保存彼此的独立性。

根据Hypervisor所处层次的不同和Guest OS对硬件资源的不同使用方式,Hypervisor虚拟化被分为两种类型:裸金属架构(“裸机”虚拟化)和寄居架构(基于操作系统的虚拟化,宿主型虚拟化)。

(1)寄居架构

Hypervisor虚拟化层安装在传统的操作系统中,虚拟化软件以应用程序进程形式运行在Windows和Linux等主机操作系统中。典型的宿主型Hypervisor有VMware Workstation和VirtualBox。在Hypervisor虚拟化环境下,部署在物理服务器上的系统称为Host OS,而部署在Hypervisor上的虚拟机操作系统称为Guest OS。

Hypervisor的安装:在物理服务器上安装Linux操作系统然后在操作系统上安装Hypervisor,然后部署虚拟机(Guest OS)后通过Hypervisor来共享资源。

寄居架构如下图:

宿主操作系统自身上运行这一些应用程序,然后还有虚拟机程序,这就是我们之前认识的传统虚拟机。

  • 优点:简单,便于实现。
  • 缺点:

    1)安装和运行应用程序依赖于主机操作系统对设备的支持。

    2)宿主操作系统,和其上边运行的软件,都是无用的资源。

    3)稳定性,一旦宿主操作系统出现问题,虚拟化软件在稳定也不行。

(2)裸金属架构

Hypervisor虚拟化层,在虚拟化环境中无须完整的Host OS,直接将Hypervisor部署在裸机上,并将裸机服务器的硬件资源虚拟化,也可以将Hypervisor理解为仅对硬件资源进行虚拟和调度的薄操作系统,其并不提供常规Host OS的功能。常见的裸金属架构有IBMPowerVMVMwareESX SevrerCitrixXenServerMicrosoftHyper-V以及开源的KVM等虚拟化软件。

裸金属架构虚拟化图如下:

  • 优点:虚拟机不依赖于操作系统,可以支持多种操作系统,多种应用,更加灵活。
  • 缺点:虚拟层内核开发难度较大。

参考:

『现学现忘』Docker相关概念 — 6、虚拟化技术分类的更多相关文章

  1. 『现学现忘』Docker相关概念 — 1、云计算概念

    目录 1.云计算的概念 2.示例说明云计算 3.小故事说明云计算 "云计算"这个词,相信大家都非常熟悉. 作为信息科技发展的主流趋势,它频繁地出现在我们的眼前.伴随它一起出现的,还 ...

  2. 『现学现忘』Docker相关概念 — 8、虚拟化技术和容器技术的关系

    目录 1.云计算中虚拟化技术和容器技术到的关系 2.虚拟机和容器对比 3.虚拟化技术和容器技术区别 1.云计算中虚拟化技术和容器技术到的关系 通过一个关于房间和住人的小问题,我们来初步的理解一下虚拟化 ...

  3. 『现学现忘』Docker相关概念 — 2、云计算的服务模式

    目录 1.最底层的,就是IaaS 2.再往上,就是PaaS 3.继续往上,就是SaaS 4.IaaS.SaaS.PaaS三者之间的关系 上一篇文章详细介绍了什么是云计算: 云是一种服务,可以像使用水. ...

  4. 『现学现忘』Docker相关概念 — 3、IaaS、SaaS、PaaS服务模式补充

    目录 1.IaaS服务模式 2.PaaS服务模式 (1)何时使用PaaS (2)PaaS的特点 (3)PaaS优势 3.SaaS服务模式 云计算通俗来说就是输入/输出和计算不在一个主机上.计算要用到计 ...

  5. 『现学现忘』Docker相关概念 — 4、虚拟化概念

    目录 1.虚拟化的概念 2.为什么出现虚拟化 3.虚拟化技术 1.虚拟化的概念 虚拟化是指通过虚拟化技术将计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操 ...

  6. 『现学现忘』Docker基础 — 28、Docker容器数据卷介绍

    目录 1.什么是Docker容器数据卷 2.数据卷的作用 3.数据卷的使用 1.什么是Docker容器数据卷 Docker容器数据卷,即Docker Volume(卷). 当Docker容器运行的时候 ...

  7. 『现学现忘』Docker基础 — 9、Docker简介

    目录 1.什么是Docker? 2.Docker的出现解决了什么问题? 3.Docker的特别之处 4.Docker相关网站 1.什么是Docker? 2010年dotCloud公司在旧金山成立,PA ...

  8. 『现学现忘』Docker基础 — 10、Docker的安装

    目录 1.前提 2.通过yum安装Docker (1)更新yum包 (2)移除旧的Docker版本 (3)安装必须的软件包 (4)设置稳定yum源仓库 (5)更新yum软件包索引 (6)开始安装Doc ...

  9. 『现学现忘』Docker基础 — 11、Docker安装的问题补充

    目录 1.问题复现 2.解决冲突 3.重新安装docker-ce-selinux 4.安装Docker-ce 5.总结 通过yum安装Docker的时候,安装20版本的Docker没有出现问题,在安装 ...

随机推荐

  1. 布客·ApacheCN 编程/后端/大数据/人工智能学习资源 2020.6

    公告 我们的群共享文件有备份到 IPFS 的计划,具体时间待定. 我们的机器学习群(915394271)正式改名为财务提升群,望悉知. 请关注我们的公众号"ApacheCN",回复 ...

  2. [HNOI2009]双递增序列

    不难发现本题贪心是不好做的,可以考虑 \(dp\). 首先的一个想法就是令 \(dp_{i, j, k, l}\) 表示当前选到第 \(i\) 个位置,当前第一个序列选了 \(j\) 个数,当前第一个 ...

  3. Spring中NESTED和REQUIRED_NEW传播行为的区别

    简介 PROPAGATION_REQUIRED_NEW: 表示当前方法必须运行在它自己的事务中.一个新的事务将被启动.如果存在当前事务,在该方法执行期间,当前事务会被挂起.如果使用JTATransac ...

  4. bom-scroll

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. C++网络编程卷1、卷2概述

    转载请注明来源:https://www.cnblogs.com/hookjc/ 一:  C++NPv1主要涉及到的类: 1.1.  Logging_Server 是个抽象类,用来定义接口类型,此类不能 ...

  6. PHP中的一些常用函数收集

    <?php //===============================时间日期=============================== //y返回年最后两位,Y年四位数,m月份数字 ...

  7. UTF-8编码规则(摘自JDK官方文档)

  8. tcp协议下的Socket

    import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net ...

  9. kubeadm/flannel/dashboard/harbor部署以及服务发布

    kubeadm/flannel/dashboard/harbor部署以及服务发布 目录 kubeadm/flannel/dashboard/harbor部署以及服务发布 一.部署kubeadm 1. ...

  10. 痞子衡嵌入式:揭秘i.MXRT1060,1010上串行NOR Flash冗余程序启动设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1060,1010上串行NOR Flash冗余程序启动设计. 工业产品设计里经常会有冗余程序/备份程序设计的需求,因为在工业 ...