传统物理机只有一个操作系统
两个进程在一个操作系统上运行会存在一些隐患(相互影响 争夺资源等)
解决方法:如果各个进程在不同操作系统)(不同物理机),那就不存在这些隐患了。但这样浪费了物理机的硬件资源,因为一个物理机可能可以运行多个进程
第一类是VMM管理硬件资源,把硬件资源分配给各个虚拟机
单核CPU可以通过划分时间片从而不同虚拟机对应不同时间片使用,这样看来就是一个独立CPU(其实就是讲CPU的某些时间片分配给虚拟机而已)磁盘和内存都是划分区域给不同虚拟机
VMM运行在内核态,可以使用特权指令,虚拟机的内核态和用户态运行在客户态
虚拟机的操作系统以为自己在内核态,当其使用特权指令时,会被VMM截获,然后VMM会将该特权指令进行等价转换,使得虚拟机以为自己执行成功了,
第二类是VMM是作为一个进程运行在操作系统上,VMM需要向操作系统请求分配硬件资源,然后VMM进行再分配。硬件资源的管理者依然是宿主操作系统
注意两类虚拟机的运行都是相当于宿主机的一个进程
资源分配方式:第一类直接得到物理地址,划分分配给虚拟机后虚拟成其虚拟机的虚拟地址,第二类VMM会向Host OS申请一个大的虚拟空间,这个再去划分分配给各个虚拟机(内外存都是虚拟地址的),然后虚拟机将得到的这个虚拟地址(虚拟机将这个看为物理地址,所以还需转为虚拟地址)还需虚拟一次为其虚拟机所认为的虚拟地址
支持的虚拟机数量:第一类没有宿主操作系统,也没有宿主操作系统的进程,完全是运行各个进程虚拟机,所以虚拟机占用大部分硬件资源,支持更多的虚拟机。第二类宿主操作系统和宿主操作系统的进程都需要硬件资源,所以虚拟机可利用的虚拟资源相对来说较少,自然支持的虚拟机数量更少
可迁移性:第一类虚拟机是获得物理地址的,如果迁移到别的VMM,其相关的物理地址要求比较繁琐。而第二类虚拟机是获得宿主操作系统分配的虚拟地址的,这个要求比较容易满足。
运行模式:第一类假设VMM在ring0,虚拟机操作系统在ring1,虚拟机用户空间在ring2,此时根据指令类型跳转到不同地方执行,此时可以认为将特权指令分为ring1和ring0,将不敏感指令防在ring1(对虚拟机操作系统做相关要求即可实现ring1指令会跳转到虚拟操作系统执行),敏感指令放在ring0,这样对于跳转到VMM的指令就比较少了,同时切换VMM次数自然也就少了。第二类VMM一部分在内核一部分在用户,此时系统调用类似套娃,虚拟机应用呈现发出系统调用后转换到虚拟机内核态,虚拟机操作系统再将该系统调用给VMM,VMM再向宿主操作系统请求。
特权指令通常包括敏感指令。
在虚拟化技术中,特权指令和敏感指令都是与CPU的运行权限和资源管理紧密相关的概念。具体来说:
特权指令:是指那些只能在最高特权级别(通常是内核模式或环0)执行的指令。这些指令能够访问和操作计算机的关键资源,如内存管理单元、I/O设备等。
敏感指令:是指在虚拟化环境中,虚拟机监视器(VMM)需要捕获并模拟的指令,以便客户操作系统能够在没有直接访问硬件的情况下运行。
在大多数情况下,敏感指令确实是特权指令,因为它们通常涉及到对关键系统资源的访问和管理。例如,对于RISC处理器(如MIPS、PowerPC、SPARC),敏感指令是特权指令的一部分。然而,在x86架构中,虽然绝大多数敏感指令是特权指令,但也存在一些敏感而非特权的指令,这些指令在执行时不会自动触发陷阱(Trap)被VMM捕获。
总的来说,特权指令和敏感指令在虚拟化技术中都扮演着重要的角色,它们确保了系统的安全性和稳定性。