虚拟化技术

虚拟化可以理解为将一台物理硬件虚拟成多个虚拟硬件平台。
虚拟机OS看到的物理内存不是从0开始的,而每个内核所使用的物理内存必须是从0开始的地址空间,好分配内存地址;
我们将虚拟机称为guestos;
虚拟机监控软件起名叫:hypervisor;
I/O设备虚拟化:将来自不同的包文进行封装即可;
虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。
最流行的虚拟化方法使用名为hypervisor的一种 软件 ,在 虚拟服务器 和底层硬件之间建立一个抽象层。 VMware 微软 的Virtual PC 是代表该方法的两个商用产品, 而基于核心的 虚拟机 (KVM)是面向 Linux 系统的开源产品。
hypervisor可以捕获 CPU 指令,为指令访问硬件控制器和外设充当中介。因而,完全 虚拟化技术 几乎能让任何一款操作系统不用改动就能安装到 虚拟服务器 上,而它们不知道自己运行在虚拟化环境下。主要缺点是,hypervisor给处理器带来开销。
在完全虚拟化的环境下,hypervisor运行在裸硬件上,充当 主机操作系统 ;而由hypervisor管理的虚拟服务器运行 客户端 操作系统(guest OS)。
IBM 也有自已的虚拟化产品,Z/VM。

我们可以虚拟化一个虚拟机之后,但是这个虚拟机什么都不用做,再买一台设备,专门做iscsi。将硬盘挂载进来,对硬盘进行操作接口。这样能提高物理磁盘io性能。
nat:意味着外面的主机看不到内部的机器,在三层转发给虚拟机;
bridge:意味着将这两个虚拟网卡绑定在物理网卡设备上,并且让该物理设备运行在混杂模式下,无论目标mac是不是自己都要接受;在二层转发给虚拟机。

X86的cpu:最内的环叫做ring环;也叫做环0;里面运行的有系统调用等;
指令分为普通指令和特权指令;
特权指令里面有一部分是敏感指令,可以触发特权指令的执行;操作系统内核将特权指令和敏感指令都自己进行管理;

在虚拟化中,内核是虚拟机的内核;x86cpu的某些敏感指令是不能进行虚拟的;当某个进程需要运行敏感指令的时候会将其交给虚拟机的内核;
虚拟机的内核只能运行在环3上的;单是每一个机器的内核都认为自己运行在环0上;这个时候就需要模拟内存;当其需要运行敏感指令的时候还是真实的物理机进行的;我们只需要将特权指令进行虚拟;这样的话能够保证本系统上,其它虚拟机的安全性;guestos;


综上所述:
1974年,Popek和Goldberg在一篇论文中定义了“经典虚拟化(Classical virtualization)”的基本需求,他们认为,一款真正意义上的VMM至少要符合三个方面的标准:
◇ 等价执行(Equivalient execution):除了资源的可用性及时间上的不同之外,程序在虚拟化环境中及真实环境中的执行是完全相同的;
◇ 性能(Performance):指令集中的大部分指令要能够直接运行于CPU上;
◇ 安全(Safety):VMM要能够完全控制系统资源;任何一台虚拟机都不能越过我们的hostos,而直接执行特权级命令;

1.1 x86平台实现虚拟化技术的挑战
x86处理器有4个特权级别,Ring 0 ~ Ring 3,只有运行在Ring 0 ~ 2 级时,处理器才可以访问特权资源或执行特权指令;运行在 Ring 0级时,处理器可以运行所有的特权指令。x86平台上的操作系统一般只使用Ring 0和Ring 3这两个级别,其中,操作系统运行在Ring 0级,用户进程运行在 Ring 3 级。
1.1.1 特权级压缩(ring compression)
为了满足上面所述的需求,VMM自身必须运行在Ring 0级,同时为了避免GuestOS控制系统资源,GuestOS不得不降低自身的运行级别而运行于Ring 3(Ring 1、2 不使用)。
此外,VMM使用分页或段限制的方式保护物理内存的访问,但是64位模式下段限制不起作用,而分页又不区分Ring 0,1,2。为了统一和简化VMM的设计,GuestOS只能和用户进程一样运行在 Ring 3。VMM必须监视GuestOS对GDT、IDT等特权资源的设置,防止GuestOS运行在Ring 0级,同时又要保护降级后的GuestOS不受Guest进程的主动攻击或无意破坏。
1.1.2 特权级别名(Ring Alias)
设计上的原因,操作系统假设自己运行于ring 0,然而虚拟化环境中的GuestOS实际上运行于Ring 1或Ring 3,由此,VMM必须保证各GuestOS不能得知其正运行于虚拟机中这一事实,以免其打破前面的“等价执行”标准。例如,x86处理器的特权级别存放在CS代码段寄存器内,GuestOS却可以使用非特权PUSH指令将CS寄存器压栈,然后POP出来检查该值;又如,GuestOS在低特权级别时读取特权寄存器GDT、LDT、IDT和TR时并不发生异常。这些行为都不同于GuestOS的正常期望。
1.1.3 地址空间压缩(Address Space Compression)
地址空间压缩是指VMM必须在GuestOS的地址空间中保留一段供自己使用,这是x86虚拟化技术面临的另一个挑战。VMM可以完全运行于自有的地址空间,也可以部分地运行于GuestOS的地址空间。前一种方式,需在VMM模式与GuestOS模式之间切换,这会带来较大的开销;此外,尽管运行于自己的地址空间,VMM仍需要在GuestOS的地址空间保留出一部分来保存控制结构,如IDT和GDT。无论是哪一种方式,VMM必须保证自己用到地址空间不会受到GuestOS的访问或修改。
1.1.4 非特权敏感指令
x86使用的敏感指令并不完全隶属于特权指令集,VMM将无法正确捕获此类指令并作出处理。例如,非特权指令SMSW在寄存器中存储的机器状态就能够被GuestOS所读取,这违反了经典虚拟化理论的要求。
1.1.5 静默特权失败(Silent Privilege Failures)
x86的某些特权指令在失败时并不返回错误,因此,其错误将无法被VMM捕获,这将导致其违反经典虚拟化信条中的“等价执行”法则。
1.1.6 中断虚拟化(Interrupt Virtualization)
虚拟化环境中,屏蔽中断及非屏蔽中断的管理都应该由VMM进行;然而,GuestOS对特权资源的每次访问都会触发处理器异常,这必然会频繁屏蔽或启用中断,如果这些请求均由VMM处理,势必会极大影响整体系统性能。
1.2  X86平台虚拟化
完整意义上的计算机由硬件平台和软件平台共同组成。根据计算机体系结构理论,其硬件平台包括CPU、内存和各种I/O设备;而软件平台则包括BIOS、操作系统、运行时库及各种应用程序等。对于主机虚拟化技术来讲,其主要负责虚拟硬件平台及BIOS,而操作系统、运行时库及各种应用程序可以使用以往在物理平台上各种现有技术及产品。

