纯软件半虚拟化

虚拟化是一块“肥肉”,思杰公司也想分一杯羹,于2003年推出了XEN虚拟化解决方案,它采用的解决方案与vmware公司的虚拟化有些不同,但是vmware公司已经占据了市场的制高点,成了虚拟化市场的霸主。
我们下面来看一下,思杰公司是如何解决X86架构CPU的缺陷的,这里的缺陷就是指的是敏感指令并不全是特权指令。
hypercall超级调用

思杰公司采用hypercall的技术解决部门敏感指令不能被捕捉的问题。他们的思路有点像《×××帝国》的“莫费斯”,他告诉了男主他并不是真实的。OS认为他就是一台真实物理机,xen修改了OS的部分代码,告诉OS它就是一个虚拟机,这样的话当OS要运行一些敏感指令的时候就转换为发给VMM的hypercall,由VMM继续进行处理。
OS明确知道自己是运行在环1上,而不是环0上,所以有效的避免了执行冲突的问题。
我们可以看出来,xen的虚拟化比较有哲学意义,它让OS更加现实,接受了自己就是虚拟机的现实;它让OS更像一个软件,使用敏感指令的时候会主动通过VMM,让VMM发起对硬件的调用。
我认为用被抓和自首来比喻全虚拟化和半虚拟化比较恰当,区分在于被动和主动。
而在全虚拟时,OS对自己是虚拟机的事实一概不知,所以老是做出一些“出格”的事情,它明明运行在环1上却想运行环0的指令,而全虚拟化的VMM就像警察,每当OS犯罪的时候就会发现,发现会进行降级和模拟处理,但并不是每次OS做出犯罪行为时VMM都能识别,之后有了二进程翻译技术之后,警察就会发现OS每次的犯罪行为,然后被“抓起来”进行处理
而半虚拟化就像人自首,并不用VMM进行捕获,当OS想要做一些出格的事情时,就会直接进行一些库调用,这些库调用是通过对VMM进行抽象得来的,所以一调用就是直接告诉VMM了,它不用被监控了,实现这一些的前提就是修改OS的代码,所以xen只支持linux,而不是支持windows上原因。
怎样理解半虚拟化?
所谓的全虚拟化就是我自己并不是知道自己是虚拟机,对于客户端而言都是没有感觉的,这就是全虚拟化。
当OS知道了自己就是虚拟机之后,全虚拟化就不再全了,客户有感觉了,这种就叫做半虚拟化。
在效率性能上,半虚拟化比vmware要高很多。

原文地址:http://blog.51cto.com/13778749/2161670

时间: 2024-11-07 23:04:26

纯软件半虚拟化的相关文章

CPU纯软件半虚拟化技术

在2003年出现的Xen,使用了另外的一种半虚拟化的方案来解决x86架构下CPU的敏感指令问题.主要采用Hypercall技术.Guest OS的部分代码被改变,从而使Guest OS会将和特权指令相关的操作都转换为发给VMM的Hypercall(超级调用),由VMM继续进行处理.而Hypercall支持的批处理和异步这两种优化方式,使得通过Hypercall能得到近似于物理机的速度. 1.Hypercall技术 对于x86体系结构CPU,Xen使用超级调用来替换被监控的操作,其中包括x86架构

CPU纯软件全虚拟化技术

我们在前面的文章中提到了虚拟化技术的大致分类情况,即分为全虚拟化.半虚拟化和硬件辅助虚拟化技术3大类别.而我们虚拟化技术最主要的虚拟主体就是我们的硬件CPU.内存和IO,那么我们的CPU在全虚拟化模式下如何工作?在半虚拟化下如何工作?在硬件辅助虚拟化模式下如何工作?或着说细分下来,我们又可以分为CPU的全虚拟化技术.半虚拟化技术和硬件辅助虚拟化技术,内存的全虚拟化技术.半虚拟化技术和硬件辅助虚拟化技术以及IO设备的全虚拟化技术.半虚拟化技术和硬件辅助虚拟化技术.本次我们就来说说CPU的全虚拟化技

virtio 半虚拟化驱动 5.1.1

