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

    Ubuntn Typora安装 现在好像开始收费了,网上给的方法都是从官网下载的,感觉迟早不能用,因为要钱了 官网好像给的安装方法如下,可是好像不太好用 # or run: # sudo apt-ke ...

  2. resp.getWriter().print(categoryList)、resp.getWriter().write(String)与new ObjectMapper().writeValue(resp.getOutputStream(),categoryList)的区别

    前言:最近在复习原生的servlet的时候,对其输出流不理解,故总结一下: resp.getWriter().print(categoryList) 可以输出字符串,也可以输出对象,可能还有其他类型, ...

  3. css自定义属性(css变量)

    感谢原文作者:Kuku殿下 原文链接:https://segmentfault.com/a/1190000015948538 前言 刚开始的"css变量",经扩展之后,称为&quo ...

  4. Lua非常有用的工具——递归打印表数据

    摘要: Lua是一种非常小巧的语言.虽小,但五脏俱全. 在Lua中,我认为最最核心的数据结构就是表.表不仅可用作数组,还可以用作字典.Lua面向对象的实现也是用表实现的. 表对于Lua实在是太重要了! ...

  5. CSS 3D的魅力

    用户1093975发表于Web项目聚集地订阅 151 在这篇文章中: 前言: demo1 demo2 结语: 本文介绍了CSS来实现3D效果,并且有详细代码和解释.建议大家只字不差的阅读.本文的作者是 ...

  6. NoSQL 之 Redis配置与优化

    NoSQL 之 Redis配置与优化 1.关系数据库与非关系型数据库概述 2.关系数据库与非关系型数据库区别 3.非关系型数据库产生背景 4.Redis简介 5.Redis安装部署 6.Redis 命 ...

  7. 神奇小证明之——世界上只有5个正多面体+构造x3=2a3

    今天我彻底放飞自我了...作业还没写完...但就是要总结一些好玩的小性质...谁给我的勇气呢?

  8. JDBC加强

    一.使用PreparedStatement预编译语句防止SQL注入 什么是SQL注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行 ...

  9. redis(一)-----初识redis

    Redis是一种基于键值对(key-value)的NoSQL数据库 因为Redis会将所有数据都存放在内存 中,所以它的读写性能非常惊人.不仅如此,Redis还可以将内存的数据利 用快照和日志的形式保 ...

  10. Dubbo源码剖析六之SPI扩展点的实现之getExtensionLoader

    Dubbo SPI机制之三Adaptive自适应功能 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中,示例案例中自定义了扩展接口而不是使用Dubbo已提供的扩展接口.在案例中,主程序分 ...