是否有一种方法可以通过给定的struct页面找到相应的struct task_struct? 我想要做的是,我想知道哪个KVM虚拟机在虚拟化环境中使用给定页面。并且task_struct添加了一个新的数据成员(即vm_id),这样一旦我通过给定的struc页面获得task_struct,我就可以获得vm id。 似乎没有直接的解决方案。但我不知道。
那么,做这些事情的正确方法是什么? 非常感谢!
答案 0 :(得分:1)
考虑到在Linux内核中实现了页面帧回收算法。为了实现PFRA,内核使用数据结构来查找使用将要回收的同一页面的所有页表条目。找到页面表时,如果定义了CONFIG_MM_OWNER,则也应找到task_struct。
到mm_struct的页面映射可能是1:N,到task_struct的页面映射也可能是1:N。
在文件./mm/rmap.c中,函数try_to_unmap_anon()和try_to_unmap_file(),有一些代码可以执行从页面结构到mm_struct的反向映射工作。
可以参考第17章,了解Linux内核,第3版了解PFRA实现细节。
答案 1 :(得分:1)
在linux中,kvm vm是一个普通的进程,有一个pid,许多vm结构作为正常任务,存档你想要的东西,我认为你需要编写一个内核模块并执行类似这样的事情Walking page tables of a process in Linux
答案 2 :(得分:0)
通常,不,因为许多页面在多个任务/进程(共享库,运行的程序的多个实例等)之间共享。我不熟悉内核结构提出替代解决方案,所以我会让其他人回答这个问题...