暑假最后一篇更新,由于,,,明天我就回学校了。架构
如下均为我的理解,若是有不对的地方还望各位dalao不吝赐教。操作系统
虚拟化是经过Hypervisor程序实现的,Hypervisor的做用是将硬件虚拟化提供给多个操做系统使用,是虚拟化技术的核心。
虚拟化分为两种:1型虚拟化
和2型虚拟化
。线程
1型虚拟化
是将Hypervisor直接安装在物理机上,而后虚拟机直接运行在Hypervisor上,Xen
就是属于1型虚拟化
。2型虚拟化
是先在硬件上安装操做系统,而后将Hypervisor做为系统的一个程序运行在系统上从而实现对虚拟机的管理,KVM
就是属于2型虚拟化
。
先来看一下KVM
,KVM是基于Linux
内核实现的,KVM
的内核模块叫作kvm.ko
,实现对Linux
的CPU和内存虚拟化,是Linux
的一个进程,负责VCPU
和内存
的分配,而其余设备的虚拟就交给了qemu
。
qemu
运行在用户空间,KVM
运行在内核,二者经过/dev/kvm
进行交互。
KVM
仅支持全局虚拟化。code
再来看一下Xen
,Xen
支持全虚拟化和半虚拟化,(全虚拟化
就是运行在虚拟环境的虚拟机没法感知到本身是运行在虚拟环境之上,只会以为本身是运行在硬件之上,半虚拟化
是运行在虚拟环境的虚拟机能够感知到本身不是直接运行在硬件环境之上)这一点不一样于KVM
的仅支持全局虚拟化。Xen
是直接运行在硬件上的,也就是上面提到的1型虚拟化
,直接对硬件进行虚拟化,而后在硬件之上直接跑虚拟机,在Xen
架构中的虚拟机分为两种:Domain0
和DoaminU
.Domain0
又叫作特权虚拟机
,具备直接访问硬件和管理其余操做系统的权限,而DoaminU
就是普通的虚拟机,DoaminU
不能直接访问硬件,全部的操做都是经过驱动发送到特权虚拟机Domain0
,由Domain0
去和硬件交互再返回给普通用户,因此,Xen
架构的虚拟化须要先运行Domain0
。
Xen
架构也是对CPU
和内存
进行虚拟化,提供给虚拟机用,其他硬件访问是经过特权虚拟机
直接与硬件进行交互再返回的。
默认Domain0
VCPU和内存的大小是这样计算的:blog
Domain0的VCPU = 物理设备线程数 % 10
而后向上取最小的一个偶数,就是Domain0
的VCPU数。
Domain0的内存:若是物理设备的内存小于96G,那么就默认为8G,若是物理机的内存大于96G,那么Domain0的内存 = 物理机内存 *0.05 + 8G
。进程