全虚拟化和半虚拟化的区别 cpu的ring0 ring1又是什么概念? - 转

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这些一直都是全虚拟化。

 

=======================================================

半虚拟化和全虚拟化的区别

虚拟化技术:百度百科中的定义是这样的:虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。这个定义已经比较完整了。

(完)全虚拟化技术:完全虚拟化技术又叫硬件辅助虚拟化技术,最初所使用的虚拟化技术就是全虚拟化(Full Virtualization)技术,它在虚拟机(VM)和硬件之间加了一个软件层--Hypervisor,或者叫做虚拟机管理程序(VMM)。hypervisor 可以划分为两大类。首先是类型 1,这种 hypervisor 是直接运行在物理硬件之上的。其次是类型 2,这种 hypervisor 运行在另一个操作系统(运行在物理硬件之上)中。类型 1 hypervisor 的一个例子是基于内核的虚拟机(KVM —— 它本身是一个基于操作系统的 hypervisor)。类型 2 hypervisor 包括 QEMU 和 WINE。

  因为运行在虚拟机上的操作系统通过Hypervisor来最终分享硬件,所以虚拟机发出的指令需经过Hypervisor捕获并处理。为此每个客户操作系统(Guest OS)所发出的指令都要被翻译成CPU能识别的指令格式,这里的客户操作系统即是运行的虚拟机,所以Hypervisor的工作负荷会很大,因此会占用一定的资源,所以在性能方面不如裸机。但是运行速度要快于硬件模拟。全虚拟化最大的优点就是运行在虚拟机上的操作系统没有经过任何修改,唯一的限制就是操作系统必须能够支持底层的硬件,不过目前的操作系统一般都能支持底层硬件,所以这个限制就变得微不足道了。全虚拟化技术如图1所示。

图1:全虚拟化技术

半/准虚拟化技术:半虚拟化技术是后来才出现的技术,半虚拟化技术英文是paravirtualization,也叫做准虚拟化技术,现在比较热门,它就是在全虚拟化的基础上,把客户操作系统进行了修改,增加了一个专门的API,这个API可以将客户操作系统发出的指令进行最优化,即不需要Hypervisor耗费一定的资源进行翻译操作,因此Hypervisor的工作负担变得非常的小,因此整体的性能也有很大的提高。不过缺点就是,要修改包含该API的操作系统,但是对于某些不含该API的操作系统(主要是windows)来说,就不行能用这种方法。半/准虚拟化技术如图2所示。

图2:半/准虚拟化技术

随着硬件虚拟化技术的逐渐演化,运行于Intel平台的全虚拟化的性能已经超过了准虚拟化产品,这一点在64位的操作系统上表现的更为明显。加之,全虚拟化不需要对客户机操作系统做任何修改的固有优势。可以预言,基于硬件的全虚拟化产品将是未来虚拟化技术的核心。

转载于:https://www.cnblogs.com/alpha1981/p/8158613.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《Intel VT-x 指令集架构:硬件辅助虚拟技术原理与实现》第2章主要介绍了Intel VT-x架构的基本原理和实现方式。其中2.2节详细讲解了VT-x的虚拟模式。 在VT-x的虚拟模式下,CPU通过将虚拟机监视器(VMM)运行在Ring 0特权级,并在虚拟机(Guest OS)运行在Ring 1或Ring 3特权级的方式下,实现了对硬件资源的虚拟。VT-x架构中引入了两个新的特权级:VMX root mode和VMX non-root mode。VMX root mode是VMM运行的特权级,可以直接访问所有的CPU资源和系统内存,负责管理虚拟机的创建、销毁和切换等操作。VMX non-root mode是虚拟机运行的特权级,虚拟机在该特权级下运行,并通过VMCS(Virtual Machine Control Structure)来访问CPU资源。 在VT-x的虚拟模式下,当虚拟机需要访问CPU资源时,CPU会检查当前是否处于VMX non-root mode,如果是,则通过VMCS来访问CPU资源;如果不是,则通过VM-exit切换到VMX root mode,并将CPU的状态保存到VMCS中,然后由VMM来处理虚拟机的请求。处理完成后,通过VM-entry重新进入VMX non-root mode并恢复CPU的状态,继续执行虚拟机的指令。 此外,VT-x架构还引入了一些新的指令和数据结构,如VMXON、VMCS、VMREAD、VMWRITE等,用于管理虚拟机和VMM之间的交互。其中VMCS是VT-x架构中最重要的数据结构之一,用于存储虚拟机和VMM之间的CPU状态信息,包括寄存器的值、中断描述符表、页面表、虚拟CPUID等。 总的来说,VT-x的虚拟模式通过硬件虚拟,实现了对CPU资源的虚拟,并且提供了一些新的指令和数据结构来管理虚拟机和VMM之间的交互。这种虚拟模式为虚拟技术的发展提供了有力的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值