虚拟化概念详解_PolarDay.的博客-程序员秘密_虚拟化的定义

技术标签: 运维  杂项  云计算  docker  

虚拟化的定义

虚拟化技术可以认为是一种对物理资源抽象化,进而形成虚拟化的版本的技术
在这里插入图片描述

虚拟化的目的

物理资源组成庞大的资源池,然后可以按需分配,随意切割物理资源
在这里插入图片描述

虚拟化资源分类

  • 服务器虚拟化
    服务器虚拟化就是将虚拟化技术应用于服务器,将一台服务器虚拟成若干虚拟服务器,在该服务器上可以支持多个操作系统同时运行
  • 网络虚拟化
    将一个物理网络逻辑拆分为多个逻辑网络的方法(VLAN)
  • 存储虚拟化
    存储设备的能力、接口协议等差异性很大,存储虚拟化技术可以将不同存储设备进行格式化,将各种存储资源转化为统一管理的数据存储资源,可以用来存储虚拟机磁盘、虚拟机配置信息、快照等信息
  • 桌面虚拟化
    桌面虚拟化(Desktop Virtualization)是指将计算机的终端系统(也称作桌面)进行虚拟化,以达到桌面使用的安全性和灵活性。可以通过任何设备,在任何地点,任何时间通过网络访问属于我们个人的桌面系统。

特权级别

大部分的现代计算机体系结构都有两个或两个以上的特权级别,用来分隔内核和应用软件。以x86为例,为了得到更高的保护控制,在x86的保护模式下定义了当前特权级别(Current Previleged Level,简称CPL),一共有四个特级层次(0 to 3)被定义,我们一般称之为Ring。Ring后面的数字越大特权越小,我们的操作系统一般都运行在Ring0上,而Ring1和2一般用来支持设备驱动,Ring3上面跑的就是应用软件了。而在现在的x86处理器中,64位架构已经非常普遍,64位CPU因为必须支持页表模式,所以只有两个特权级别,我们可以简单理解为Ring0和Ring3(实际上另有明确定义),这种模型我们常称为0/3模型。

系统中有一些关键操作指令只能在最高特权级别上执行,它们一般被称为特权指令,特权指令仅仅在当前的特权级别为零时(CPL=0)才会执行。如果在非特权级别上试图执行特权指令,将生成一个一般保护异常(这通常会生成一个应用程序错误),而非特权指令则可以在任何一个权限级别执行。

敏感指令:在虚拟化世界的VMM模型中,我们可以看到所有的客户机操作系统都运行在非特权模式下,即非Ring0级。因为Guest OS已经不处在特权级别,所以存在一部分原本应该在特权级别执行但现在因为层级权限不够必须转交VMM进行处理的指令,这部分指令就叫敏感指令。
在这里插入图片描述

虚拟化技术分类

VMM(virtual machine monitor,虚拟机管理层),统一管理虚拟机,对虚拟机的请求进行集中调度,虚拟操作系统与硬件通信必须经过VMM层

全虚拟化

优点:不需要修改虚拟机OS

VMM(虚拟化层)用来统一管理上层虚拟机,工作在Ring 0级别,对虚拟机的请求进行集中调度

全虚拟化中客户操作系统没有做任何修改,虚拟机中的CPU指令集与工作在物理机上的CPU指令集一致

客户操作系统工作在Ring 1级别,那么如果客户操作系统发出Ring 0级别的指令就会导致异常(权限不够),这里的这个异常会被VMM层捕获。VMM层将捕获的异常进行翻译找出客户操作系统发出的什么样的高权限指令,然后模拟这个指令并将结果反馈给客户操作系统。
全虚拟化中每个请求都要经过异常捕获、翻译、模拟、反馈四个步骤,所以其性能比较低

在这里插入图片描述
典型产品:VMware Workstation、Virtual PC、QEMU

半虚拟化(操作系统辅助虚拟化)

需要对客户操作系统的内核做修改

对操作系统的内核进行修改,使客户机工作在Ring 0级别,此时VMM不需要监控异常,只需要在客户操作系统发出Ring 0级别的指令时,在VMM层提供超级调用接口,将指令转发到计算机系统硬件即可。

