1、定义
前端
虚拟化是指经过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每一个逻辑计算机可运行不一样的操做系统,而且应用程序均可以在相互独立的空间内运行而互不影响,从而显著提升计算机的工做效率。后端
虚拟化技术能够扩大硬件的容量,简化软件的从新配置过程。CPU的虚拟化技术能够单CPU模拟多CPU并行,容许一个平台同时运行多个操做系统,而且应用程序均可以在相互独立的空间内运行而互不影响,从而显著提升计算机的工做效率。缓存
2、虚拟化的类别服务器
虚拟化的类别有不少,定义也很宽泛;没法作到全面详述。这里将简单说明:网络
一、模拟:emulation(底层和模拟架构不须要一致);经过软件模拟是须要模拟环Ring0/1/2/3层;可是性能差;因此使用相对较少。架构
硬件-->Host-->VMM(emulation)-->Virtulization host
frontend
二、彻底虚拟化(full-virtualization):只虚拟出环ring0(以CPU虚拟化来讲明)jvm
BT:二进制翻译技术(Binary Translate);将模拟的CPU直接翻译成特权指令;限定虚拟结构平台和底层物理架构必须保持一致。基于软件的彻底虚拟化。ide
优势:不用修改GuestOS内核能够直接使用;应用普遍。性能
缺点:在VMM捕获特权指令和翻译过程会致使性能的降低。
硬件辅助虚拟化:5个指令环;在环0的底层加了环-1;环0的特权指令给了环-1;HVM(hardware virtulization machine);属于硬件的彻底虚拟化。
三、半虚拟化(para-virtulization):Guest明确知道本身运行在虚拟机上;;在执行特权指令时直接向hyper call调用;省去了特权指令的翻译过程。
优势:相对彻底虚拟化;性能高;省去了特权指令的翻译过程。
缺点:须要对GuestOS内核的修改;应用有限制。
四、OS级别的虚拟化:硬件-->OS kernel-->多个用户空间
五、库虚拟化:wine
六、应用程序虚拟化:jvm
虚拟化的实现方式:
两种类型:
Type-I:Hypervisor;在虚拟机的管理上更加的完全和可靠。
Type-II:宿主机运行在硬件上;能够依赖宿主机的各类管理软件进行虚拟机管理。
3、内存(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的支持。
4、I/O虚拟化的方式
模拟(彻底虚拟):彻底使用软件来模拟真实硬件;模拟一般硬件;例如键盘鼠标;经过焦点捕获;焦点被哪一个主机捕获就被哪一个主机使用。性能不好。
半虚拟化:对硬件驱动由前端(IO frontend)直接转到后端(IO backend)调用;一般仅适用于硬盘和网卡。性能高。
IO-through:IO透传;直接分配给虚拟机物理设备;例如直接分配一个硬盘或网卡给虚拟机;须要硬件具有IO透传技术;在Xen下由Dom0分配;可是访问使用直接使用;不通过Dom0。须要硬件支持。
I/O具体工做模式:
VMM:对IO的驱动有三种模式:
自主VMM:由VMM自行提供驱动和控制台;
混合VMM:借助于OS提供驱动;
依赖于外部OS实现特权域
自我提供特权域
寄宿式VMM:
5、虚拟化网络
bridge:把原宿主机上的网卡当交换机;而后虚拟出一个桥来接收发往宿主机的数据包。
isolation mode:仅guest之间通讯;不与外部网络和宿主机通讯。
routed mode:与外部主机通讯;依赖于静态路由指定到各Guest需通过pnet0。
host-only:不与外部主机通讯。
nat:地址转换;在虚拟网卡和物理网卡之间创建一个nat转发服务器;对数据包进行源地址转换。
到此基本虚拟化基础以详解完成。
若有错误;恳请纠正。