和但是KVM并不是第一个这样做的程序。UML很久以前就将Li
ux内核转换成一个系统管理程序了。使用内核作为一个系统管理程序,您就可以启动其他操作系统,例如另一个Li
ux内核或Wi
dows系统。安装KVM之后,您可以在用户空间启动客户操作系统。每个客户操作系统都是主机操作系统(或系统管理程序)的一个单个进程。图2提供了一个使用KVM进行虚拟化的视图。底部是能够进行虚拟化的硬件平台(目前指的是I
telVT或AMDSVM处理器)。在裸硬件上运行的是系统管理程序(带有KVM模块的Li
ux内核)。这个系统管理程序与可以运行其他应用程序的普通Li
ux内核类似。但是这个内核也可以支持通过kvm工具加载的客户
f操作系统。最后,客户操作系统可以支持主机操作系统所支持的相同应用程序。图1使用KVM的虚拟化组件【见附件】记住KVM只是虚拟化解决方案的一部分。处理器直接提供了虚拟化支持(可以为多个操作系统虚拟化处理器)。内存可以通过kvm进行虚拟化(这在下一节中将会讨论)。最后,IO通过一个稍加修改的QEMU进程(执行每个客户操作系统进程的一个拷贝)进行虚拟化。KVM向Li
ux中引入了一种除现有的内核和用户模式之外的新进程模式。这种新模式就称为客户模式,顾名思义,它用来执行客户操作系统代码(至少是一部分代码)。回想一下内核模式表示代码执行的特权模式,而用户模式则表示非特权模式(用于那些运行在内核之外的程序)。根据运行内容和目的,执行模式可以针对不同的目的进行定义。客户模式的存在就是为了执行客户操作系统代码,但是只针对那些非IO的代码。在客户模式中有两种标准模式,因此客户操作系统在客户模式中运行可以支持标准的内核,而在用户模式下运行则支持自己的内核和用户空间应用程序。客户操作系统的用户模式可以用来执行IO操作,这是单独进行管理的。在客户操作系统上执行IO的功能是由QEMU提供的。QEMU是一个平台虚拟化解决方案,允许对一个完整的PC环境进行虚拟化(包括磁盘、图形适配器和网络设备)。客户操作系统所生成的任何IO请求都会被中途截获,并重新发送到QEMU进程模拟的用户模式中。KVM通过devkvm设备提供了内存虚拟化。每个客户操作系统都有自己的地址空间,并且是在实例化客户操作系统时映射的。映射给客户操作系统的物理内存实际上是映射给这个进程的虚拟内存。为了支持客户物理地址到主机物理地址的转换,系统维护了一组影子页表(shadowpagetable)。处理器也可以通过在访问未经映r