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

    c++的函数需要声明才能再写他的定义,声明可以写多次,如果执行在main之前可以不写,全写不会犯错,现在看好像c++的函数定义里没有out,也没有变量的public和private(后面有再改) 声明 ...

  2. NOIP2018 Day2T3 保卫王国

    首先不考虑强制要求的话是一个经典问题,令 \(f_{i, 0 / 1}\) 为 \(i\) 选或不选时以 \(i\) 为根的子树的最优答案.那么就有转移 \(f_{u, 0} = \sum f_{v, ...

  3. application/x-www-form-urlencoded、application/json、multipart/form-data、text/xml简单总结

    最近在数据传输时,一直不明白这四种的区别,查了很多资料,也还是感到很模糊,因此,简单总结一下,以后再完善 1.在GET方式传输数据中,这四种格式,后台都可以接收数据(原生的request.getPar ...

  4. Charles中文乱码解决

    n在VMOptions中加一项:-Dfile.encoding=UTF-8  

  5. Sublime Text 官方网站 http://www.sublimetext.com

    Sublime Text 官方网站 http://www.sublimetext.com

  6. Maven 警告 expected START_TAG or END_TAG not TEXT

    原因 在Maven警告提示区域存在空格等不规范字符,在网上复制到项目中时经常出现类似问题. pop.xml文件,setting.xml文件极易出现此类问题. 解决 将空格删除,规范一下格式就好了. 示 ...

  7. laravel 依赖注入 接口设计

    假设我现在需要做一个支付服务,那么我先设计一个接口 interface PayInterface{ public function pay(Order $order) : string; } 然后实现 ...

  8. 随机数类 Random

    import java.util.Random; /* 随机数类 Random 需求: 编写一个函数随机产生四位的验证码. */ public class Demo5 { public static ...

  9. docker基础——3.存储卷

    把宿主机的目录或文件链接到容器的目录或文件,可以避免写时复制对高I/O操作的影响,也避免容器销毁时数据丢失. 1. 只指定容器的目录位置,-v docker run -it --name bbox1 ...

  10. SQL server 查询当前数据库所有表的行数

    SELECT OBJECT_NAME(ii.id) TableName ,rows FROM sysindexes ii INNER JOIN sysobjects oo ON ( oo.id = i ...