当前位置: 首页 > 面试题库 >

如何在Linux中解码/ proc / pid / pagemap条目?

房子昂
2023-03-14
问题内容

我试图破译如何使用/ proc / pid / pagemap来获取给定页面集的物理地址。假设从/ proc / pid /
maps中获得了与堆相对应的虚拟地址afa2d000-afa42000。我的问题是如何使用此信息遍历页面地图文件并找到对应于地址afa2d000-afa42000的物理页面框架。

/ proc / pid / pagemap条目为二进制格式。有什么工具可以帮助解析此文件?


问题答案:

试试这个
http://www.eqware.net/Articles/CapturingProcessMemoryUsageUnderLinux/
它可以为您解析页面地图,例如,如果您感兴趣的虚拟地址在堆中,即0x055468:= 0004c000-0005a000 rw-p 00000000
00:00 0 [heap]:86000000000FD6D6:0600000000000000
:0600000000000000
:86000000000FE921
:86000000000FE922
:0600000000000000
:86000000000FD5AD
:86000000000FD6D4
:86000000000FD5F8
:86000000000FD5FA => 9th

假设页面大小为4KB,并且(0x055468-0x4c000)mod 4K =
9,则页面的页面帧号为第9个页面帧==>:86000000000FD5FA因此物理pfn为0xFD5FA000(取最后55位和次数)页面大小)加上偏移量:(0x055468-0x4c000-9 * 4K)= 0x468 ==>物理地址为0xFD5FA000 + 0x468 = 0xFD5FA468



 类似资料:
  • 问题内容: 我正在努力弄清标题中提到的两个文件。我查了一下是什么。但是,我无法理解如何从他们那里提取有用的信息(或者我只是以错误的方式来对待)。 让我解释一下:页面映射是一个相当新的“功能”伪文件,其中包含分配给当前[pid]的虚拟页面的物理框架信息。也就是说,给定一个从地址x开始的虚拟页面,比如说“ vas”代表虚拟地址开始,我可以使用vas为页面地图文件建立索引,以获取映射的物理页面框架的64

  • 问题内容: 有没有人成功地使用Linux内核2.6 mmap’ing / proc / pid / mem文件?我收到ENODEV(无此类设备)错误。我的电话看起来像这样: 而且我在调试时通过查看/ proc / pid / maps文件进行了验证,当执行到达此调用时,offset的值等于堆栈顶部减去PAGE_SIZE的值。我还用ptrace验证了mmap将errno设置为ENODEV。 问题答案

  • 问题内容: 我对/ proc / pid / smaps中的pss列感到困惑,因此我编写了一个程序对其进行测试: 在这里,我发现pss等于Private_Dirty,但是我想知道为什么。 顺便说一句:是否有任何详细的文档? 问题答案: 从wnn.net报价 进程的“比例集大小”(PSS)是它在内存中具有的页面数,其中每个页面除以共享它的进程数。因此,如果一个进程自身拥有1000页,并且与另一个进程

  • 问题内容: 我试图了解嵌入式Linux应用程序的内存使用情况。该实用程序/文件似乎是查看详细信息的好资源。不幸的是,我不理解所有的列和条目。 匿名索引节点0条目是什么意思?这些似乎是一些较大的内存段。 问题答案: 中的每一行都描述了进程或线程中连续虚拟内存的区域。每行都有以下字段: 地址 -这是进程地址空间中区域的开始和结束地址 权限 -描述如何访问区域中的页面。有四种不同的权限:读取,写入,执行

  • 问题内容: 对于具有非常长的类路径的Java应用程序,使用ps时,看不到arg列表末尾附近指定的主类。我认为这源于我的Ubuntu系统对/ proc / pid / cmdline的大小限制。如何增加此限制? 问题答案: 您无法动态更改,限制已在内核中硬编码为fs / proc / base.c中的PAGE_SIZE:

  • 问题内容: 从Linux发出此命令时: 最后两个数字是多少? 最后一个每秒保持增加2,我应该担心吗? 问题答案: 最后一个是系统在过去15分钟内的工作量。 / proc / loadavg 该文件的前三个字段是平均负载数字,给出了运行队列(状态R)或等待磁盘I / O(状态D) 在1、5和15分钟内平均 的作业数。它们与正常运行时间(1)和其他程序给出的平均负载数相同。 第四个字段由两个数字组成,