在全虚拟化中,由于Guest OS 的代码没有被修改,因此Guest OS 的特权操作, 比如更新页表等主要通过VT 技术的VMX 操作来实现。敏感操作也不像半虚拟化那样通过超级调用来实现,也是通过VMX 的指令来实现。因此全虚拟化下的Guest OS 即HVM 很少使用超级调用。但是有时由于开发的需要,我们需要通过超级调用来实现一些功能。本报告的内容如下:添加一个hypercall, 并让HVM 像半虚拟化那样方便的调用该hypercall.
extern int do_kexec( unsigned long op, unsigned arg1, XEN_GUEST_HANDLE(void) uarg); +extern int
+do_create_sim( + unsigned long paddr, int num);
d. 定义函数( 函数定义在合适的文件中,这个例子采用mm.c) /xen/arch/x86/mm.c +int do_create_sim(unsigned long paddr, int num) { + printk("creat the sim space using shadow page!/n"); +}
3. HVM domU 中使用该 hypercall a. 首先在xen/arch/x86/hvm/hvm.c 中添加该hypercall