CPU虚拟化:在物理机(宿主机)中通过线程或进程这种纯软件方式模拟出假的CPU
物理cpu核数 > 虚拟cpu总核数的原因是:虚拟出来的每颗cpu实际上就是一个线程或者进程。虚拟cpu过多时,需要进行进程/线程切换,比较浪费
1、模拟:使用软件方式实现CPU,需要模拟环0,1,2,3。host架构和guest架构不同,如x86和android,因此guest上运行的所有指令都要进行转换,不管是用户空间的指令还是内核空间的指令,因此性能很低。需要安装模拟器来将其他类型的cpu指令翻译为本机cpu的指令集。
2、虚拟:guest架构和host架构相同或可以被兼容(host为64位,guest可以使用32位),只需要模拟环0即可,因为虚拟机中的内核需要运行在内核态,即需要将虚拟机中的内核代码转换为本机的cpu指令集。
3、hypervisor直接管理物理硬件(cpu和memory),hypervisor有时候就是host中的内核。
4、进程中涉及到系统调用时的运行过程:
进程运行在cpu的环3(用户态)上,如果涉及到硬件调用时,就通过软中断方式发起系统调用,由用户态切换到内核态。内核完成系统调用完成后将结果告知调用进程,因此恢复中断现场,进程继续运行。
5、CPU虚拟化方案:
A、完全虚拟化:guest操作系统内核不需要进行任何修改,guest以为自己直接管理真实的底层物理硬件