1.传统计算机
一台物理机器上只能运行一个操作系统,若两个进程同时使用操作系统会出现安全问题。解决方法就是让其中一个进程使用虚拟机。
2.虚拟机
(1)分类
第一类:
虚拟机管理程序运行在硬件上,直接为各个虚拟机分配硬件。CPU按时间片划分,硬盘与内存按空间划分,由此实现各虚拟机拥有独立的硬件资源。
只有VMM运行在内核态,可以使用特权指令。但操作系统认为自己还在内核态,就会使用特权指令。当操作系统使用特权指令时,这个行为动作被VMM截获,VMM会负责把操作系统想要执行的这个特权指令进行特价交换,模拟出这个特权指令成功的感觉。因此上层操作系统运行在虚拟内核空间,并不是真正的内核空间,实际在用户空间。
第二类:
虚拟机管理程序运行在宿主操作系统上,当VMM想要为上层操作系统分配硬件资源时,需要向宿主操作系统发出请求。
(2)对比
资源分配方式:
对物理资源的控制权决定了它们的资源分配方式不同。比如第一类VMM为VM1分配存储空间为1-1024,为VM2分配1025-2048。当第二类VMM想为VM1 分配10GB的磁盘存储空间,VMM会向操作系统申请创建一个10GB的大文件,这个大文件具体放在磁盘当中的位置有宿主操作系统决定。当虚拟机管理程序获得了10GB的大文件后,会将10GB的空间分配给第一台虚拟机器,让第一台虚拟机以为自己拥有了10GB的磁盘存储空间。但实际上这只是一个虚拟磁盘,这10GB的空间在磁盘中的存储未必是连续的背后对应的是宿主操作系统文件系统当中的一个大文件而已。
内存分配:当第二类虚拟机管理程序请求宿主操作系统分配给它4GN的内存空间,宿主操作系统给它分配了4GB的内存空间,实际是虚拟存储。当虚拟机操作系统获得了这4GB的虚拟后,又可以把4GB虚拟内存拆分,分给不同的虚拟机器。比如第一台虚拟机分2GB,第二台虚拟机分2GB。显然,这是层层套娃,宿主操作系统为虚拟机管理程序分配的虚拟内存,虚拟机管理程序将它再虚拟再分配给不同的虚拟机。
性能:
每进行一次硬件的虚拟化,意味着上层的用户操作系统在使用这些硬件资源的时候,需要先将改地址映射到虚拟机管理程序获得的虚拟地址空间,宿主操作系统又需要把4GB的虚拟地址空间映射到实际的物理地址空间。所以,经过多层的虚拟,意味着在使用这些资源时需要经过多层映射,才能最终对应到实际的物理地址上。
可支持虚拟机的数量:
第一类虚拟机管理程序拥有所有的硬件资源。第二类虚拟机管理程序除了宿主操作系统需要硬件资源,宿主操作系统本身的进程也需要硬件资源。因此,在硬件资源相同的条件下,第一类虚拟机管理程序可以支持更多的虚拟机。