Memory management 已分配给定物理地址的进程的信息?

Memory management 已分配给定物理地址的进程的信息?,memory-management,linux-kernel,Memory Management,Linux Kernel,我正在调试内核内存损坏问题。从我所拥有的资源中,我能够发现一个地址(物理)03a08000(每次都在变化),虚拟的c3a08000正在被覆盖 现在我想知道分配这个内存的进程。我该怎么做 简而言之,我的问题是,如何找到已分配给定物理地址的进程的名称(进程ID或任何信息) 如果我对我的问题不清楚,请告诉我 编辑:忘了提到我有完整的内存转储(完整的2GB ram),通过我们可以映射内存中的所有进程。PageMap工具由两个独立的命令行实用程序组成: page collect.c-收集内存“快照”;在目

我正在调试内核内存损坏问题。从我所拥有的资源中,我能够发现一个地址(物理)03a08000(每次都在变化),虚拟的c3a08000正在被覆盖

现在我想知道分配这个内存的进程。我该怎么做

简而言之,我的问题是,如何找到已分配给定物理地址的进程的名称(进程ID或任何信息)

如果我对我的问题不清楚,请告诉我

编辑:忘了提到我有完整的内存转储(完整的2GB ram),通过我们可以映射内存中的所有进程。PageMap工具由两个独立的命令行实用程序组成:

page collect.c-收集内存“快照”;在目标平台上运行。
page-analyze.cpp-分析内存“快照”并生成报告;在任何平台上运行

编辑------

要调试崩溃转储,可以使用和其他。分析为快速概述碰撞和碰撞。关于崩溃的完整教程

重新编辑。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 我不太确定你的问题,但当我们分析时;一开始是

linux:/var/crash/20111222 # crash System.map-2.6.32.49-0.3-default \
vmlinux-2.6.32.49-0.3-default.gz vmcore

然后我们可以通过
ps
列出所有进程,它还显示
PID
物理地址
两者。

崩溃工具中有一个名为
showmap
的命令。这将告诉确切的pid以及该进程使用的所有内存。 这正是我要找的信息

Kmem
显示有关相关流程细节的更好统计信息

crash > kmem <address>
crash>kmem

所以“损坏”的物理地址“每次都在变化”,但虚拟地址是相同的吗?@sawdust我相信op提供了一个示例虚拟地址,并不意味着它们总是获得相同的virt-->phys映射。“损坏”是由某个未知的应用程序引起的。@正如您可能知道的,您引用的虚拟地址似乎是内核地址,这意味着任何“损坏”您的数据的东西都在内核中。如果您能精确定位访问此内存的代码或模块,您就可以通过几个策略性的printk()语句来确定导致这些更改的进程。@sawdust虚拟地址也在不断变化。@BenjaminLeinweber是的,我知道它在内核空间中。请注意,这不是每次都可以复制的。我确认linux没有过度写入内存。其他模块(无线子系统)通过DMA从外部非法访问它。所以现在我收集了这次故障后的ramdump。所以我不想知道覆盖它的过程的细节。我做了一些测试,幸运地得到了PC值。我想知道创建地址的过程(使用kmalloc等…)正在损坏。我使用的是开源的崩溃工具。这些信息非常有用。谢谢你。但是现在我已经有一个垃圾桶了。我的上下文不是一个正在运行的系统。我有一个事故转储,我想调查一下。尽管你提供的信息很有用。我将进行这些更改,并尝试重现崩溃。如果您能建议一些方法来调试崩溃转储而不是实时系统,我将不胜感激;希望他们可以帮助你。嗨@jhonnash我已经在使用同一个崩溃工具,并从我的组织方面添加了一些功能。但是我看不到任何有用的命令来告诉我物理地址的进程名。这些*.ppt可能会帮助您。在这个lcrash中有命令t物理地址。。!!!!你说的是abt vtop命令吗?它将虚拟地址转换为物理地址。而不是与之关联的流程。但这些文件非常有用+1.