CPU引进了硬件虚拟化技术:
CPU: 
Intel VT-x:在硬件级别直接加了ring -1级别,从而有了特权ring -1级别;guest OS运行在环0上没有问题,hostos上运行的是我们特权指令;而在环0上什么指令都不放;cpu在硬件级别就能管理虚拟机的特权指令了;
AMD AMD-V:

MMU: GUESTOS将VA转换为PA,最终还要转换为HA。

连续转换两次太麻烦了,intel的amdcpu又实现了mmu虚拟化,称为shadow;直接将VA转换为了HA;
INTEL的技术叫做EPT,AMD的技术叫做NPT;

最终要将MMU的转换地址保存都TLB中;可以给每个虚拟机进行编号;每个编号打一个标签,起的名字叫tag。这样能够提高TLB的命中率;
这都是新cpu才有的技术。
上面的虚拟化技术,我们称为full 虚拟化技术。

可以把驱动程序做成系统调用,由虚拟机的内核直接跟系统调用打交道,这样就避免了hostos的其它模块再做处理了。这就是虚拟化的独到之处。这种虚拟化技术,我们称为半虚拟化技术。
半虚拟化的性能要高于全虚拟化技术。
cpu不支持虚拟化的技术称为模拟虚拟化;
cpu支持的虚拟化技术我们称为:HVM(Hypervisor call)(cpu辅助的虚拟化技术);

通常我们把这种提供系统调用的技术叫做:hypercall;明确说明这些系统调用是给虚拟机使用的。windows不允许修改内核,那就不能在半虚拟化技术中运行。

pv ON HVM:只是使用了io的虚拟化技术;
还有一种技术叫做io的透传技术;如下图所示:

虚拟化技术:
有宿主机的vmm;
虚拟化模型如下图所示:


xen这种xen不管理io设备,是通过一台管理机器进行管理;这种情况下xen是一种半虚拟化程序。
完全虚拟化与半虚拟化的区别是完全虚拟化的内核不需要进行修改即可。
QEMU就是个虚拟机软件,还可以跨越平台进行虚拟;
QEMU模拟创建虚拟硬盘,各种格式都支持。
通常我们使用xen的时候会结合qemu一块使用。xend/xm工具可以帮我们管理一个虚拟机;基于xen的图形化管理工具,比如说openstack;所谓的openstack就是个批量管理xen虚拟机的工具;
其实除了xen之外还有不下数十种管理工具。

virsh通过管理工具,能够帮助我们管理kvm、xen、qemu。

虚拟化技术之kvm
kvm:kernel-base  virtual machine
基于内核的虚拟机。KVM是linux内核的一个模块。kvm能够让内核成为hypervisor。只不过这个虚拟机还能够kill掉;kvm只不过扩展了内核的功能,让其成为一个hypervisior;所以在其之上
还需要运行一个操作系统。KVM使用的是完全虚拟化技术;
qemu对cpu的模拟仍然是在内核空间进行模拟的;而kvm使用的是内核模块,它比qemu模拟出来的性能更好。所以通常我们使用的是kvm+qemu。而且kvm需要跑在64位的平台上面。
而kvm在内核2.6.20版本之后,就放入了内核里面。

红帽在6.0之后只支持kvm;
思杰:仅次于vmware,xen的商用是由思杰公司提供的;
windows的虚拟化技术起的名字叫做hyper-v。
kvm里面引入另外一种技术:virtio virio说白了就是io技术的半虚拟化技术。同时kvm也支持透传技术。

如果想在windows里面跑linux的程序,可以使用cywin,使用linux环境跑hadoop。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值