在Linux内核中,给定task_struct
的{{1}}我可以访问进程的mm
列表。鉴于这些vm_area_struct
,如何获得与此vma实际对应的vm_area_struct
?
我尝试在mm / memory.c等中寻找功能,但我不知所措。
编辑:想法是找到vma中哪些页面当前在内存中,哪些页面不在内存中。但我不希望有人告诉我如何做这一点,因为这是我需要自己解决的家庭作业的一小部分。但我似乎无法弄清楚如何找到与此vma对应的页面。如果我能找到这些页面,我想我可以查看它们是否有有效的pfn。
答案 0 :(得分:1)
从你的评论到另一个答案(编辑:其他答案似乎已被删除),似乎你想从用户空间读取。获取用户空间页面的功能是get_user_pages()
,但这很可能不是您想要的;您可能需要copy_from_user
/ copy_to_user
。
答案 1 :(得分:0)
我手边没有直接答案,但使用lxr.linux.no
导航结构不会花费太多时间鉴于您已经拥有了想要开始的结构,请查看http://lxr.linux.no/linux+v2.6.29/+code=vm_area_struct。您可以查找定义,查看单个结构的使用位置等等...如果您已经知道要查找的最终结构名称,则可以反向导航直到达到mm。
请注意,如果您的网络连接不太好,您可能希望通过获取发行版的lxr软件包并在本地生成索引来安装索引源的本地副本。在400mhz / 128mb的机器上过去需要2个小时,现在它的速度要快得多。