虚拟区域到页面

时间:2008-11-18 18:45:58

标签: c linux memory-management linux-kernel kernel

在Linux内核中,给定task_struct的{​​{1}}我可以访问进程的mm列表。鉴于这些vm_area_struct,如何获得与此vma实际对应的vm_area_struct

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

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

2 个答案:

答案 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个小时,现在它的速度要快得多。