代码之家  ›  专栏  ›  技术社区  ›  FreeMemory

虚拟区域到页面

  •  2
  • FreeMemory  · 技术社区  · 16 年前

    在Linux内核中,给定 task_struct mm 我可以访问进程的列表 vm_area_struct 虚拟区域结构 struct page 哪个和这个vma对应?

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

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

    2 回复  |  直到 15 年前
        1
  •  1
  •   CesarB    16 年前

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

        2
  •  0
  •   winden    15 年前

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

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

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