Hypervisor

Hypervisor这个概念,一直还比较模糊,以前玩过VMware ESXi,在服务器上安装的过程中,会安装一个类似Linux Kernel的服务端操作系统,然后通过VMware vSphere客户端来进行管理,因此十分清楚,VMware的这一套,Hypervisor是通过直接部署在物理服务器上的一层管理软件来实现的,也就是直接安装在节点机上然后再来对各个VM进行管理

而对于KVM这一套,一直仅仅知道它是以Linux内核模块的方式存在的,却不知如何像VMware那样管理;其实VMware是实现了自己完整的一套Hypervisor,来管理硬件设备,CPU,内存,而KVM将这些功能都交给了操作系统来完成,kmod只负责管理虚拟机,实现指令翻译之类的;qemu是一个用户态进程,进程里模拟出虚拟机用到的各种设备,虚拟机使用的VCPU等都是qemu的一个个子线程,说到底KVM作为一个内核模块的存在形式,是依赖于Linux操作系统,但它会将硬件设备,CPU,内存的管理统统交给操作系统处理,每一个Guest OS都作为一个Linux系统进程,可以使用Linux的进程管理指令来管理

附凌晨两个大男人的聊天:

qemu进程是不知道kvm的存在的,它都不知道它自己是虚拟机。它只是一个用户态进程。进程里面跑了各种逻辑,这些逻辑就是模拟硬件用的

这个进程里面,跑着我们的guest os操作系统

资源是操作系统来搞定的,操作系统只知道你这个qemu进程申请了比如说2G的内存,但是在这个内存里面你做了什么操作系统就不知道了

qemu拿到2G内存之后,引导了一个操作系统在这里面

这个操作系统又会下发各种cpu指令,这时候kvm就要出场了

截获ring0的指令,并且翻译

比如内存访问,io访问之类的

虚拟机里面的内存地址在物理机上是不对的,需要kvm搞一个内存地址映射翻译成实际的物理地址。虚拟机里面说我要访问以下磁盘上的某个扇区,物理机上的这个扇区可能它根本不能访问,要kvm翻译成镜像里面的那个扇区

这才是hypervisor要做的事情

hypervisor又叫virtual machine monitor 它monitor的就是虚拟机的各种操作

 

发表回复