虚拟化概述
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚拟化概述相关的知识,希望对你有一定的参考价值。
虚拟化简介
一、虚拟化是什么:虚拟化是一种技术,是一种可以将物理资源转变为灵活使用的资源的技术。使用虚拟化技术,我们可以在一台物理服务器上模拟出多个独立的服务器来通常,应用程序需要安装在操作系统上,而一台物理服务器只能同时 运行一个操作系统,使用了虚拟化以后,这些模拟出来的每个服务器都可以有自己独立的操作系统。这样,相当于在一台服务器服务器上同时可以运行多个操作系统了。器上模拟出多个独立的服务器来
常见虚拟化名词:
虚拟化技术的核心——Hypervisor(虚拟机监视器),也可以被称为 VMM(Virtual Machine Manager)
在一个 Host Machine 之上可以建立并运行多个 Guest Machine。
二、计算虚拟化的分类:
根据 Hypervisor 的不同类型,我们将虚拟化分为 I 型和 II 型两种
- Ⅰ型是裸机型,直接运行在硬件设备上的服务器上直接部署Hypervisor,然后部署虚拟机,每个虚拟机上跑操作系统Linux或者win.比如fusionsphare(华为),VMware EsxServer
- Ⅱ型一种是主机托管型,运行在具有虚拟化功能的操作系统上的比如windows上的虚拟化软件就有VMware workstation(VMware公司),hyper-v(微软公司),MacBook上虚拟化软件:VMware fusion
Hypervisor (虚拟机监视器)主要实现两个基本功能:首先是识别、捕获和响应虚拟机所发出的 CPU 特权指令或保护指令;其次,它负责处理虚拟机队列和调度,并将物理硬件的处理结果返回给相应的虚拟机
三、虚拟化特点:无论是 I 型还是 II 型虚拟化,都具备分区、隔离、封装和独立的特点。
- 分区:对物理机分区,可实现在单一物理机上同时运行多个虚拟机;
- 隔离:同一物理机上多个虚拟机相互隔离相互不受影响
- 封装:封装意味着将整个虚拟机(硬件配置、Bios 配置、内存状态、磁盘状态、CPU 状态)储存在独立于物理硬件的一小的文件或文件夹中只需复制几个文件就可以随时随地根据需要复 制、保存和移动虚拟机。
- 独立:虚拟机在封装为独立文件后,虚拟机迁移只需要把虚拟机设备文件和配 置文件或磁盘文件复制到另一台主机上运行即可
四、cpu虚拟化
1)CPU的分级保护域:
CPU 架构分成 4 个层级——Ring0、Ring1、Ring2 和 Ring3,Ring0 的权限最高,Ring3 最低。
Ring0 的权限可以直接操作硬件,一般只有操作系统和驱动会允许拥有此权限。Ring3 的权限最低,所有的应用程序都可以拥有此权限
2)操作系统一般发出的命令分为两种类型:特权指令和普通指令
- 特权指令:必须在Ring 0级别才能运行
- 普通指令:在Ring 3 级别上就能运行
在虚拟化的环境下还有一种指令叫做敏感指令。敏感指令是修改虚拟机的运行模式或宿主机状态的命令,也就是说是将 Guest OS 中原本需要在 Ring 0 模式下才能运行的特权指 令剥夺特权后,交给 VMM 所执行的指令。
3)大型机的 CPU 虚拟化方式:大型机 CPU 虚拟化采取的是“特权解除”和“陷入模拟”方法,这种方法也被称为经典虚拟化方式即精简指令集 RISC 计算机架构。
Risc架构:它的基本原理是,将 Guest OS 运行在非特权级(即特权解除),而将 VMM 运行于最高特权级(即完全控制系统资源)
如果虚拟机 Guest OS 发出特权操作指令怎么执行呢?因为所 有虚拟机的系统都被解除了特权,于是“陷入模拟”就发挥作用了,它解除了 Guest OS 的特 权后,Guest OS 的大部分指令仍可以在硬件上直接运行,只有当执行到特权指令时,才会陷入 到 VMM 模拟执行(陷入-模拟)。由 VMM 代替虚拟机向真正的硬件 CPU 发出特权操作指令
4)x86() 架构的 CPU 指令集是不同于 RISC 架构的 CISC 架构
CISC 架构的 CPU 指令集的特权指令和敏感指令并不完全重合,具体来 说,基于 x86 的 CISC 指令集有 19 条敏感指令不属于特权指令的范畴,这部分敏感指令运行在 CPU 的 Ring 1 用户态上。这部分的命令不属于特权命令因此无法被VMM捕获,因此x86 无法使用“特权解除陷入模拟”的虚拟化技术。
因此架构师提出了三种新方法:全虚拟化、半虚拟化、硬件辅助虚拟化
全虚拟化(Vmware提出):将所有虚拟机发出的操作系统请求转发到虚拟机监视器(VMM)虚拟机监视器对指令进行二进制翻译如果指令是特权指令或敏感指令则进入VMM模拟执行,然后调度到 CPU 特权级别Ring0上执行,如果只是应用程序指令则直接在 CPU 非特权级别上执行
半虚拟化(Xen提出):通过修改虚拟机操作系统Guest OS 虚拟机操作系统会使用”(Hypercall)超级调用来替换虚拟化中的敏感指令 如果虚拟机发出的指令是这些用Hypercall 那就直接交给虚拟机监视器VMM ,虚拟机监视器在调度指令到硬件CPU上执行
硬件辅助虚拟化:即CPU 直接支持虚拟化功能,并且可以识别敏感指令
目前主流的 x86 主机的 CPU 都支持硬件虚拟化技术,Intel 研发VT-x 的 CPU,AMD 推出 AMD-V 的 CPU这两种技术都为 CPU 增加了新的执行模式 root 模式,可以让虚拟化监视器 VMM 运 行在 root 模式下,而 root 模式位于 CPU 指令级别 Ring 0 的下面。特权和敏感指令自动在 Hypervisor 上执行
五、内存虚拟化:
通常情况下物理主机在使用内存地址空间时都是按照
1、内存地址都是从物理地址0开始的 2、内存地址空间都是连续分配的
引入虚拟化后出现了问题:首先是要求内存地址空间都从物理地址 0 开始,显然物理地址为0的内存地址空间只有一个,无法同时满足所有虚拟机内存使用都要从 0 开始的要求; 其次,地址连续分配问题。即使可以为虚拟机分配连续的物理地址,但是内存使用效率不高,缺乏灵活性。
所以引入内存虚拟化技术,。内存虚拟化就是把物理机的真实物理 内存统一管理,包装成多份虚拟的内存给若干虚拟机使用。内存虚拟化技术的核心在于引入一层 新的地址空间——客户机物理地址空间,客户机(Guest)以为自己运行在真实的物理地址空间 中,实际上它是通过 VMM 访问真实的物理地址的,在 VMM 中保存客户机地址空间和物理机 地址空间之间的映射表,
六、I/O虚拟化:
1、全虚拟化:通过 VMM 为虚拟机模拟出一个与真实设备类似 的虚拟 I/O 设备,当虚拟机对 I/O 设备发起 I/O 请求时,VMM 截获虚拟机下发的 I/O 访问请 求,再由 VMM 将真实的访问请求发送到物理设备进行处理
2、半虚拟化:它需要建立一个特权级别的 虚拟机,即特权虚拟机。半虚拟化方式要求各个虚拟机运行前端驱动程序,当需要访问 I/O 设备 时,虚拟机通过前端驱动程序把 I/O 请求发送给特权虚拟机,由特权虚拟机的后端驱动收集每个 虚拟机所发出的 I/O 请求,再由后端驱动对多个 I/O 请求进行分时分通道处理。特权虚拟机运行 真实的物理 I/O 设备驱动,将 I/O 请求发送给物理 I/O 设备,I/O 设备处理完成后再将结果返回 给虚拟机。即主动让虚拟机把 I/O 请求发送给特权虚拟机,再由特权虚 拟机访问真实的 I/O 设备
Domain 0 就是特权虚拟机,Domain U 则为用户虚拟机
3.硬件辅助虚拟化:硬件辅助虚拟化不同于前面两种方式,它是直接将 I/O 设备驱动直接 安装在虚拟机操作系统中
七、主流的计算虚拟化:主流的虚拟化技术有很多,一般我们会使用开源和闭源来进行分类。开源的包含 KVM 和 Xen,闭源的包括微软的 Hyper-v、VMware 的 vSphere、华为的 FusionSphere
以上是关于虚拟化概述的主要内容,如果未能解决你的问题,请参考以下文章