3

在 Linux 内核中,给定task_structsmm我可以访问进程的vm_area_structs 列表。给定这些vm_area_structs,我如何获得struct page实际对应于这个 vma 的 s?

我尝试在 mm/memory.c 等中寻找函数,但不知所措。

编辑:想法是找出 vma 中的哪些页面当前在内存中,哪些不在内存中。但我希望有人告诉我该怎么做,因为这是我需要自己弄清楚的家庭作业的一小部分。但我似乎无法弄清楚如何找到与这个 vma 对应的页面。如果我能找到这些页面,我想我可以检查它们是否有有效的 pfn。

4

2 回答 2

1

从您的评论到另一个答案(编辑:另一个答案似乎已被删除),您似乎想从用户空间读取。获取用户空间页面的功能是get_user_pages(),但这很可能不是您想要的;你可能想要copy_from_user/ copy_to_user

于 2008-11-18T19:40:10.017 回答
0

我没有直接的答案,但是使用 lxr.linux.no 导航结构不会花很长时间

鉴于您已经有了想要开始的结构,请查看http://lxr.linux.no/linux+v2.6.29/+code=vm_area_struct。您可以查找定义,查看使用单个结构的位置等...如果您已经知道要查找的最终结构名称,则可以反向并向上导航直到到达 mm。

请注意,如果您的网络连接不太好,您可能希望通过获取发行版的 lxr 包并在本地生成索引来安装索引源的本地副本。过去在 400mhz / 128mb 机器上需要 2 个小时,现在它应该快得多。

于 2009-05-19T20:54:50.837 回答