天天看点

Virtualization-Cpu/Memory/IO虚拟化详解

一、定义

虚拟化是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。cpu的虚拟化技术可以单cpu模拟多cpu并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

二、虚拟化的类别

虚拟化的类别有很多,定义也很宽泛;无法做到全面详述。这里将简单说明:

1、模拟:emulation(底层和模拟架构不需要一致);通过软件模拟是需要模拟环ring0/1/2/3层;但是性能差;所以使用相对较少。

硬件-->host-->vmm(emulation)-->virtulization host

Virtualization-Cpu/Memory/IO虚拟化详解

2、完全虚拟化(full-virtualization):只虚拟出环ring0(以cpu虚拟化来说明)

bt:二进制翻译技术(binary translate);将模拟的cpu直接翻译成特权指令;限定虚拟结构平台和底层物理架构必须保持一致。基于软件的完全虚拟化。

优点:不用修改guestos内核可以直接使用;应用广泛。

缺点:在vmm捕获特权指令和翻译过程会导致性能的下降。

Virtualization-Cpu/Memory/IO虚拟化详解

硬件辅助虚拟化:5个指令环;在环0的底层加了环-1;环0的特权指令给了环-1;hvm(hardware virtulization machine);属于硬件的完全虚拟化。

Virtualization-Cpu/Memory/IO虚拟化详解

3、半虚拟化(para-virtulization):guest明确知道自己运行在虚拟机上;;在执行特权指令时直接向hyper call调用;省去了特权指令的翻译过程。

优点:相对完全虚拟化;性能高;省去了特权指令的翻译过程。

缺点:需要对guestos内核的修改;应用有限制。

Virtualization-Cpu/Memory/IO虚拟化详解

4、os级别的虚拟化:硬件-->os kernel-->多个用户空间

Virtualization-Cpu/Memory/IO虚拟化详解

5、库虚拟化:wine

6、应用程序虚拟化:jvm

虚拟化的实现方式:

两种类型:

type-i:hypervisor;在虚拟机的管理上更加的彻底和可靠。

type-ii:宿主机运行在硬件上;可以依赖宿主机的各种管理软件进行虚拟机管理。

Virtualization-Cpu/Memory/IO虚拟化详解

三、内存(memory)虚拟化

内存虚拟化是虚拟机实现中的重要部分。在虚拟机中,虚拟出来的guest os和host os用的是相同的物理内存,却不能让它们相互影响到。如果os在物理机上运行,只要os提供页表,mmu会在访存时自动做虚拟地址(virtual address, va)到物理地址(physical address, pa)的转化。而如果虚拟机上运行时,guest os经过地址转化到的“物理地址”并不是真实物理内存上的地址(gva-->gpa),因此还需要使用软件将其转化为真实物理内存地址(hpa)。也就是说guest os要访问va需要经过gva-->gpa-->hpa的转化。

mmu virtualization:

guest完成gva-->gpa第一层转化,硬件同时完成gpa到hpa这第二层转化。第二层转化对于guest os来说是透明的。guest os访问内存时和在物理机运行时是相同的,所以可以实现全虚拟化。这种特性intel和amd都有支持。intel称之为extended page tables (ept),amd称之为nested page tables (npt)。其优点是hypervisor节省了工作,缺点是需要硬件支持。

tlb virtualization:tagged tlb

tlb:转换后援存储器;原生只存储va-->pa的对应关系。所以在虚拟内存中的两次转换会导致tlb的命中率失效。致使性能降低。所以使用tagged tlb,它缓存了guest对象和gva-->hpa的对应关系。需要cpu的支持。

四、i/o虚拟化的方式

模拟(完全虚拟):完全使用软件来模拟真实硬件;模拟通常硬件;例如键盘鼠标;通过焦点捕获;焦点被哪个主机捕获就被哪个主机使用。性能很差。

半虚拟化:对硬件驱动由前端(io frontend)直接转到后端(io backend)调用;通常仅适用于硬盘和网卡。性能高。

io-through:io透传;直接分配给虚拟机物理设备;例如直接分配一个硬盘或网卡给虚拟机;需要硬件具备io透传技术;在xen下由dom0分配;但是访问使用直接使用;不经过dom0。需要硬件支持。

i/o具体工作模式:

Virtualization-Cpu/Memory/IO虚拟化详解

vmm:对io的驱动有三种模式:

自主vmm:由vmm自行提供驱动和控制台;

混合vmm:借助于os提供驱动;

依赖于外部os实现特权域

自我提供特权域

寄宿式vmm:

五、虚拟化网络

bridge:把原宿主机上的网卡当交换机;然后虚拟出一个桥来接收发往宿主机的数据包。

Virtualization-Cpu/Memory/IO虚拟化详解

isolation mode:仅guest之间通信;不与外部网络和宿主机通信。

Virtualization-Cpu/Memory/IO虚拟化详解

routed mode:与外部主机通信;依赖于静态路由指定到各guest需经过pnet0。

    host-only:不与外部主机通信。

Virtualization-Cpu/Memory/IO虚拟化详解

nat:地址转换;在虚拟网卡和物理网卡之间建立一个nat转发服务器;对数据包进行源地址转换。

Virtualization-Cpu/Memory/IO虚拟化详解

到此基本虚拟化基础以详解完成。

如有错误;恳请纠正。

继续阅读