KVM的全称是基于内核的虚拟机,它是一个开源的系统虚拟化模块,可以用来实现服务器的虚拟化功能。KVM是Linux内核的一部分,它的基本架构有两个组件构成。
        两个组件分别是:libvirt和qemu.先说一说libvirt这个组件,libvirt是实现虚拟化数据库的工具包,想要运行KVM,就需要安装这个工具包,它的主要功能是实现KVM与Linux的交互,主要负责虚拟机的创建、虚拟内存的分配以及vCPU的运行等等。再说一说qemu,它是用于模拟虚拟机用户空间的组件,提供I/O设备模型,访问外部设备的途径等。qemu通过libKVM应用程序接口,用fd通过ioctl向设备驱动发送创建、运行虚拟机命令,运行了Linux的设备就会来解析并执行命令。KVM的架构图如下:

开源虚拟化平台之KVM_KVM

 

KVM模块使得运行了Linux的主机成了一个虚拟机监视器,并且在原有的两种Linux模式上又添加了客户模式,那么这三种模式的作用是什么呢?接下来看看
        客户模式:执行非I/O的客户代码,虚拟机运行在这个模式下;
        Linux用户模式:代表用户执行I/O指令,qemu运行在这个模式下;
        内核模式:处理因I/O或者其他指令引起的客户模式推出(VM_EXIT)实现客户模块的切换工作。KVM模块工作在这个模式下。
    对于上面的图,可以这样给大家去解释:用户的qemu通过libKVM应用程序接口,通过ioctl进入内核模式,而KVM模块为虚拟机创建虚拟内存、虚拟CPU之后执行虚拟机launch命令,进入客户模式,加载并执行Guest OS.如果Guest OS 在执行过程中发生外部中断,就会暂停并且退出客户模式并进行异常处理,处理完毕后会重新进入客户模式进行操作。