全虚拟化

不需要对GuestOS操作系统软件的源代码做任何的修改,就可以运行在这样的VMM中

在全虚拟化的虚拟平台中,GuestOS并不知道自己是一台虚拟机,它会认为自己就是运行在计算机物理硬件设备上的HostOS。因为全虚拟化的VMM会将一个OS所能够操作的CPU、内存、外设等物理设备逻辑抽象成为虚拟CPU、虚拟内存、虚拟外设等虚拟设备后,再交由GuestOS来操作使用。这样的GuestOS会将底层硬件平台视为自己所有的,但是实际上,这些都是VMM为GuestOS制造了这种假象。

全虚拟化又分为:软件辅助的全虚拟化 & 硬件辅助的全虚拟化

软件辅助的全虚拟化

软件辅助全虚拟化架构图

在Intel等CPU厂商还没有发布x86 CPU虚拟化技术之前,完全虚拟化都是通过软件辅助的方式来实现的。而软件辅助的全虚拟化主要是应用了两种机制:
1. 特权解除(优先级压缩):从上述的软件辅助全虚拟化架构图中可以看出,VMM、GuestOS、GuestApplications都是运行在Ring 1-3用户态中的应用程序代码。当在GuestOS中执行系统内核的特权指令时,一般都会触发异常。这是因为用户态代码不能直接运行在核心态中,而且系统内核的特权指令大多都只能运行在Ring 0核心态中。在触发了异常之后,这些异常就会被VMM捕获,再由VMM将这些特权指令进行虚拟化成为只针对虚拟CPU起作用的虚拟特权指令。其本质就是使用若干能运行在用户态中的非特权指令来模拟出只针对GuestOS有效的虚拟特权指令,从而将特权指令的特权解除掉。
缺点:但是特权解除的问题在于当初设计标准x86架构CPU时,并没有考虑到要支持虚拟化技术,所以会存在一部分特权指令运行在Ring 1用户态上,而这些运行在Ring 1上的特权指令并不会触发异常然后再被VMM捕获。从而导致在GuestOS中执行的特权指令直接对HostOS造成了影响(GuestOS和HostOS没能做到完全隔离)。
针对这个问题,再引入了陷入模拟的机制。

陷入模拟(二进制翻译):就是VMM会对GuestOS中的二进制代码(运行在CPU中的代码)进行扫描,一旦发现GuestOS执行的二进制代码中包含有运行在用户态上的特权指令二进制代码时,就会将这些二进制代码翻译成虚拟特权指令二进制代码或者是翻译成运行在核心态中的特权指令二进制代码从而强制的触发异常。这样就能够很好的解决了运行在Ring 1用户态上的特权指令没有被VMM捕获的问题,更好的实现了GuestOS和HostOS的隔离。

简而言之,软件辅助虚拟化能够成功的将所有在GuestOS中执行的系统内核特权指令进行捕获、翻译,使之成为只能对GuestOS生效的虚拟特权指令。但是退一步来说,之所以需要这么做的前提是因为CPU并不能准确的去判断一个特权指令到底是由GuestOS发出的还是由HostOS发出的,这样也就无法针对一个正确的OS去将这一个特权指令执行。

直到后来CPU厂商们发布了能够判断特权指令归属的标准x86 CPU之后,迎来了硬件辅助全虚拟化。

硬件辅助的全虚拟化

硬件辅助全虚拟化主要使用了支持虚拟化功能的CPU进行支撑,CPU可以明确的分辨出来自GuestOS的特权指令,并针对GuestOS进行特权操作,而不会影响到HostOS。

从更深入的层次来说,虚拟化CPU形成了新的CPU执行状态 —— * Non-Root Mode& Root Mode* 。从上图中可以看见,GuestOS运行在Non-Root Mode 的Ring 0核心态中,这表明GuestOS能够直接执行特却指令而不再需要 特权解除陷入模拟 机制。并且在硬件层上面紧接的就是虚拟化层的VMM,而不需要HostOS。这是因为在硬件辅助全虚拟化的VMM会以一种更具协作性的方式来实现虚拟化 —— 将虚拟化模块加载到HostOS的内核中,例如:KVM,KVM通过在HostOS内核中加载KVM Kernel Module来将HostOS转换成为一个VMM。所以此时VMM可以看作是HostOS,反之亦然。这种虚拟化方式创建的GuestOS知道自己是正在虚拟化模式中运行的GuestOS,KVM就是这样的一种虚拟化实现解决方案。

半虚拟化

需要对GuestOS的内核代码做一定的修改,才能够将GuestOS运行在半虚拟化的VMM中

半虚拟化通过在GuestOS的源代码级别上修改特权指令来回避上述的虚拟化漏洞。

修改内核后的GuestOS也知道自己就是一台虚拟机。所以能够很好的对核心态指令和敏感指令进行识别和处理,但缺点在于GuestOS的镜像文件并不通用。

具体的x86架构CPU解析,请参考虚拟化的发展历程和实现方式

