ring0是指CPU的运行级别,ring0是最高级别,ring1次之,ring2更次之……
拿Linux+x86来说,
操作系统(内核)的代码运行在最高运行级别ring0上,可以使用特权指令,控制中断、修改页表、访问设备等等。
应用程序的代码运行在最低运行级别上ring3上,不能做受控操作。如果要做,比如要访问磁盘,写文件,那就要通过执行系统调用(函数),执行系统调用的时候,CPU的运行级别会发生从ring3到ring0的切换,并跳转到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问,完成之后再从ring0返回ring3。这个过程也称作用户态和内核态的切换。

那么,虚拟化在这里就遇到了一个难题,因为宿主操作系统是工作在ring0的,客户操作系统就不能也在ring0了,但是它不知道这一点,以前执行什么指令,现在还是执行什么指令,那肯定不行啊,没权限啊,玩不转啊。所以这时候虚拟机管理程序(VMM)就要避免这件事情发生。
(VMM在ring0上,一般以驱动程序的形式体现,驱动程序都是工作在ring0上,否则驱动不了设备)
一般是这样做,客户操作系统执行特权指令时,会触发异常(CPU机制,没权限的指令,触发异常),然后VMM捕获这个异常,在异常里面做翻译,模拟,最后返回到客户操作系统内,客户操作系统认为自己的特权指令工作正常,继续运行。但是这个性能损耗,就非常的大,你想想原来,简单的一条指令,执行完,了事,现在却要通过复杂的异常处理过程。

这时候半虚拟化就来了,半虚拟化的思想就是,让客户操作系统知道自己是在虚拟机上跑的,工作在非ring0状态,那么它原先在物理机上执行的一些特权指令,就会修改成其他方式,这种方式是可以和VMM约定好的,这就相当于,我通过修改代码把操作系统移植到一种新的架构上来,就是定制化。所以像XEN这种半虚拟化技术,客户机操作系统都是有一个专门的定制内核版本,和x86、mips、arm这些内核版本等价。这样以来,就不会有捕获异常、翻译、模拟的过程了,性能损耗非常低。这就是XEN这种半虚拟化架构的优势。这也是为什么XEN只支持虚拟化Linux,无法虚拟化windows原因,微软不改代码啊。

可以后来,CPU厂商,开始支持虚拟化了,情况有发生变化,拿X86 CPU来说,引入了Intel-VT 技术,支持Intel-VT 的CPU,有VMX root operation 和 VMX non-root operation两种模式,两种模式都支持Ring 0 ~ Ring 3 这 4 个运行级别。这下好了,VMM可以运行在VMX root operation模式下,客户OS运行在VMX non-root operation模式下。也就说,硬件这层做了些区分,这样全虚拟化下,有些靠“捕获异常-翻译-模拟”的实现就不需要了。而且CPU厂商,支持虚拟化的力度越来越大,靠硬件辅助的全虚拟化技术的性能逐渐逼近半虚拟化,再加上全虚拟化不需要修改客户操作系统这一优势,全虚拟化技术应该是未来的发展趋势。

XEN是最典型的半虚拟化,不过现在XEN也支持硬件辅助的全虚拟化,大趋势,拗不过啊。。。
KVM、VMARE这些一直都是全虚拟化。

转载于:https://www.cnblogs.com/xuliangwei/p/10420932.html

