用于domU内核的Xen E820内存映射

时间:2014-08-24 11:32:53

标签: linux memory virtualization boot xen

xen如何处理domU内核的E820内存映射?在我的具体问题中,我试图将非易失性RAM映射到domU内核。 dom0内存映射返回以下相关部分。

100000000-17fffffff:系统RAM(4GB到6GB)

180000000-37fffffff:保留(6GB到14GB)

第二行与NVRAM相对应,NVRAM是dom0内核中6GB到14GB的区域。如何将此NVRAM区域映射到domU内核,而该内核根本不映射该区域。

最终,我希望nvram区域可以在其他domU VM中使用,因此任何解决方案或建议都会非常有用。

P.S。 ::如果我尝试从domU内核写入此区域,Xen将拦截此写操作。实际上这只是一个内存区域写入,这不应该是一个问题,但它可能看起来像硬件访问。

1 个答案:

答案 0 :(得分:1)

Xen中的来宾域有两种不同的x86模型: 1.硬件虚拟机(HVM):利用Intel VT或AMD SVM扩展,可在x86平台上实现真正的虚拟化 2.半虚拟化(PV):此模式增加了操作系统源代码的修改,以消除x86虚拟化问题,并为系统增加性能提升。

这两种不同的型号可以不同方式处理E820内存映射。 E820内存映射基本上为操作系统提供了物理地址空间以及I / O设备的位置。在PV模式下,I / O设备可通过Xenstore获得。域构建器仅在引导期间向pv guest提供控制台设备。所有其他I / O设备必须由guest虚拟机映射。此模式下的guest虚拟机开始以受保护模式执行,而不是x86的实模式。域构建器将start_info页面映射到来宾域的物理地址空间。这个start_info页面包含初始化内核的大部分信息,例如可用页面数,CPU数量,控制台信息,Xenstore等。在这种情况下,E820内存映射只包含可用内存页面的数量,因为BIOS未被模拟和I / O设备信息通过Xenstore单独提供。

另一方面,在HVM中,客户BIOS和其他设备必须由Xen模拟。此模式应支持任何未修改的操作系统,因此我们无法使用以前的方法。 BIOS仿真通过从Bochs借来的代码完成,而设备则使用QEMU代码进行仿真。这里为操作系统提供了一个E820内存映射,由域构建器构建。 HVM域构建器通常会将内存布局信息传递给Bochs仿真器,然后Bochs仿真器执行所需的任务。

要掌握NVRAM页面,您必须为NVRAM构建单独的MMU。该MMU应该处理所有NVM页面并按需分配/释放它,就像RAM页面一样。这是很多工作。