武汉金信润天
免费服务热线:18672341218
微信在线咨询:18672341218
武汉金信润天:027-87538126
扫一扫
关注我们
虚拟化技术
时间:2017-08-23 18:35    浏览次数:     发布者:润天教育    来源:金信润天    
0
虚拟化技术
进行虚拟化就是要将某种形式的东西以另外一种形式呈现出来。对计算机进行虚拟化就是要将计算机以多台计算机或一台完全不同的计算机的形式呈现出来。虚拟化也可以将多台计算
机组合成一台计算机的形式呈现出来。这通常称为服务器聚合或网格计算.
虚拟化的历史
虚拟化并不是什么新主题;实际上,它的存在已经超过 40 年了。虚拟化技术最早的一些用法包括 IBM® 7044、麻省理工学院(MIT)在 IBM 704 上开发的 CTSS(Compatible Time Sharing System)以及曼彻斯特大学的 Atlas 项目(世界上最早的超级计算机之一),这些都是请求页面调度和监管进程调用的先驱。
硬件虚拟化
IBM 早在 20 世纪 60 年代开发 System/360™ Model 67 大型机时就认识到了虚拟化的重要性。Model 67 通过 VMM(Virtual Machine Monitor)对所有的硬件接口都进行了虚拟化。在早期计算中,操作系统被称为supervisor。能够在其他操作系统上运行的操作系统被称为 hypervisor(这个术语是在 20 世纪 70 年代出现的)。
VMM 可以直接在底层硬件上运行,允许运行多个虚拟机(VM)。每个 VM 都可以运行一个自己私有操作系统的实例 —— 在早些时候,这称为 CMS(或 Conversational Monitor System)。之后 VM 继续发展,现在您可以在 System z9™ 大型机上发现 VM。这提供了很好的向后兼容性,甚至是对 System/360 产品线的兼容性。
处理器虚拟化
虚拟化早期的另外一种用法(在本例中是对处理器的仿真)是 P-code(或伪码)机。P-code 是一种机器语言,运行于虚拟机而不是实际硬件。P-code 早在 20 世纪 70 年代就已在加州大学圣地亚哥分校(UCSD)Pascal 系统上颇有名气了,它将 Pascal 程序编译成 P-code,然后在一个 P-code 虚拟机上运行。这就使 P-code 程序具有了高度的可移植性,而且,只要有可用的 P-code 虚拟机,P-code 程序就可以运行。
20 世纪 60 年代对 BCPL(Basic Combined Programming Language)的设计中也采用了相同的概念,C 语言即由 BCPL 发展而来。在这种用法中,编译器会将 BCPL 代码编译成称为 O-code 的中间机器代码。接下来的第二个步骤是将 O-code 编译成目标机器的原始语言。现代编译器所使用的这种模型为将编译器移植到新目标体系结构上提供了很大的灵活性(通过一种中间语言将前端和后端分隔开来)。
指令集虚拟化
虚拟化最新的发展称为指令集虚拟化,或者二进制转换。在这种模型中,虚拟指令集被转换成底层硬件的物理指令集,这个过程通常都是动态的。当代码执行时,就会对代码的某个段进行转换。如果出现分支情况,就会导入新代码集并进行转换。这使它与缓存操作非常类似,后者是将指令块从内存移动到本地快速缓存中执行。
这种模型最近在 Transmeta 设计的 Crusoe 中央处理单元(CPU)中得到了使用。二进制转换由 Code Morphing 的专利技术实现。类似的一个例子是完全虚拟化解决方案通过运行时代码扫描来查找和重定向特权指令(用来解决特定处理器指令集的一些问题)。
虚拟化的类型
实现虚拟化的方法不止一种。实际上,有几种方法都可以通过不同层次的抽象来实现相同的结果。本节将介绍 Linux 中常用的 3 种虚拟化方法,以及它们相应的优缺点。业界有时会使用不同的术语来描述相同的虚拟化方法。本文中使用的是最常用的术语,同时给出了其他术语以供参考。
硬件仿真
毫无疑问,最复杂的虚拟化实现技术就是硬件仿真。在这种方法中,可以在宿主系统上创建一个硬件 VM 来仿真所想要的硬件,如图 1 所示。
图 1. 硬件仿真使用 VM 来模拟所需要的硬件
 