全/半虚拟化、硬件/软件辅助的全虚拟化之间的区别与联系相关推荐

  1. [最全]Android安卓架构MVC、MVP、MVVM之间的区别和联系(图解+案例+源码)

    一.问题背景 博主最近在准备春招面试中介绍自己简历中Android项目的MVP架构,但是博主发现若自身不彻底弄懂Android安卓架构MVC.MVP.MVVM之间的区别和联系,博主将无法准确地向面试官 ...

  2. 全虚拟化半虚拟化硬件辅助搜索虚拟化操作系统级虚拟化

    全虚拟化(FullVirtulization) 简介:主要是在客户操作系统和硬件之间捕捉和处理那些对虚拟化敏感的特权指令,使客户操作系统无需修改就能运行,速度会根据不同的实现而不同,但大致能满足用户的 ...

  3. 【硬件工程师学软件】之 硬件工程师更需要全栈

    现在的技术更新越来越频繁,分类越来越细,按道理来说,社会分工应该越来越细才对,但是事实表明,很多时候并非如此,比如:在软件工程师中就有前台开发工程师和后台开发工程师的说法,但是现在却流行全栈工程师了, ...

  4. 7年级计算机组成ppt,《第二课_计算机的硬件软件了解计算机系统的组成课件》初中信息技术滇教科课标版七年级全一册课件.ppt...

    <第二课_计算机的硬件软件了解计算机系统的组成课件>初中信息技术滇教科课标版七年级全一册课件 下一页 上一页 封面 退出 计算机的组成 中学信息技术 导入 讲解 练习 小结 下一页 上一页 ...

  5. SaaS软件服务优点全解析

    本文讲的是SaaS软件服务优点全解析,[IT168 资讯]随着SOA.联合身份管理技术(Federated Identity Management)以及托管集成技术的发展,IT资源的物理位置会变得越来 ...

  6. 软硬结合——写给硬件开发工程师的全栈入门实战

    特别注意: 教程已经迁移到:www.scaugreen.cn 软硬结合--写给硬件开发工程师的全栈入门实战 作者水平 读者水平要求 整个项目简单介绍 教程特点 为什么使用nodejs 开始 提问 提问 ...

  7. rock64 linux,ROCK64IOTA成品IOTA全节点专用硬件

    最近,一家在线销售IOTA全节点专用设备的网站rock64iota.com上线,创作者自2017年11月开始尝试在相关硬件上配置IOTA全节点,期间不断试错,多次改变软硬件版本,并于2018年3月份实 ...

  8. mobaxterm多屏操作_全功能的终端软件MobaXterm推荐配置

    MobaXterm是一款豪华.全功能的终端软件.它不仅可以像PuTTY一样通过SSH连接Raspberry Pi等开源硬件,并且还能: 直接的便携版 内建多标签和多终端分屏 内建SFTP文件传输 内建 ...

  9. 用友政务适时推出全国产财政管理软件

    无论是从技术发展还是思想认识来看,我国电子政务这20多年走的都是一条"有条件的先上,在实践中摸索前进"的螺旋式路线.而这条螺旋上升的轨迹中,离不开国产基础软硬件和应用软件的影子. ...

最新文章

  1. [转]关于重定向RedirectAttributes的用法
  2. python终结一个循环额_Python语言入门之内存管理方式和垃圾回收算法解析
  3. frame,iframe,frameset用法和区别
  4. 云原生思想 — 云原生的 DevOps
  5. 云迹科技:站在酒店场景服务机器人的风口
  6. 7-3 最短路径 (20 分)(分支限界+思路+详解)
  7. HTTP协议原理+实践 Web开发工程师必学(笔记)
  8. synchronized()_深入理解synchronized
  9. Android基础学习整理知识点
  10. matlab设置等高线标注字体大小,matlab设置图中字体和线条大小等(转)
  11. 如何高效学习,斯科特·扬(全文)
  12. [转帖]方正数码发布基于龙芯3A3000系列整机
  13. 帝国cms 自动生成html,帝国CMS静态生成为一行代码教程
  14. 深入浅出 SSL/TLS 协议
  15. switch语句及其嵌套
  16. 如何使用pem文件登录服务器,如何用pem链接服务器
  17. gif原理+gifsicle压缩gif
  18. 通俗易懂【Springboot】 单文件下载和批量下载(多个文件合成一个压缩包下载)
  19. 超详细的C++冒泡排序(升降)的两种实现方式
  20. perp系列之五:perp安装

热门文章

  1. 线程池必须是单例模式
  2. 关于RuoYi中Spring IOC、DI以及MVC不同注解的使用
  3. 进击的 JAMStack
  4. 选取数据库表行数为奇数或偶数记录
  5. (附源码)php社区果蔬网站的开发 毕业设计211548
  6. java连接数据库12514_ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法...
  7. DDX_TEXT(pDX,IDC_BIO,m_strBio)的含义
  8. mysql根据父节点查询所有的子节点以及根据子节点往上查询所有父节点
  9. 华为虚拟化平台FusionCompute架构及安装笔记
  10. 外虚内实是什么意思_农村俗语“宅有五实五虚,五虚令人贫;五实人富贵”是什么意思?...