半虚拟化需要对内核进行修改,但是windows的内核是不开源的,不能进行修改,所以windows不能使用半虚拟化技术,linux内核是开源的,可以使用半虚拟化技术
不能跨平台,操作系统发出的指令相当于通过超级调用转发到硬件,那么OS发出的指令必须与硬件匹配

在这里插入图片描述

硬件辅助全虚拟化

硬件本身支持虚拟化技术,引入了Root模式和非Root模式

客户操作系统直接工作在Ring 0,此时不需要对OS做任何修改,发出的CPU指令不会出现异常

VMM工作在Ring 0层以下,通过超级调用转发客户操作系统的指令
在这里插入图片描述
典型产品:VMware EXSI、Xen3.0及以后的产品、MicroSoft Hyper-V、KVM

虚拟化体系架构

宿主模型(OS-Hosted VMM)

物理服务器上需要安装如Windows、Linux等操作系统,这些传统操作系统并不是为虚拟化而设计的,因此本身并不具备虚拟化功能,所有的虚拟化功能都由VMM来提供
VMM通常是宿主机操作系统独立的内核模块(工作在Ring 0层),有些实现中还包括用户态进程,如负责I/O虚拟化的用户态设备模型。VMM通过调用宿主机操作系统的服务来获得资源,实现处理器、内存和I/O设备的虚拟化
VMM层依托于宿主机

原生架构模型(Hypervisor VMM)

只需要Hypervisor VMM层,底层不需要原始的操作系统,但要调动硬件需要各种接口以及各种硬件的驱动。
在原生架构模型(Hypervisor VMM)中,VMM首先可以被看作是一个完备的操作系统,与传统操作系统不同的是,VMM是为虚拟化而设计的,因此其本身就具备虚拟化功能。
从架构上看,首先所有的物理资源如处理器、内存和I/O设备等都归于VMM所有,因此,VMM承担着管理物理资源的责任;其次,VMM需要向上提供虚拟机用于运行客户机操作系统,因此,VMM还负责虚拟环境的创建和管理。

混合模型(Hybrid VMM)

混合模型(Hybrid VMM)是上述两种模式的混合体。VMM依然位于最底层,拥有所有的物理资源,包括处理器、内存和I/O设备等。与Hypervisor模型不同的是,VMM会腾让出大部分I/O设备的控制权,将他们交由一个运行在特权虚拟机中的特权操作系统来控制,相应的,VMM虚拟化的职责也会被分担。处理器、内存虚拟化依然由VMM来完成,I/O设备虚拟化则由VMM和特权操作系统共同来完成

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shn111/article/details/124836719

智能推荐

Java基础第十八课(GUI图形用户界面)_周秃秃的博客-程序员秘密

