gpt4 book ai didi

linux - 如何从 struct page 获取 struct vm_area_struct

转载 作者:太空狗 更新时间:2023-10-29 12:36:26 25 4
gpt4 key购买 nike

基本上,我需要识别使用页面的进程或任务,并相应地做出一些关于是否允许页面换出的决定。因为内核 AFAIK 中的交换模块主要处理 struct page,所以我想知道是否缺少一些现有的技巧。来自 include/linux/mm_types.h (v >= 2.6),以下注释:

  • 系统中的每个物理页面都有一个与之关联的结构页面
  • 它跟踪我们正在使用该页面的目的
  • 时刻。请注意,我们无法跟踪哪些任务正在使用
  • 一个页面,如果它是一个页面缓存页面,rmap 结构可以告诉我们
  • 谁在绘制它。

建议我们可以通过一些物理到虚拟的反向映射来做到这一点,但我无法从 rmap 函数(在 mm/rmap.c 中)中弄清楚如何实现我正在寻找的东西。

在此先感谢您的帮助,非常感谢。

最佳答案

要回答您的实际问题“如何从 struct page 获取 struct vm_area_struct”,至少有两个答案。

对于匿名页面,您可以使用 page_anon_vma(),它返回一个 anon_vma - 它存储在带有特殊标志的 page->mapping 中设置以指示它不是 struct address_space(以节省空间)。

anon_vma,您可以遍历anon_vma_chain,每个入口都指向一个vma。从 vma 您可以获得 mm 然后是 a 任务。

有关示例,请参见 page_referenced_anon()

对于文件页面,您查看 page->mapping,这是一个 struct address_space,然后从那里走 i_mmap,它是一个 struct prio_tree_root。请参阅 page_referenced_file()

我不确定这是否真的能帮助您实现您的想法,但就这样吧。

关于linux - 如何从 struct page 获取 struct vm_area_struct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10265188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com