半虚拟化驱动 5.1.1 virtio概述 KVM是必须使用硬件虚拟化辅助技术(如Intel VT-x.AMD-V)的hypervisor,在CPU运行效率方面有硬件支持,其效率是比较高的:在有Intel EPT特性支持的平台上,内存虚拟化的效率也较高.QEMU/KVM提供了全虚拟化环境,可以让客户机不经过任何修改就能运行在KVM环境中.不过,KVM在I/O虚拟化方面,传统的方式是使用QEMU纯软件的方式来模拟I/O设备(如第4章中提到模拟的网卡.磁盘.显卡等等),其效率并不非常高.在KVM中,

xen半虚拟化(准虚拟化)下安装虚拟机

xen半虚拟化(准虚拟化)下安装虚拟机   Xen的安装方法可以参考Xen在centos5.x和centos6.x下安装方法,本文主要以centos5.8和centos6.6为主介绍虚拟机安装放法. Xen全虚拟化下安装虚拟机 Xen 配置文件 Xen半虚拟化下安装虚拟机 常用命令行管理工具 Virt-manager图形工具 Xen全虚拟化下安装虚拟机: 全虚拟化的安装比较简单,可以支接用光盘或ISO文件安装,而半虚拟化不能用光盘或ISO文件安装. 安装方法如下(适用于centos5.x和cen

制作Xen虚拟机半虚拟化和全虚拟化镜像

安装时候已经包含虚拟化,所以启动系统后已经是带xen的内核,已经安装好xen相关软件. xen虚拟机的存储有多种方式,根据官方手册上说的有files,lvm,nfs等.我选择了files作为xen虚拟机的存储,因为这样比较简单,当然会有弱点,后面会说到. 先说如何实现半虚拟化: 检查cpu的指令集是否包含pae,这个应该不成问题,我小黑的cpu是T2370都支持. 1.先dd出一个img文件作为虚拟机的安装空间 dd if=/dev/zero of=/xen/image/xen1.img bs=

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

全虚拟化(Full virtualization), 也称为原始虚拟化技术, 是另一种虚拟化方法. 该模型使用虚拟机协调客户操作系统和原始硬件(见图2). 这里"协调"是一个关键词, 因为VMM在客户操作系统和裸硬件之间用于工作协调. 一些受保护的指令必须由Hypervisor(虚拟机管理程序)来捕获和处理. 因为操作系统是通过Hypervisor来分享底层硬件. 图2. 全虚拟化: 使用Hypervisor分享底层硬件 全虚拟化的运行速度要快于硬件模拟, 但是性能方面不如裸机, 因为

Qemu模拟IO和半虚拟化Virtio的区别以及I/O半虚拟化驱动介绍

QEMU的基本原理和优缺点 基本原理: 使用QEMU模拟I/O的情况下,当客户机中的设备驱动程序(device driver)发起I/O操作请求之时,KVM模块中的I/O操作捕获代码会拦截这次I/O请求,然后经过处理后将本次I/O请求的信息存放到I/O共享页,并通知用户控件的QEMU程序.QEMU模拟程序获得I/O操作的具体信息之后,交由硬件模拟代码来模拟出本次的I/O操作,完成之后,将结果放回到I/O共享页,并通知KVM模块中的I/O操作捕获代码.最后,由KVM模块中的捕获代码读取I/O共享页

全虚拟化与半虚拟化

原文:http://blog.csdn.net/jmilk/article/details/51824935 全虚拟化 不需要对GuestOS操作系统软件的源代码做任何的修改,就可以运行在这样的VMM中 在全虚拟化的虚拟平台中,GuestOS并不知道自己是一台虚拟机,它会认为自己就是运行在计算机物理硬件设备上的HostOS.因为全虚拟化的VMM会将一个OS所能够操作的CPU.内存.外设等物理设备逻辑抽象成为虚拟CPU.虚拟内存.虚拟外设等虚拟设备后,再交由GuestOS来操作使用.这样的Gues

kvm半虚拟化驱动

半虚拟化驱动 host:宿主机(物理机),guest:客户机(虚拟机) 1.使用virtio驱动 linux中的virtio驱动 linux内核一般都自带virtio模块 内核配置文件与virtio相关配置 [[email protected] ~]# grep VIRTIO_ /boot/config-3.10.0-123.el7.x86_64 CONFIG_VIRTIO_BLK=m CONFIG_VIRTIO_NET=m CONFIG_VIRTIO_CONSOLE=m CONFIG_VIRT