Hypervisor Type 1又分为 全虚拟化 跟 半虚拟化 以下解说
Ring
在还未解说CPU虚拟化之前先解释一个东西就是Ring(环),在Intel CPU的系统运行下可以区分成Ring 0,Ring 1,Ring 2和Ring 3.Ring 0拥有最高的权限,通常是由系统核心才会有Ring0的权限,Ring 0可以直接和硬体沟通读取IO,CPU,Memory与周边装置.其次是Ring 1,以此类推.一般Kernel,driver会存在Ring 0.一般AP存在Ring 3,一般的作业系统也只运用到Ring 0和Ring3.采取这种方式的优点是一般运行的程式没有办法直接与硬体沟通,所以不会有像Window 3.1时一样的状况发生,一个程式就能把整个系统摧毁(Crash)掉
VMM (Virtual Machine Monitor)
一个机台要能同时执行很多作业系统时不能像是传统的方式让OS的核心存放在Ring0.取而代之的就是VMM((Virtual Machine Monitor)也可以称作Hybervisor.也为了虚拟化的资源分配管理,所以必须有一个东西来管理所有虚拟化的作业系统(Guest OS).也就是所谓的VMM(Virtual Machine Monitor).
此时的VMM主要工作为
‧模拟出一个完整的硬体环境给每一个Guest OS
‧分配硬体支援给每一个Guest OS
‧每一个Guest OS都是独立出来不会被彼此影响的
1 - Full Virtualization使用的是- Binary Translation
也正因为Intel CPU架构的关系,不少的CPU指令必须执行在Ring 0底下,而传统的作业系统核心也必须放在Ring 0让他们能直接存取硬体.所以一开始的虚拟化几乎不能在X86的系统上使用.但是VMware使用了一种方式让虚拟化能够执行在X86的系统上.他们使用一种称为Binary Translation加上direct execution的方式,所谓的Binary translation就是将原本要执行不能虚拟化的指令(nonvirtualizable instructions)VMM会转换成另一种语法,然后再交由VMM去执行.就像是Guest OS要将资料写入硬碟中,但是其实Guest OS的硬碟可能只是硬碟中的一块磁碟区块(partition)或是档案(Loop file),所以VMM会把他的请求转换成另一种方式再来向硬体提出要求.而不再是用原本的指令去执行了.至于direct execution是一般性的指令不需要在Ring0才能执行就直接可以向硬体提出请求.
这样的缺点是会造成效率的低落,但好处是虚拟出来的作业系统(Guest OS)并不知道有VMM 的存在,他会以为自己拥有整个机器,而且虚拟出来的作业系统(Guest OS)也不需要修改核心去配合VMM.加上VMM 会去虚拟整个机器包括了虚拟化的BIOS,devices 和memory的管理,.而且每一个虚拟出来的作业系统(Guest OS)都是独立而且安全性高不会受到其他虚拟出来的作业系统(Guest OS)影响.
目前采用这种方式的有 VMware's全系列virtualization products 和 Microsoft Virtual Server.
2另一种需要修改作业系统的核心才能支援- Paravirtualization
刚才有说明为什么在一般x86系统下没有办法做虚拟化,大部分的原因是不能虚拟化的指令(nonvirtualizable instructions)必须直接在Ring 0执行.但是Paravirtualization使用了另一种方式,修改虚拟化作业系统(Guest OS)的核心,让虚拟的作业系统(Guest OS)可以直接将不能虚拟化的指令(nonvirtualizable instructions)自动转换成VMM可以执行的指令(hypercall ),再由VMM去向硬体提出请求.所以像是(Windows 2000/XP)不能去修改它的核心(Microsoft也不愿意让别人来修改它的核心),所以无缘使用Paravirtualization.而所谓的hypercall就像是OS kernel的syscall只不过hypercall是针对hypvisor(VMM)的.
Paravirtualization + Intel VT或者AMD-V
在没有VT的时代VMM是直接载入在Ring 0里面,Dom0的kernel则是被放在Ring1(Dom0是第一个在Xen底下运行的虚拟机器).后来产生出的DomU也是存放在Ring1(需为Para-Virtualized,没有VT的支援Xen不支援full-Virtualized).不过一般的AP还是运行在Ring 3.也正因为如此Para-Mode的Guest OS必须知道VMM的存在.此时是不支援Full-Mode的.后来有了VT这一项技术.VMM和Guest OS(Para/Full-Mode)都可以直接执行在Ring0运行.不过VMM是存在比Guest OS还要低的一层.
Root Mode Privilege Levels.不能虚拟化的指令(nonvirtualizable instructions)会自动被hypervisor截取不需要再经过binary translation或paravirtualization的模式转换.
目前采用这种方式的有 Xen,KVM,Hyper V ,OpenVZ