c - 如何找出物理内存的哪些部分包含哪些进程的数据/指令?

标签 c linux operating-system kernel process

我想知道当前正在运行的进程的代码和数据在 RAM 中的物理位置。如果有可能以图形方式表示此分布,则应该非常有用,以便不同的进程 ID 是具有不同颜色的点。如何以及从哪里获得这些信息?看起来/proc 没有提供它。我应该编写内核模块还是传统的用户空间应用程序也可以检索此类信息(如果是 - 如何?)?

最佳答案

我 100% 同意“你为什么会这样?”评论。

但如果你确实需要它,内核模块就可以做到。
给定当前地址空间中的虚拟地址(如果您在从进程完成的系统调用中运行,即当前进程),您可以将其转换为物理地址。
依次使用宏pgd_offset_kpud_offsetpmd_offsetpte_offset,应该可以得到物理地址.

@Daniel 的回答将帮助您了解您想要的地址。

您也可以尝试使用mem_map[i].address_space。它应该包含每个物理页面的一些所有权信息。我真的不知道如何理解它。

请注意,流程之间可能存在重叠。由多个进程加载的库(例如 libc)可能在物理内存中只有一个副本。

关于c - 如何找出物理内存的哪些部分包含哪些进程的数据/指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9113025/

相关文章:

c - 使用 printf 的 Linux 的 gotoxy() 实现

c - 没有结果!!使用 fork() 使用 dup2 运行带有 2 个管道的 execlp()

Linux 和内存泄漏

linker - 如何提供或删除对 _GLOBAL_OFFSET_TABLE_ 的依赖?

c - 访问未对齐的结构成员

html - C替换字符串中的html标签

c - 我找不到我的代码的问题

linux - 如何在同一台 linux 物理机上运行两个 couchDB 实例

linux - 在 centos 7 上同步确认后的 socket 鳍

operating-system - 父进程在写时复制期间会失去写能力吗?