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

可以从用户空间中找到mmap页面的污秽吗?

  •  15
  • fadedbee  · 技术社区  · 15 年前

    在Linux2.6.30+下,是否可以从用户空间访问(非共享)mmap页面的脏?平台特定的黑客和Kludges欢迎。

    理想情况下,我在寻找一个位数组,每页一个(4KB?)mmap'ed区域的,如果该页自mmap'ed区域以来已写入,则设置该区域。

    (我知道,编写过程可以跟踪这些信息—但是如果内核无论如何都这样做,那么这样做似乎很愚蠢。)

    谢谢,

    克里斯。

    5 回复  |  直到 15 年前
        1
  •  12
  •   adobriyan    15 年前

    请参阅/proc/*/pagemap /proc/kpageflags接口。 首先告诉你一个地址的pfn,第二个告诉你给定pfn的脏位。

    参见fs/proc/task_mmu.c,documentation/vm/pagemap.txt,documentation/vm/page types.c。

        2
  •  5
  •   bmargulies    15 年前

    传统的解决方案是以只读方式进行保护,然后在重新保护以允许写入之前处理sigsegv和mark dirty。很久以前我们在ObjectStore就为了这个目的做了这个。

        3
  •  2
  •   vpit3833    15 年前

    generic_writepages balance_dirty_pages_ratelimited_nr 似乎是内核(2.6.20)中与脏页相关的入口点。我希望他们也能在2.6.30+上工作。有意思的问题,我能问一下你在写什么需要这样的控制页面吗?

        4
  •  1
  •   bdonlan    15 年前

    这些数据将不断过时-在您的进程看到页面变脏后,可能会写回该页面。

    也就是说,音调的方法是将它映射成一个页面块,然后查看 /proc/pid/smaps 要查看块是否脏——也就是说,如果内核合并页面,这可能会失败。

    不幸的是,由于页面表对用户空间进程不可见,所以最好不要使用某种类型的内核补丁。

        5
  •  0
  •   uvgroovy    15 年前

    如果您的位数组足够小,也许您可以使用Intel上的调试寄存器(尽管我不确定如何在Linux上进行调试)。