kvm开发人员没有从底层编写新的管理程序,而是选择基于Linux的内核,通过加载新模块将Linux内核转换为管理程序。
目前,kvm的设计是通过可加载的内核模块来支持广泛的客户端操作系统,包括Windows。
在KVM体系结构中,虚拟机作为常规的Linux进程实现,这些进程由标准的Linux调度程序调度。实际上,每个虚拟CPU都是作为一个常规的Linux进程实现的。这使得kvm可以享受Linux内核的所有功能。
KVM本身不执行任何模拟。用户空间程序需要通过/dev/kvm接口设置客户端虚拟服务器的地址空间,为其提供模拟I/O,并将其视频显示映射回主机的显示屏。此应用程序是著名的QEMU。
REHL6.x系统中的kvm客户机可以支持160个虚拟CPU和高达2TB的内存。kvm主机支持4096个CPU内核和高达64TB的内存。
操作系统内核设计分为微核和单核两种。
单个内核意味着整个内核被实现为单个大型进程,同时在单独的地址空间中运行。所有内核服务都在如此大的内核空间中运行,内核之间的通信可以简单地作为函数调用来实现。
对于微内核,内核的功能分为几个独立的进程,每个进程称为服务器。许多服务器在自己的地址空间中运行,只有少数核心服务器以特权模式运行,服务器之间的通信采用进程间通信机制。独立的服务器进程提高了系统的健壮性,但是进程间通信的开销远远超过函数调用,因为它涉及内核空间和用户空间之间的上下文切换。
Linux采用务实的设计:Linux内核设计为单核,以满足性能要求,同时Linux内核还具有模块化设计和内核模块动态加载的能力。除了进程切换和内存管理等核心功能外,大多数内核功能都是作为单独的内核模块设计和实现的。编译完这些模块后,它们作为单独的二进制文件存在。在运行过程中,内核根据需要动态加载并链接到内核空间。未使用的模块也可以在操作期间动态卸载。该设计不仅保证了内核的性能,而且提高了传统单核设计的灵活性。
KVM作为内核模块存在,它为Linux内核添加了虚拟化。
从虚拟机的基本架构来看,它可以分为两种类型:类型1和类型2。
类型1:当系统通电时,它首先加载并运行虚拟机监视程序,而传统的操作系统运行在它创建的虚拟机中。
类型1管理程序可以看作是为虚拟机优化的操作系统内核。
著名的开放源码虚拟化软件Xen、商用软件vmware esx/esxi和微软的hper-v都是类型1的代表。
类型2:系统通电后,仍运行通用操作系统(也称主机操作系统)。作为一种特殊的应用,虚拟机监控程序可以作为操作系统功能的扩展。
对于类型2的虚拟机,最大的优点是它们可以充分利用现有的操作系统,但是它们也会受到主机操作系统的限制。
kvm、vmware工作站和virtualbox属于类型2虚拟机。