1.1 虚拟化技术的发展历史
计算机的运行通常都离不开合适的操作系统,而传统的操作系统都必须运行在一个具有特定的指令集(实现它的处理器)、内存系统和I/O系统的物理计算机上。随着计算机技术的飞速发展,计算机的系统架构、操作系统以及应用程序都变得越来越复杂,比如安装了Linux的计算机无法直接运行Windows的应用程序,同样安装了Windows的计算机也无法直接运行Linux的应用程序,更不用说在Linux上安装Windows和在Windows上安装Linux了。另外,传统操作系统上由于应用程序之间无法真正相互隔离,因此一个应用程序的错误可能导致整个系统的崩溃。这些都推动了90年代末期开始的新一轮虚拟计算机(Virtual Machine)技术的发展。一些基于x86架构的商用虚拟机产品的推出,如VMware Workstation、Virtual PC等,使得虚拟计算机技术的发展到了一个新的阶段。
进入21世纪后,计算机领域出现了两大新的虚拟化应用场景,即云计算和万物互联,进一步极大促进了虚拟化技术的发展和应用落地。云计算技术的发展,使得作为标准化产品的虚拟机作为服务成为各家IT企业的选择,大大降低了企业自建服务器的IT服务成本和投入,成为千千万万大中小型公司的IT服务的首选。万物互联更是把100亿数量级的嵌入式设备整合在一起,并通过云连接起来。虚拟化技术也因此在嵌入式领域得到广泛的应用,以此整合各种单一功能设备,通过共同的网络接口接入互联网,构建更加高效、低成本的万物互联系统。
虚拟计算机由IBM公司在20世纪六七十年代提出并运用于VM/370系统,以共享昂贵的Main Frame系统。如图1-1a所示,虚拟化技术通过在现有平台(机器)上添加一层虚拟机监控器(Virtual Machine Monitor,VMM)软件实现对系统的虚拟化,如虚拟处理器、虚拟内存管理器(MMU)和虚拟I/O系统等。虚拟机监控器也被称作超级管理者(Hypervisor),Hypervisor逐渐取代VMM成为主流叫法(在本书中,Hypervisor和VMM这两种说法并存,两者含义相同),对应操作系统中的(普通)管理者(Supervisor),但是Hypervisor比Supervisor权力更大、更加基础。从应用程序的角度看,程序运行在虚拟机上与运行在其对应的实体计算机上一样,都运行在某一特定的指令体系(Instruction Set Architecture,ISA)和/或操作系统上,如图1-1b所示。
图1-1 Hypervisor将一个物理的ISA转化成一个虚拟机
根据应用程序、操作系统和硬件平台之间的关系与Hypervisor向客户机(Guest)抽象的层次不同,威斯康星大学麦迪逊分校电子与计算机工程系的James E. Smith教授和IBM公司的Ravi Nair将基于图1-2a所示指令体系接口抽象的虚拟机称为系统虚拟机(System VM),而将基于图1-2b所示应用程序二进制接口(Application Binary Interface,ABI)抽象的虚拟机称为进程虚拟机(Process VM)。Smith和Nair认为从本质上说,现代OS所具有的多进程(Multiprogramming)机制提供给用户的独立进程就已经是一个完整的虚拟机(进程虚拟机)[1]。进程虚拟机的发展随着现代OS的发展而发展已经相当成熟,而系统虚拟机技术则直到20世纪90年代才开始迅猛发展。
图1-2 不同层面的抽象