加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

pagemap的解读

(2013-10-18 14:53:22)
标签:

pagemap

原理

解读

proc

maps

it

分类: Android技术
pagemap是linux中一组新的接口集合,他通过读取/proc中的文件允许用户态的程序检查页表以及相关的信息。
它主要有3个组成部分:
(1)/proc/pid/pagemap:这个文件允许一个用户态的进程查看到每个虚拟页映射到的物理页,每一个虚拟页都包含了一个64位的值,信息如下:
Bits 0-54: page frame number(PFN) if present
Bits 0-4:  swap type if swapped
Bits 5-54: swap offset if swapped
Bits 55-60:page shift 
Bit 61:   reserved ofr future use
Bit 62:   page swapped
Bit 63:   page present
    如果这个page是在swap状态,然后PFN包含一个编码的交换文件号码,再将页的offset值写入swap中。没有映射的页就返回一个null PFN。这样就可以精确判断一个page是映射的或是swap的,并且可以比较不同进程间的映射页。
    我们可以利用/proc/pid/maps去判断内存中哪块区域是被映射的,然后通过llseek就可以跳过没有映射的区域。
(2)/proc/kpagecount:这个文件包含一个64位值,该值表示每个page被映射的次数,通过PFN索引。
(3)/proc/kpageflags:这个文件包含每一个page的64位的标记集,通过PFN索引。
通过pagemap查看一个进程的内存使用情况的一般步骤如下:
(1)读取/proc/pid/maps文件确定内存空间的哪个部分被映射;
(2)选择你感兴趣的maps,比如全部、一部分或者堆栈什么的;
(3)打开/proc/pid/pagemap,定位到你准备去检查的pages;
(4)通过pagemap读取每一个page的64位值;
(5)打开/proc/kpagecount以及/proc/kpageflags。对于每一个PFN你只要去读,定位到文件中的那个入口,然后读取你想要的数据。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有