前面我们一直都是用控制台进行信息的输入输出来写Java程序但是我们平常见到的程序都是有好看的界面的你可能会想难道Java不能做界面???放心,Java可以说是很强大的它是可以做出来的,只不过用Java写Windows窗口程序都太麻烦了所以用Java来写的不多但是我还是要讲一下滴好啦 开始一、简介及简单演示我们平时电脑用的软件能看到的界面其实就是GUI(Graphic User I...

USB xHCI控制器使用总结_静思心远的博客-程序员秘密_usb xhci

USB xHCI控制器使用总结1 Intel USB xHCI控制器1.1 驱动架构1.2 x86 OTG架构1.3 x86 xHCI Scheduler Async Delay1.4 Interrupt on Short Packet1.5 x86 USB DCI DbC调试技术1.6 reset USB device1.7 PIPE PHY数据线宽度2 Bulk传输速度计算3 xHCI HS眼图调试3.1 EHCI眼图调试寄存器设置流程3.2 xHCI每个port的4个寄存器3.3 xHCI HS眼图调

itop4412 linux-4.14.2 can设备树_cuihongqiang的博客-程序员秘密

待验证&pinctrl_1 { mcp2515_irq: mcp2515-irq { samsung,pins = "gpx0-1"; samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>; samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>; samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>; };};&spi_2 { num

汽车轮胎保养六大技巧 如何进行更好的汽车轮胎保养_chengyeqian9749的博客-程序员秘密

  汽车轮胎保养六大技巧 如何进行更好的汽车轮胎保养  1.经常检查轮胎状况  时常检查轮胎,及早发现轮胎是否有鼓包,裂缝,割伤,扎钉、气门嘴橡胶老化和不正常的轮胎磨损等情况。特别应注意检查轮胎胎面及轮胎边缘的磨损,这有可能是由于定位不良或轮胎气压不正常行驶造成的。  2.轮胎磨损到磨损...

ecshop 框架 简单分析_weixin_30432007的博客-程序员秘密

include/init.PHP....................//主函数文件includes/inc_constant.php //常量,暂时没多大用includes/cls_ecshop.php //基础类includes/cls_error.php //用户级错误处理类includes/lib_...

R语言dplyr包select函数删除dataframe数据中包含指定字符串内容的数据列(drop columns in dataframe)_statistics.insight的博客-程序员秘密

R语言dplyr包select函数删除dataframe数据中包含指定字符串内容的数据列(drop columns in dataframe)

随便推点

01-ES6语法:块作用域构造let_光脚丫思考的博客-程序员秘密_es6 文本块

本文介绍了ES6语法中的块作用于let语法,通俗易懂。

图-最短路径算法(floyd-warshall算法)_目标就是一个小目标的博客-程序员秘密

实验内容:(场景:判断六度分离是否成立)1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为“小世界现象(small world phenomenon)”的著名假说,大意是说,任何2个素不相识的人中间最多只隔着6个人,即只用6个人就可以将他们联系在一起,因此他的理论也被称为“六度分离”理论(six degrees of separation)。虽然米尔格兰姆的理论屡屡应验,一直也有很多社会学家对其兴趣浓厚,但是在30多年的时间里,它从来就没有得到过严谨的证明,只是一种带有传奇色彩的假说而已。L

计算机毕业设计java+ssm学生网上请假系统(源码+系统+mysql数据库+Lw文档)_q_1039692211的博客-程序员秘密

项目介绍随着高校招生规模的逐步扩大和教学方式的改革,在校学生人数将不断增加。另一方面,我国高等学校基层学生考核工作的内容杂,管理细,要求高,头绪多,传统的手工档案式管理办法已基本不适应新形势的要求,已经暴露出了一些弊端。例如,学生请假不方便,学生请假对任课老师,班主任、院系领导不透明;学生对自己整个学期的上课出勤情况没有整体的统计信息。系统采用了ssm框架技术开发,利用mysql数据库实现数据持久化存储。系统后台编程语言采用java进行编程.超级管理员:基础信息管理:实现了学院和系部信息的管理,可以学

layer 关闭指定弹出层_Joshua02的博客-程序员秘密

首先,弹出某个层时需要给层取名(赋值),如:var mylay = layer.open({ type: 2, content: 'layer.html', title: false, area: ['500px', '500px']});需要关闭指定的弹出层时,直接: layer.close(mylay) 如果在弹出层中写js,...

c linux root 后挂载读写,Linux-挂载-mount_杨昉的博客-程序员秘密

4.文件系统4.6分区、格式化与挂载4.6.6挂载什么是挂载?Linux通过倒树形的根文件系统来管理所有的文件,内核只能识别并管理根目录/所在的文件系统及其下的目录和文件。因此其他文件系统想要使用,都需要为其指定在现存目录下的访问入口。将额外的文件系统,与现存的Linux能够识别的目录,建立起映射关系,实现将现存目录作为访问额外文件系统的入口的功能,这个过程称为挂载;用于访问额外文件系统的,现存文...

Linux下后台Python运行程序,并输出日志文件_瑾珮的博客-程序员秘密_python 后台运行 日志

后台运行Python程序,然后把打印信息保存在指定的日志文件中,可随时查看日志。一、启动命令1、一般使用nohup python -u pyth.py >log.log 2 >&1 &2、只记录异常日志(推荐)nohup python -u pyth.py >/dev/null 2>error.log 2>&1 &3、不记录任何日志nohup python -u pyth.py >/dev/null 2>&

推荐文章

热门文章

相关标签