我了解 xen 会在来宾启动时分配来宾所需的所有物理内存。它还维护一个影子页表(我假设它使用 struct page_info 来维护它。我是对的吗?如果不是,谁能解释一下?)我希望访问它,因为我需要遍历该列表以检查来宾是否此页面分配给的至少访问过一次。
struct page_info {
union {
};
pointer next, prev;
union {
};
};
谁能解释我如何才能做到这一点?
我了解 xen 会在来宾启动时分配来宾所需的所有物理内存。它还维护一个影子页表(我假设它使用 struct page_info 来维护它。我是对的吗?如果不是,谁能解释一下?)我希望访问它,因为我需要遍历该列表以检查来宾是否此页面分配给的至少访问过一次。
struct page_info {
union {
};
pointer next, prev;
union {
};
};
谁能解释我如何才能做到这一点?
我了解 xen 会在来宾启动时分配来宾所需的所有物理内存。
可能。我认为当前的 Xen 工具栈确实做到了这一点,但是有人建议只为来宾的物理内存执行保留,而不实际执行分配,直到来宾实际访问它。这样做的动机是允许内存过量使用以增加允许内存膨胀的客户机的主机容量,并避免在运行之前为安全目的和隔离强制执行耗时的所有客户机内存清理。来宾。
它还维护一个影子页表
对于某些客人,在某些配置中,是的。它将为完全虚拟化(又名 HVM)来宾执行此操作,其中 Xen 不使用硬件扩展页表支持(例如 Intel EPT)。对于半虚拟化的客人,它不会这样做。
(我假设它使用 struct page_info 来维护它。我是对的吗?如果不是,有人可以解释吗?)
唔。影子页表是一个非常复杂和复杂的软件。他们使用多种数据结构来维护来宾的虚拟地址空间。我认为您需要详细研究代码才能掌握它。这超出了这里简短回答的范围。
我希望访问它,因为我需要遍历该列表以检查分配此页面的访客是否至少访问过一次。
您需要在访客页表中将该页标记为不存在,并修改 Xen 的影子页表代码中的页错误处理程序以将其修复为存在于陷阱中,但还需要更新您自己的数据结构以跟踪发生的访问. 有与此类似的代码用于跟踪访客页面访问的写入而不是读取,称为脏位图跟踪,用于执行虚拟机的实时迁移。
谁能解释我如何做到这一点?
如果您能解释您想要跟踪访客对物理内存位置的读取访问的动机,那将会有所帮助。