我想知道当前正在运行的进程的代码和数据在 RAM 中的物理位置。如果有可能以图形方式表示此分布,则应该非常有用,以便不同的进程 ID 是具有不同颜色的点。如何以及从哪里获得这些信息?看起来/proc 没有提供它。我应该编写内核模块还是传统的用户空间应用程序也可以检索此类信息(如果是 - 如何?)?
最佳答案
我 100% 同意“你为什么会这样?”评论。
但如果你确实需要它,内核模块就可以做到。
给定当前地址空间中的虚拟地址(如果您在从进程完成的系统调用中运行,即当前进程),您可以将其转换为物理地址。
依次使用宏pgd_offset_k
、pud_offset
、pmd_offset
、pte_offset
,应该可以得到物理地址.
@Daniel 的回答将帮助您了解您想要的地址。
您也可以尝试使用mem_map[i].address_space
。它应该包含每个物理页面的一些所有权信息。我真的不知道如何理解它。
请注意,流程之间可能存在重叠。由多个进程加载的库(例如 libc)可能在物理内存中只有一个副本。
关于c - 如何找出物理内存的哪些部分包含哪些进程的数据/指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9113025/