Bomi
分类: 虚拟化
2012-02-05 11:48:18
传统的计算机主机(Server,Desktop,Laptop)安装完一种作业系统(UNIX/类UNIX 或非UNIX:如Windows ...) ,就只能提供其作业系统所能提供的服务,我们不能在同一主机上同时提供 Windows 的服务又同时提供 Linux 的服务,或者其它作业系统的服务.也因此虚拟化由此诞生.而虚拟化的目的就是为了要让多个作业系统同时运作在同一台机台上.
当前虚拟化可以分成下面这几种.
1- Emulation 虚拟出来一个与活动完全不同的硬件环境
2- Full Virtualization 使用的是 - Binary Translation
3- 另一种需要修改作业系统的核心才能支持 - Paravirtualization
4- Hardware-assisted virtualization 这也是最新的方式需要有硬件(CPU) 的支持 - Intel VT 或者 AMD-V
5- Application-Level Virtualization 不需要 VT 或是额外的硬件来支持
上面的种类的产品一开始会让用户搞不清楚到底是要用什么产品,这一类的产品多到不胜枚举.基本上企业要用的就是可以全虚拟化的环境如 Full Virtualization 或是 Paravirtualization 这一类像是 VMware ESX 或是 XenServer.至於学生而言可以在原先的 Windows 系统下使用 Linux 或是其它非 Windows 系统.就可以直接选择 Application-Level Virtualization 像是VMware Server 等的产品.
Ring
在还未解说 CPU 虚拟化之前先解释一个东西就是 Ring(环), 在 Intel x86 系统结构下为了保护指令的运行,提供了 4 种不同Privilege 特权级别的指令.也就是俗称的 Ring,可以区分成为 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 - Emulation
这一类的虚拟化,比较像是藉由应用程序虚拟出来一个与活动完全不同的硬件环境.像是一些可以在 PC 环境上仿真出来的游戏机之类的,或是通过虚拟的硬件环境去仿真 smart phones 以及 PDAs .可以提供给程序开发者在 PC 的环境下开发出smart phones 或是 PDAs 的应用程序.
2- 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.
3 - 另一种需要修改作业系统的核心才能支持 - 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)的.
当前采用这种方式的有 open source Xen project.
4 - Hardware-assisted virtualization 这也是最新的方式需要有硬件(CPU) 的支持 - 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 的模式转换.
当前 Intel 推出含有 VT 的技术包括了下面几项.
VT-x 这是属於 IA-32 和 Intel 64 结构的
VT-i 这是属於 Itanium 结构的
VT-d refers to Intel VT for Directed I/O
当前 Intel 推出的 CPU 并未包过下面这项,这是未来 Intel 将计画推出的.
VT-c refers to Intel VT for Connectivity
5 - Application-Level Virtualization
还有一种是 Application-Level Virtualization 他是结构在其它作业系统上的,像是 VMware Server 和 VirtualBox.它 的结构很简单,它只是一个作业系统下的一个应用程序,优点是它不需要 VT 或是额外的硬件来支持,但相对的缺点就是他的性能相对的不佳.它提供一个全虚拟化的结构虚拟出来的作业系统几乎都可以包括,像是 Windows, Linux ,Netware 都有支持,如果你没有特别的需求可以考虑这一类的虚拟化方式.它像是其它虚拟化的环境为每个虚拟出来的 Guest OS 提供了独立不受其它的 Guest OS 影响的独立环境,但整体是你的最原始的作业系统没有被破坏.做出来的 Guest Os 还可以轻易的移到不同的机台下继续使用.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
蝴蝶
6th,Aug.2009 16:00 am GMT+1 最后整编
The e. Publishing Dept. of Morpho Studio (Spruce Int. Found. )