珞珈山水BBS武汉大学计算机学院 → 单文区文章阅读

单文区文章阅读 [返回]
发信人: HOPECREAM (HOPECREAM), 信区: C.S
标  题: 【zz】虚拟 Linux---虚拟化方法、架构和实现概述
发信站: BBS 珞珈山水站 (Fri Jan 26 21:39:46 2007)

虚拟 Linux
虚拟化方法、架构和实现概述
 
级别: 中级

M. Tim Jones (mtj@mtjones.com), 顾问工程师, Emulex


2007 年 1 月 15 日

虚拟化的含义丰富,应用广泛。目前虚拟化技术主要关注于服务器虚拟化,即在一个宿主
计算机上提供多个独立操作系统。本文将探索虚拟化背后的思想,然后讨论实现虚拟化的
一些技术。我们还将了解现有的其他一些虚拟化技术,例如 Linux 上操作系统的虚拟化。

进行虚拟化 就是要将某种形式的东西以另外一种形式呈现出来。对计算机进行虚拟化就是
要将计算机以多台计算机或一台完全不同的计算机的形式呈现出来。

虚拟化也可以将多台计算机组合成一台计算机的形式呈现出来。这通常称为服务器聚合或
网格计算。

下面让我们首先来看一下虚拟化的起源。

虚拟化的历史

虚拟化并不是什么新主题;实际上,它的存在已经超过 40 年了。虚拟化技术最早的一些
用法包括 IBM® 7044、麻省理工学院(MIT)在 IBM 704 上开发的 CTSS(Compatibl
e 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-c
ode 是一种机器语言,运行于虚拟机而不是实际硬件。P-code 早在 20 世纪 70 年代就已
在加州大学圣地亚哥分校(UCSD)Pascal 系统上颇有名气了,它将 Pascal 程序编译成 
P-code,然后在一个 P-code 虚拟机上运行。这就使 P-code 程序具有了高度的可移植性
,而且,只要有可用的 P-code 虚拟机,P-code 程序就可以运行。

 Java 虚拟机(JVM)
Java™ 语言对自己的虚拟机沿用了这种 P-code 模型。这样只需要通过简单地移植
 JVM 就可以将 Java 程序广泛地分布到无数的体系架构上。 
 
20 世纪 60 年代对 BCPL(Basic Combined Programming Language)的设计中也采用了相
同的概念,C 语言即由 BCPL 发展而来。在这种用法中,编译器会将 BCPL 代码编译成称
为 O-code 的中间机器代码。接下来的第二个步骤是将 O-code 编译成目标机器的原始语
言。现代编译器所使用的这种模型为将编译器移植到新目标体系结构上提供了很大的灵活
性(通过一种中间语言将前端和后端分隔开来)。

指令集虚拟化

虚拟化最新的发展称为指令集虚拟化,或者二进制转换。在这种模型中,虚拟指令集被转
换成底层硬件的物理指令集,这个过程通常都是动态的。当代码执行时,就会对代码的某
个段进行转换。如果出现分支情况,就会导入新代码集并进行转换。这使它与缓存操作非
常类似,后者是将指令块从内存移动到本地快速缓存中执行。

这种模型最近在 Transmeta 设计的 Crusoe 中央处理单元(CPU)中得到了使用。二进制
转换由 Code Morphing 的专利技术实现。类似的一个例子是完全虚拟化解决方案通过运行
时代码扫描来查找和重定向特权指令(用来解决特定处理器指令集的一些问题)。

 虚拟化和游戏
一篇有关虚拟化的文章如果不提一下 MAME(Multiple-Arcade Machine Emulator),就不
算完整。顾名思义,MAME 就是以前很多 arcade 游戏的一个完整的机器模拟器。除了对这
些游戏中使用的处理器进行虚拟化之外,还可以对整个机器进行虚拟化,包括声音、图形
处理硬件和控制单元。MAME 是一个非常不错的应用程序,不过要理解它们究竟实现了哪些
功能,研读一下它的源代码会非常有帮助。 
 
虚拟化的类型 

实现虚拟化的方法不止一种。实际上,有几种方法都可以通过不同层次的抽象来实现相同
的结果。本节将介绍 Linux 中常用的 3 种虚拟化方法,以及它们相应的优缺点。业界有
时会使用不同的术语来描述相同的虚拟化方法。本文中使用的是最常用的术语,同时给出
了其他术语以供参考。

 未完,剩下的内容点链接看吧(转自IBM)
http://www.ibm.com/developerworks/cn/linux/l-linuxvirt/


--

※ 来源:·珞珈山水BBS站 http://bbs.whu.edu.cn·[FROM: 202.114.121.*]
[返回单文区目录]

武汉大学BBS 珞珈山水站 All rights reserved.
wForum , 页面执行时间:12.628毫秒