Xen的半虚拟化(Paravirtualization)
三个特权级
IA-32体系提供了4个特权级别,正常情况下只用了2个, 操作系统运行在Ring 0,而应用程序运行在Ring 3。
Xen让自己运行在Ring 0, 而操作系统运行在Ring 1, 应用程序运行在Ring 3,这样操作系统变成没有那么Powerful了,不能执行特权指令了。
改变的方法,就是对操作系统代码进行Patch,将原来需要运行在特权级别的指令,换成相应的Hypercall,像系统调用一样,请求VMM来提供相应的服务。
由于对操作系统的Patch是在Compile Time,而不是在Run Time,可以很大程序地提高效率。