引言
虚拟机的概念对于计算机世界来讲并不算新,但是许多人并不知道或理解这个概念。如果你是一个典型的计算机用户,并且通过Internet来浏览Web网页,那么你很可能在和一个虚拟机交互,这个虚拟机就是JAVA虚拟机。现在,既然这个虚拟机对大多数计算机用户来说是透明的,你可能疑惑:为什么要关心虚拟机,对不对?
其实,在计算机世界,虚拟机的概念经常被用来解决一些非常重要的问题。但是通常这
所有虚拟机的这些用途,对于我们今天的计算来说都是非常重要的。
些对用户来说是透明的,因为虚拟机一般在用户每天使用的程序和操作系统内部才会用到。虚拟机所要解决的问题包括:通过分割硬件使许多程序共享同一个硬件,使软件在多个操作系统之间是“可移植”的,以及在新的计算机上运行旧的软件。所有虚拟机的这些用途,对于我们今天的计算来说都是非常重要的。
随着阅读的深入,我们将向你展示虚拟机是怎样帮助解决这些重要问题的,从而使你能够理解为什么虚拟机会成为现代计算机的重要组成部分。
当我们尝试着去解释虚拟机的概念时,首先必须要理解“虚拟”的概念。“虚拟”这个词最早来源于光学,用于理解镜子里的物体。镜子里的物体是一个实际物理存在的影像,但它不是真正的物体。这意味着这个影像看起来和实际物体一模一样,并且在同一个位置。现在,“虚拟”这个词已经经过演化,用来描述任何真实物体的模拟了,例如:虚拟内存,虚拟磁盘,和虚拟现实。我们在讨论虚拟机的时候,使用“虚拟”这个词,是因为我们希望虚拟机看起来和工作起来,都和真正的机器一模一样。这意味着,虚拟机并不是真正的机器,但是他能像真正的机器一模一样地工作。
现在,在定义虚拟这个词的时候,我们已经使用了“模拟”这个词。模拟就
模拟就是那些用来模仿其他事物的事物。
是那些用来模仿其他事物的事物。模拟在现代应用中的一个非常好的例子,就是空军和海军飞行员的训练。飞行员在飞行模拟器上接受训练:基于计算机的机器,看起来就像是一个喷气式飞机的驾驶舱。这种机器,使得驾驶员不用离开地面,就能感受到和驾驶一架真正的喷气式飞机一样的感觉,并看到同样的东西。这个模拟器模仿了一切,从飞机的实际操作性能,到风和天气条件对正在飞行的飞机的影响。基本上,模拟器使得飞行员在安全的地面,就能够得到所有驾驶一架真正喷气式飞机所能得到的熟练和感觉。
模拟或者模仿另外一个事物的概念被引入到计算机系统的设计当中。尽管虚拟机有许多化身,但是,从他最本质的层面讲,一个虚拟机是一个并不实际存在的机器的的表象。这当然最笼统,也是非常不清楚的定义。但是先和我们一起忍受一下。
现在,让我们考虑一下一个机器最一般的概念。所有的机器,不管是电冰箱,录像机,还是计算机,都有一个共同点:它们被设计用来完成一组特定的指令。这些指令组成一个指令集。任何一个机器的指令集,都可以被想象成一个装有Lego(垒高拼装玩具)的盒子。这些Lego被放在一起,组成一个整体。对于机器来讲,这些Lego就是指令,他们被用来告诉机器做什么,以及完成什么任务。
对于虚拟机来讲,“虚拟”实际上就是指的这些指令集。虚拟机有许多不同的类型,但是它们有一个共同的主题就是模拟一个指令集的概念。每个虚拟机都有一个用户可以访问的指令集。虚拟机把这些虚拟指令“映射”到计算机的实际指令集。这种映射关系,如图1.1所示:
在虚拟机领域,主要有四种不同的思想流派。第一种以IBM虚拟机模型为代表,它几乎是一种一一映射。第二种流派由机器中每条指令和一个虚拟指令间的映射组成,它以Java虚拟机为代表。UNIX虚拟机模型和OSI虚拟机模型代表着最后两种模型。我们在后面会讲到这些模型。这两种模型直接映射一部分指令,而其它的指令则是对操作系统函数的直接调用。