永发信息网

Linux如何获取进程在物理内存中的所有内容?当进程在内存中的内容发生变化时,又如何获知?内核中实现

答案:3  悬赏:10  手机版
解决时间 2021-02-27 07:51
  • 提问者网友:绫月
  • 2021-02-26 13:45
Linux如何获取进程在物理内存中的所有内容?当进程在内存中的内容发生变化时,又如何获知?内核中实现
最佳答案
  • 五星知识达人网友:英雄的欲望
  • 2021-02-26 14:22
/proc/meminfo 不能反映每个进程的内存使用
这些东西只在/proc/xxxx/下的statm maps memmap 里有体现
你只需要查看这些虚拟文件在linux内核的实现即可

例如cat /proc/1/statm ,出来的7组数据里,第二组就是进程1的物理内存使用量,单位是当前内核的PAGE_SIZE
具体说明详见 Documentation/filesystems/proc.txt

具体实现就是fs/proc/array.c 下的

C/C++ code?123456789101112131415int proc_pid_statm(struct seq_file *m, struct pid_namespace *ns, struct pid *pid, struct task_struct *task){ unsigned long size = 0, resident = 0, shared = 0, text = 0, data = 0; struct mm_struct *mm = get_task_mm(task); if (mm) { size = task_statm(mm, &shared, &text, &data, &resident); mmput(mm); } seq_printf(m, "%lu %lu %lu %lu 0 %lu 0\n", size, resident, shared, text, data); return 0;}
这个函数改成你需要的结果,只有一个难点,就是根据pid得到对应的 task_struct。
不知道有没现成的api。遍历查找一下全局 task_struct链表应该不难解决
全部回答
  • 1楼网友:上分大魔王
  • 2021-02-26 16:49
在驱动程序中可以 用内存映射 phy 映射陈viraddr
  • 2楼网友:掌灯师
  • 2021-02-26 15:42
当程序在运行的时候,会检测到数据在虚拟内存中,并没在物理内存中,这时候会产生一个缺页中断, 有缺页中断来映射。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