Xen 在架构上是一个典范的 Type 1 Hypervisor,与KVM形成鲜明对比。严格来说,它没有宿主机的概念,而是由 Xen Hypervisor (VMM)完全管控硬件,但用户却看不见、摸不着它,只能通过特殊的0号假造机(Dom0),通过其中xl 工具栈 (toolsstack)与Xen Hypervisor 交互来管理其他普通假造机(DomU)。0号假造机是一个运行修改过的半假造化的内核的 Linux 假造机。从架构上,Xen 的假造化方案既利用了 Linux 内核的I0部分(Dom0 的内核),将Linux 内核的 CPU、内存管理等核心部分排除在外由自己接手(Xen Hypervisor),以是,一开始就受到了 Linux 内核开辟人员的抵制,致使 Linux 内核作为Dom0 对xen 的支持部分不停不能合人 Linux 内核社区。不停到 2010 年,在采用基于内核的 PVOPs 方式大量重写了 xen代码以后,才委曲合人 Linux 内核社区。2011年,从Linux内核 2.6.37 版本开始,正式支持 Xen Dom0。
4.4 hyper-V假造化
Hyper-V是微软新一代的服务器假造化技能,首个版本于2008年7月发布,Hyper-V有两种发布版本:一是独立版,如Hyper-V Server 2008,以命令行界面实现操作控制,是一个免费的版本;二是内嵌版,如Windows Server 2008,Hyper-V作为一个可选开启的角色。
对于一台没有开启Hyper-V角色的Windows Server 2008来说,这个操作体系将直接操作硬件设备,一旦在其中开启了Hyper-V角色,体系会要求重新启动服务器。在这次重启动过程中,Hyper-V的Hypervisor接受了硬件设备的控制权,先前的Windows Server 2008则成为Hyper-V的首个假造机,称之为父分区,负责其他假造机(称为子分区)以及I/O设备的管理。Hyper-V要求CPU必须具备硬件辅助假造化,但对MMU硬件辅助假造化则是一个增强选项。
其实Hypervisor仅实现了CPU的调度和内存的分配,而父分区控制着I/O设备,它通过物理驱动直接访问网卡、存储等。子分区要访问I/O设备必要通过子分区操作体系内的VSC(假造化服务客户端),对VSC的哀求由VMBUS(假造机总线)通报到父分区操作体系内的VSP(假造化服务提供者),再由VSP重定向到父分区内的物理驱动,每种I/O设备均有各自的VSC和VSP配对,如存储、网络、视频和输入设备等,整个I/O设备访问过程对于子分区的操作体系是透明的。其实在子分区操作体系内,VSC和VMBUS就是作为I/O设备的假造驱动,它是子分区操作体系初次启动时由Hyper-V 提供的集成服务包安装,这也算是一种半假造化的设备,使得假造机与物理I/O设备无关。如果子分区的操作体系没有安装Hyper-V集成服务包或者不支持 Hyper-V集成服务包(对于这种操作体系,微软称之为Unenlightened OS,如未经认证支持的Linux版本和旧的Windows版本),则这个子分区只能运行在仿真状态。其实微软所宣称的发蒙式 (Enlightenment)操作体系,就是支持半假造化驱动的操作体系。
Hyper-V的Hypervisor是一个非常精简的软件层,不包罗任何物理驱动,物理服务器的设备驱动均是驻留在父分区的Windows Server 2008中,驱动程序的安装和加载方式与传统Windows体系没有任何区别。因此,只要是Windows支持的硬件,也都能被Hyper-V所兼容。
Container 技能利用了 Linux kernel 提供的 cgroup、namespace 等机制,将应用之间隔离起来,好像自己是操作体系上的唯一一个应用似的。而 Linux kernel 除了封装出这些应用单独的运行情况以外,还可以控制分配给各个应用的资源配额,比如 CPU 利用率、内存、网络带宽等。