正如您所能预见的一样,使用硬件仿真的主要问题是速度会非常慢。由于每条指令都必须在底层硬件上进行仿真,因此速度减慢 100 倍的情况也并不稀奇。若要实现高度保真的仿真,包括周期精度、所仿真的 CPU 管道以及缓存行为,实际速度差距甚至可能会达到 1000 倍之多。
硬件仿真也有自己的优点。例如,使用硬件仿真,您可以在一个 ARM 处理器主机上运行为 PowerPC® 设计的操作系统,而不需要任何修改。您甚至可以运行多个虚拟机,每个虚拟器仿真一个不同的处理器。
完全虚拟化
完全虚拟化(full virtualization),也称为原始虚拟化,是另外一种虚拟化方法。这种模型使用一个虚拟机,它在客户操作系统和原始硬件之间进行协调(参见图 2)。“协调”在这里是一个关键,因为 VMM 在客户操作系统和裸硬件之间提供协调。特定受保护的指令必须被捕获下来并在 hypervisor 中进行处理,因为这些底层硬件并不由操作系统所拥有,而是由操作系统通过 hypervisor 共享。
图 2. 完全虚拟化使用 hypervisor 来共享底层硬件
 
虽然完全虚拟化的速度比硬件仿真的速度要快,但是其性能要低于裸硬件,因为中间经过了 hypervisor 的协调过程。完全虚拟化的最大优点是操作系统无需任何修改就可以直接运行。惟一的限制是操作系统必须要支持底层硬件(例如 PowerPC)。
超虚拟化
超虚拟化(paravirtualization)是另外一种流行的虚拟化技术,它与完全虚拟化有一些类似。这种方法使用了一个 hypervisor 来实现对底层硬件的共享访问,还将与虚拟化有关的代码集成到了操作系统本身中(参见图 3)。这种方法不再需要重新编译或捕获特权指令,因为操作系统本身在虚拟化进程中会相互紧密协作。
图 3. 超虚拟化与客户操作系统共享进程
 
正如前面介绍的一样,超虚拟化技术需要为 hypervisor 修改客户操作系统,这是它的一个缺点。但是超虚拟化提供了与未经虚拟化的系统相接近的性能。与完全虚拟化类似,超虚拟化技术可以同时支持多个不同的操作系统。
操作系统级的虚拟化
我们要介绍的最后一种技术是操作系统级的虚拟化,它使用的技术与前面所介绍的有所不同。这种技术在操作系统本身之上实现服务器的虚拟化。这种方法支持单个操作系统,并可以将独立的服务器相互简单地隔离开来(参见图 4)。
图 4. 操作系统级虚拟化实现服务器的隔离
 
操作系统级的虚拟化要求对操作系统的内核进行一些修改,但是其优点是可以获得原始性能。
为什么虚拟化如此重要?
在了解目前 Linux 可以使用的虚拟化方法之前,让我们先来了解一下虚拟化的优点。
从商业角度来看,使用虚拟化技术有很多原因。大部分原因都可以归结于服务器的巩固(server consolidation)。简单来说,如果您可以对一个服务器上多个未经充分利用的系统进行虚拟化,由于服务器的数量少了,显然可以节省大量电力、空间、制冷和管理成本。由于很难确定服务器的利用情况,虚拟化技术支持称为动态迁移的技术。动态迁移(Live migration)允许操作系统及其应用程序迁移到新的服务器上,从而实现负载在可用硬件上的均衡。虚拟化技术对于开发人员来说也非常重要。Linux 内核占据了一个单一的地址空间,这意味着内核或任何驱动程序的故障都会导致整个操作系统的崩溃。虚拟化技术意味着您可以运行多个操作系统,如果其中一个系统由于某个 bug 而崩溃了,那么 hypervisor 和其他操作系统都依然可以继续运行。这可以使内核的调试非常类似于用户空间应用程序的调试。
相关推荐
武汉分公司地址:湖北省武汉市洪山区虎泉街凯乐桂园A座9层(虎泉地铁站A出口右手边)
咨询报名电话:18672341218(微信同号)   武汉金信润天:027-87538126   
教学就业监督电话:027-87538125    网站地图   备案号:鄂ICP备15010789号-2
姓名
手机
电话咨询 在线咨询 QQ客服