1.7.5 虚拟机

OS/360的最早版本是纯粹的批处理系统。然而,有许多360用户希望能够在终端上交互工作,于是在IBM公司内外的一些研究小组决定为它编写一个分时系统。在后来推出了正式的IBM分时系统,TSS/360。但是它非常庞大,运行缓慢,于是在花费了约五千万美元的研制费用后,该系统最后被弃之不用(Graham,1970)。但是在麻省剑桥的一个IBM研究中心开发了另一个完全不同的系统,这个系统被IBM最终用作为产品。它的直接后续,称为z/VM,目前在IBM的现有大型机上广泛使用,zSeries则在大型公司的数据中心中广泛应用,例如,作为e-commerce服务器,它们每秒可以处理成百上千个事务,并使用达数百万G字节的数据库。

1.VM/370

这个系统最初被命名为CP/CMS,后来改名为VM/370(Seawright和MacKinnon,1979)。它是源于如下一种机敏的观察。分时系统应该提供这些功能:(1)多道程序,(2)一个比裸机更方便的、有扩展界面的计算机。VM/370存在的目的是将二者彻底地隔离开来。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

这个系统的核心称为虚拟机监控程序(virtual machine monitor),它在裸机上运行并且具备了多道程序功能。该系统向上层提供了若干台虚拟机,如图1-28所示。它不同于其他操作系统的地方是:这些虚拟机不是那种具有文件等优良特征的扩展计算机。与之相反,它们仅仅是裸机硬件的精确复制品。这个复制品包含了内核态/用户态、I/O功能、中断及其他真实硬件所应该具有的全部内容。

阅读 ‧ 电子书库
图 1-28 配有CMS的VM/370结构

由于每台虚拟机都与裸机相同,所以在每台虚拟机上都可以运行一台裸机所能够运行的任何类型的操作系统。不同的虚拟机可以运行不同的操作系统,而且实际上往往就是如此。在早期的VM/370系统上,有一些系统运行OS/360或其他大型批处理或事务处理操作系统中的某一个,而另一些虚拟机运行单用户、交互式系统供分时用户们使用,这个系统称为会话监控系统(Conversational Monitor System,CMS)。后者在程序员中很流行。

当一个CMS程序执行系统调用时,该调用被陷入到其虚拟机的操作系统上,而不是VM/370上,似乎它运行在实际的机器上,而不是在虚拟机上。CMS然后发出普通的硬件I/O指令读出虚拟磁盘或其他需要执行的调用。这些I/O指令由VM/370陷入,然后,作为对实际硬件模拟的一部分,VM/370完成指令。通过对多道程序功能和提供扩展机器二者的完全分离,每个部分都变得非常简单,非常灵活且容易维护。

虚拟机的现代化身,z/VM,通常用于运行多个完整的操作系统,而不是简化成如CMS一样的单用户系统。例如,zSeries有能力随着传统的IBM操作系统一起,运行一个或多个Linux虚拟机。

2.虚拟机的再次发现

IBM拥有虚拟机产品已经有四十年了,而有少数公司,包括Sun Microsystems公司和Hewlett-Packard等公司,近来也在他们的高端企业服务器上增加对虚拟机的支持,在PC机上,直到最近之前,虚拟化的思想在很大程度上被忽略了。不过近年来,新的需求,新的软件和新的技术的结合已经使得虚拟机成为一个热点。

首先看需求。传统上,许多公司在不同的计算机上,有时还在不同的操作系统上,运行其邮件服务器、Web服务器、FTP服务器以及其他服务器。他们看到虚拟化可以使他们在同一台机器上运行所有的服务器,而不会由于一个服务器崩溃,就影响其余的系统。

虚拟化在Web托管世界里也很流行。没有虚拟化,Web托管客户端只能共享托管(在Web服务器上给客户端一个账号,但是不能控制整个服务器软件)以及独占托管(提供客户端整个机器,这样虽然很灵活,但是对于小型或中型Web站点而言,成本效益比不高)。当Web托管公司提供租用虚拟机时,一台物理机器就可以运行许多虚拟机,每个虚拟机看起来都是一台完全的机器。租用虚拟机的客户端可以运行自己想使用的操作系统和软件,但是只要支付独占一台机器的几分之一的费用(因为同一台物理机器可以同时支持多台虚拟机)。

虚拟化的另外一个用途是,为希望同时运行两个或多个操作系统,比如Windows和Linux的最终用户服务,某个偏好的应用程序可运行在一个操作系统上,而其他的应用程序可运行在不同的操作系统上。如图1-29a所示的情形,而术语“虚拟机监控程序”近年来已经变化成类型1虚拟机管理程序(type 1 hypervisor)。

阅读 ‧ 电子书库
图 1-29 a)类型1虚拟机管理程序;b)类型2虚拟机管理程序

现在考察软件。虚拟机的吸引力是没有争议的,问题在于实现。为了在一台计算机上运行虚拟机软件,其CPU必须被虚拟化(Popek和Goldberg,1974)。不过在外壳中,存在一些问题。当运行虚拟机(在用户态中)的操作系统执行某个特权指令时,比如修改PSW或进行I/O操作,硬件实际上陷入到了虚拟机中,这样有关指令就可以在软件中模拟。在某些CPU上(特别是Pentium和它的后继者,以及其克隆版中)试图在用户态中执行特权指令时,会被忽略掉。这样一种特性,使得在这类硬件中无法实现虚拟机,这也解释了PC机世界中,缺乏对虚拟机兴趣的原因。当然,对于Pentium而言,还有解释器可以运行在Pentium上,但是其性能丧失了5~10倍,这样对于要求高的工作来说,就没有意义了。

由于20世纪90年代若干学术研究小组的努力,特别是斯坦福大学的Disco(Bugnion等人,1997),实现了商业化产品(例如VMware工作站),人们对虚拟机的热情复兴了。VMware工作站是类型2虚拟机管理程序,如图1-29b所示。与运行在裸机上的类型1虚拟机管理程序不同,类型2虚拟机管理程序作为一个应用程序运行在Windows、Linux或其他操作系统上,这些系统称为宿主机操作系统。在类型2管理程序启动后,它从CD-ROM安装盘中读入供选择的客体操作系统,并安装在一个虚拟盘上,该盘实际只是宿主机操作系统文件系统中的一个大文件。

在客户端操作系统启动时,它完成在真实硬件上相同的工作,如启动一些后台进程,然后是GUI。某些管理程序一块一块地翻译客户端操作系统的二进制程序,代替含有管理程序调用的特定控制指令。翻译后的块可以立即执行,或者缓存起来供后续使用。

处理控制指令的一种不同方式是,修改操作系统,删掉它们。这种方式不是真正虚拟化,而是准虚拟化(paravirtualization)。我们将在第8章具体讨论虚拟化。

3.Java虚拟机