在今天的计算机世界中,虚拟机的概念已经被用来解决许多问题。从机器的分割(IBM模型),到"半平台无关"的程序设计语言(Java模型),到开发操作系统(UNIX模型和OSI模型),虚拟机的概念在构成现代计算机的过程中已经被证明是一个强大的工具。然而,这个概念对每个人来说并非总是清晰,并且直到20世纪60年代中期,它才被用于实践。
1965年前后,IBM的研究人员试图去测量一些计算机科学领域新概念的实际效果。为了能够测量到这些新特性开启和关闭后机器的两种性能,研究人员需要一种方式来关闭这些新的特性。这些人是IBM约克镇(美国弗吉尼亚州东南部城镇)研究中心的研究人员。他们设计了一种方案,需要把机器分割成"更小的部件"。这些部件要求能够管理他们自己的资源,以使得研究人员能够在同一时间在系统中测试测试许多不同的条件,而不用改变系统的其他"部件"。他们相信,对于这个实验来讲,一个虚拟机的实现会工作的非常好。
在这次实验之后,IBM继续他们的工作,并最终开发出了一个虚拟机概念的实现。他们把它当作一个多用户环境的操作系统来卖。许多企业和大学都使用这个操作系统,因为它允许他们共享主机的计算能力和资源。每个用户在他们自己的虚拟机中工作,从而可以和其他人共享资源而不影响其他人的工作。这台虚拟机现在被称做IBM370系统(S/370)和IBM390系统(S/390)。这些机器利用IBM VM/ESA操作系统,并且都被归为IBM虚拟机派系。
这个虚拟机的实现被证明非常的强大,因为至今它都还在销售。虚拟机的概念从那以后开始被用来解决许多其他的计算问题,如计算机程序的可移植问题和操作系统的设计问题。 UNIX操作系统是最早利用虚拟机概念解决这些问题的实现之一。
UNIX操作系统源自贝尔实验室的Denise Richie和Ken Thompson在1974年发表的一篇论文。他们关于UNIX的这一思想很快被用在了PDP-11计算机上。PDP-11是一种大学使用的机器。通过大学毕业生,这一思想又很快被应用于商业计算机领域。从1980年到1985年,IEEE标准化委员会实施POSIX(Portable Operating System 可移植操作系统)项目来为UNIX库函数提供一个标准。他们的想法是:任何软件供应商都可以使用标准库函数书写他们的代码,并且可以和任何UNIX系统对接。1990年,IEEE POSIX项目组发表了"信息技术可移植操作系统接口"。这为UNIX外壳和应用例程规定了一个标准,使得UNIX应用接口成为一种正式的规范,从而使UNIX进程作为一个独立的虚拟机来工作。
创造一种真正可移植的计算机程序是长期困扰程序员的问题之一。或者说,程序员希望能够写出可以在任何平台上工作的程序。上世纪90年代中期,利用虚拟机的概念创造的JAVA语言使得这一想法几乎成为现实。
但是,在上世纪90年代,JAVA程序语言的思想并不是一个新的想法。它实际上是上世纪70年代,一个叫Bill Joy的绅士的想法。Joy想通过创造一种语言来整合MESA和C最好的优点。但是后来其他项目组(如Sun)搀和进来,并且实现这一想法需要很多年。到90年代早期,Joy对大型程序开始变的疲倦。在90年代后期,Joy写了一篇叫"更进一步"的论文。(译者按:可能作者在此处的时间问题上有点错误,应该是80年代后期。待查证。)在这篇论文中,他列出了对Sun工程师的建议,认为他们应该基于C++创造一个对象环境。也正是在这个时候,James Gosling已经在一个叫做"Imagination"的SGML编辑器上使用C++工作几个月了。因为Gosling在"Imagination"项目中使用C++时受到挫折,这使他创造了Oak编程语言。
1990年12月5日,Patrick Naughton开始了绿色项目(Green Project)。Naughton是这样定义这个项目的:为实现"做的越少越好"而努力。在那年12月,他招募了Gosling和Mike Sheridan来帮忙启动这个项目。Joy给他们看了自己"更进一步"的论文,并且用C为图形学和用户接口的问题工作了几个月。
1991年4月,绿色项目组(Naughton,Gosling和Sheridan)开始以"智能家电"(smart consumer electronics)为目标市场。而Gosling开始为Oak编程语言而努力工作。Gosling用C写了最早的编译器,而Naughton,Gosling和Sheridan完成的运行时解释程序也是用C完成的。1991年8月,Oak的第一个程序诞生了。
到1992年秋天,一种在PDA和远程控制之间的交叉互通器"*7"准备好了。是年10月,他们向Sun的董事长Scott McNealy展示了这个系统。接着,Sun以绿色项目为主体成立了一个全资子公司,叫First Person Inc.。1993年早些时候,绿色项目组听说时代华纳(Time-Warner)需要一个关于机顶盒操作系统的计划书。First Person迅速从智能家电转向机顶盒操作系统市场,并且向时代华纳递交了标书。幸运的是Sun没有中标。(译者按:这应该是个不幸的事件。)First Person继续研究机顶盒操作系统。直到1994年早些时候,他们意识到机顶盒和智能家电一样华而不实。
1994年,因为看不到市场前景,First Person被母公司Sun兼并。也正是在那个时候,他们意识到,智能家电和机顶盒上需要的软件(它们的特点是:短小,平台无关,安全可靠)在新生的web上也同样需要。绿色项目组第三次转变他们的方向,这次是web。Patrick Naughton写了一个叫WebRunner的浏览器雏形。经过Naughton和Jonathan Payne增补,这个浏览器成为Hot Java。1995年,Oak更名为Java。1995年,Java第一个开发工具JDK1.0alpha版发布。从那时起,已经有许多修订版陆续发布,直到最近的JDK1.2。
附录:重大历史事件
大约1965年
约克镇IBM研究中心获得一台IBM7044机器。他们为系统的每一部分建立一个7044镜像。每个镜像叫做7044/44X。这是为了使IBM更好地理解多编程(multiprogrammed)操作系统。这是IBM虚拟机概念的开端。他们认为,虚拟机就是真实机器的副本,只是内存减少了。
1967年
Djiskstra在THE大学开发一个操作系统。它由一系列分层的虚拟机组成。每层虚拟机抽象出机器的不同层次,而每一层又是由它的下一层抽象而来。这是虚拟机第一个主要的流派。
大约1968年
一个IBM小组在剑桥马萨诸塞州建立了一个操作系统,并把它叫做剑桥监视系统(Cambridge Monitoring System,CMS)。CMS是分时系统的一个实验,并最终成为VM/370所采用的体系构架。VM/370被当作分时系统来销售。
1974年
贝尔实验室的Denise Ritchie和Ken Thompson发表了关于Unix操作系统的里程碑式的论文。因为在Unix操作系统上的工作,他们在1984年获得了著名的ACM图灵奖。
1980年-1985年
IEEE标准化委员会为了给Unix库函数提供一个标准,启动POSIX(Portable Operating System,可移植操作系统)项目。
1990年
IEEE POSIX项目组发表了"信息技术可移植操作系统借口(Information Technology Portable Operating System Interface)"。这为UNIX外壳和应用例程规定了一个标准。
1990年
1990年12月5日,Patrick Naughton启动了绿色项目。这个项目吸引了James Gosling和Mike Sheridan的参与,标志着JAVA的早期发展。当时JAVA被叫做Oak程序设计语言。
1995年
1995年,绿色项目组转向web,并开发了一个浏览器雏形。同时,Oak更名为JAVA。
1999年
1995年5月,JAVA的第一个开发工具JDK1.0alpha版发布。从那时起,已经有许多修订版陆续发布,直到最近的JDK1.2。