虚拟机监视器
希望同时在机器上运行不同的操作系统,该怎么办?
IBM以虚拟机监视器(Virtual Machine Monitor,VMM)(也称为管理程序,hypervisor)[G74]的形式,引入了另一个间接层。
监视器位于一个或多个操作系统和硬件之间,并为每个运行的操作系统提供控制机器的假象。然而,在幕后,实际上是监视器在控制硬件,并必须在机器的物理资源上为运行的OS提供多路复用。实际上,VMM作为操作系统的操作系统,但在低得多层次上。操作系统仍然认为它与物理硬件交互。因此,透明度(transparency)是VMM的主要目标。
虚拟化 CPU
如果想在VMM之上“启动”新操作系统,只需跳转到第一条指令的地址,并让操作系统开始运行,就这么简单。
假设我们在单个处理器上运行,并且希望在两个虚拟机之间进行多路复用,即在两个操作系统和它们各自的应用程序之间进行多路复用。非常类似于操作系统在运行进程之间切换的方式(上下文切换,context switch),虚拟机监视器必须在运行的虚拟机之间执行机器切换(machine switch)。因此,当执行这样的切换时,VMM必须保存一个OS的整个机器状态(包括寄存器,PC,并且与上下文切换不同,包括所有特权硬件状态),恢复待运行虚拟机的机器状态,然后跳转到待运行虚拟机的PC,完成切换。注意,待运行VM的PC可能在OS本身内(系统正在执行系统调用),或可能就在该OS上运行的进程内(用户模式应用程序)。
虚拟化内存
每个操作系统通常将物理内存视为一个线性的页面数组,并将每个页面分配给自己或用户进程。当然,操作系统本身已经为其运行的进程虚拟化了内存,因此每个进程都有自己的私有地址空间的假象。现在我们必须添加另一层虚拟化,以便多个操作系统可以共享机器的实际物理内存,我们必须透明地这样做。
这个额外的虚拟化层使“物理”内存成为一个虚拟化层,在VMM所谓的机器内存(machine memory)之上,机器内存是系统的真实物理内存。因此,我们现在有一个额外的间接层:每个操作系统通过其每个进程的页表映射虚拟到物理地址,VMM通过它的每个OS页面表,将生成的物理地址映射到底层机器地址。图B.1描述了这种额外的间接层。