用户空间中可以findmmap页面的不清楚吗?

可以在Linux 2.6.30以上的用户空间访问(非共享)mmap页面的不洁性? 平台特定的黑客和kludges欢迎。

理想情况下,我正在寻找一个位数组,每个页面(4kB?)的mmap'ed区域,如果该页面已经被写入,因为该区域已经被mmap化,这些数据被设置。

(我知道,编写这个程序可以跟踪这些信息,但是如果内核正在这样做的话,这样做似乎很愚蠢。)

谢谢,

克里斯。

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

请参阅fs / proc / task_mmu.c,Documentation / vm / pagemap.txt,Documentation / vm / page-types.c。

传统的解决方案是将mprotect只读,然后处理sigsegv并在重新保护之前将其标记为允许写入。 很早以前我们就在ObjectStore做过这个事情。

generic_writepages和balance_dirty_pages_ratelimited_nr似乎是与脏页面有关的入口点(2.6.20)。 我希望他们也能在2.6.30以上工作。 有趣的问题,我可以问你在写什么需要对页面进行控制吗?

这些数据会持续过时 – 当您的流程看到页面变脏时,页面可能会被写回。

也就是说, /proc/pid/smaps方法是将其映射为单页块,然后查看/proc/pid/smaps以查看块是否脏 – 即如果内核合并页面,则可能会失败。

不幸的是,由于页表对于用户空间进程是不可见的,所以没有某种内核补丁就可以做到最好。

如果您的位数组足够小,也许您可​​以使用英特尔上的调试寄存器(尽管我不确定它是如何在Linux上完成的)。