全虚拟化和半虚拟化的区别 cpu的ring0~ring3又是什么概念?相关推荐

  1. 完全虚拟化和半虚拟化区别

    半虚拟化和全虚拟化最大的区别: 半虚拟化是需要更改系统内核才得以实现虚拟化,而完全虚拟化是不需要修改内核. Xen虚拟机有两种运行方式:完全虚拟化(full virtualization)和半虚拟化( ...

  2. 全虚拟化与半虚拟化的实现方式

    目录 目录 全虚拟化 软件辅助的全虚拟化 硬件辅助的全虚拟化 半虚拟化 全虚拟化 不需要对GuestOS操作系统软件的源代码做任何的修改,就可以运行在这样的VMM中 在全虚拟化的虚拟平台中,Guest ...

  3. 虚拟化、完全虚拟化、半虚拟化和准虚拟化技术区别

    1.虚拟化技术: 百度百科中的定义是这样的:虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行.虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程.CPU的虚拟 ...

  4. 软件模拟虚拟化、全虚拟化、半虚拟化、硬件辅助虚拟化和容器

    目前虚拟化技术有软件模拟.全虚拟化(使用二进制翻译).半虚拟化(操作系统辅助).硬件辅助虚拟化和容器虚拟化这几种. (1)软件模拟 软件模拟是通过软件完全模拟cpu.芯片组.磁盘.网卡等计算机硬件: ...

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

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

  6. 云计算考证笔记、CPU虚拟化、内存虚拟化、IO虚拟化、存储虚拟化

    目录 NFVI:网络功能虚拟基础设施. CPU虚拟化: 全虚拟化: 半虚拟化: 硬件辅助虚拟化: 内存虚拟化: 全虚拟化: 硬件虚拟化: I/O虚拟化: QEMU: 全虚拟化: 半虚拟化: I/O透传 ...

  7. 服务器虚拟化分为半,服务器虚拟化有哪些?

    你好,服务器虚拟化分为完全虚拟化和半虚拟化, 完全虚拟化(Full Virtualization): 在当前的系统级虚拟化解决方案中,全虚拟化应用得非常普遍,典型的有知名的产品有VirtualBox. ...

  8. 浅谈Xen和半虚拟化技术

    研究生入学的时候,看了一篇论文--<Xen and the art of virtualization>.现在时隔一年,准备对此进行一番整理.下文是我Xen为例的半虚拟化技术的理解: 虚拟 ...

  9. 服务器虚拟化科普,服务器虚拟化技术深度科普

    服务器虚拟化技术要追述到IBM大型机的虚拟化 z/VM,在z系列大型机(非虚拟化操作系统是z/OS)上实现服务器虚拟化.基于z/VM可以运行上百个虚拟机.后来在Power上的KVM技术是PowerKV ...

最新文章

  1. 大脑对陌生音乐的反应要比对熟悉音乐的反应强度
  2. NoBrokersAvailableError
  3. php微服务架构设计模式,《微服务架构设计模式》读书笔记---第十一章:开发面向生产环境的微服务应用...
  4. 74cms 注入exp
  5. vue 导出_Vue核心知识:8.3 vuex在vue-cli中的应用,文件之间的导出与引入
  6. 【MM系列】SAP 关于更改物料的价格控制类型
  7. Docker工作笔记001---Docker的简介
  8. TQ WP7 Starter
  9. java api 8 中文_java8 JDK1.8 API 中文 翻译版 java帮助文档
  10. 微信自定义分享的那些坑!
  11. 阿里云redis学习笔记
  12. r语言提取cvs数据_r语言,csv数据,提取特定行
  13. 面试题HTML +CSS
  14. 百胜软件黄飞:携手阿里云,用双中台驱动新零售...
  15. Google收购传感器公司Lumedyne
  16. 基于HTML5canvars的小游戏,利用HTML5实现Canvas激流勇进小游戏代码
  17. 三台Ubuntu虚拟机搭建 Hadoop集群 (第一次搭)
  18. Linux服务器间文件夹监控同步文件脚本
  19. 【华为OD机试真题 python】九宫格【2023 Q1 | 200分】
  20. 什么是sql的for update

热门文章

  1. 用PHP和Websocket实现实时通讯
  2. 【WIN10】VisualStateManager使用說明
  3. Asp.net中实现同一用户名同时登陆,注销先前用户(转)
  4. python中如何对dict对象进行排序
  5. android 之数据存储(IO)
  6. c++ --- 字符串中的标点符号
  7. vue --- vue中的几个钩子属性
  8. 使用glew和glad 新建窗口
  9. Apache 设置http跳转至HTTPS访问
  10. 基于.Net Framework 4.0 Web API开发(4):ASP.NET Web APIs 基于令牌TOKEN验证的实现