pagemap

/proc/pid/pagemap文件保存了某个进程每个虚拟地址对应的内存状态。

代码

这个文件创建在fs/proc/base.c中,存放在tid_base_stuff[]数组中。也就是每个进程都该有的proc文件里.

对应到的operation是proc_pagemap_operations。当我们读取则合格文件时,调用的是其中的pagemap_read()函数。

格式

63      55 54   ...   0
┌────────┬────────────┐
│ 标志位  │   PFN/SWAP │
└────────┴────────────┘

文件中每64bit,存储了对应虚拟地址映射的物理页的状态。

比如:

  • pfn

  • 是否存在

  • 是否脏

具体可以参考pagemap_read()函数中的注释。

使用

比如在tools/testing/selftests/mm/split_huge_page_test.c中,就通过这个文件获取进程中虚拟地址的物理地址。

Last updated