据我所知,Linux不会将所有父进程内存复制到子进程的单独页面中,它会执行写时复制。在任一进程修改(写入)映射(共享)页面中的某个内存位置之前,我们会将子虚拟地址空间和父虚拟地址空间映射到相同的物理内存位置(相同的物理页面)。
我想知道是否有可用的工具可以显示进程共享的物理内存页。或者任何给出虚拟地址->物理地址映射的工具。这样我就可以实际查看物理地址并检查进程是否映射到相同的物理内存。
谢谢。
发布于 2013-03-11 06:19:44
我不知道是否有专门的工具可用,但是所有需要的信息都应该已经通过/proc文件系统导出了。
您的问题中给出的特殊用例甚至在相关文档中也有明确提到。( linux-src-directory/Documentation/vm/pagemap.txt或online https://www.kernel.org/doc/Documentation/vm/pagemap.txt):
使用页面映射了解进程的内存使用情况的一般过程如下:
打开/proc/pid/
例如,要查找“唯一集大小”(USS),这是一个进程正在使用的未与任何其他进程共享的内存量,您可以遍历进程中的每个映射,找到PFN,在kpagecount中查找这些映射,并对仅被引用一次的页数进行总计。
https://stackoverflow.com/questions/15328163
复制相似问题