C 如何在Linux内核中找到具有页面的进程?
我正在做一个关于Linux内核mm(内存管理)的项目 对于一个页面,我需要找到该页面所属的进程 但是,我无法找到任何不修改内核的方法。 所以,我真的想知道是否有可能在不修改内核的情况下做到这一点 具体来说,当我有一个VMA时,也可以将VMA转换成相应的页面,我想知道VMA或页面属于哪个进程 例如,在mm/page_io.c(linux内核源代码树的)中: 在我标记为“这里!”的地方,我应该按照我上面所说的去做。 我在等你的好答案。C 如何在Linux内核中找到具有页面的进程?,c,linux,linux-kernel,C,Linux,Linux Kernel,我正在做一个关于Linux内核mm(内存管理)的项目 对于一个页面,我需要找到该页面所属的进程 但是,我无法找到任何不修改内核的方法。 所以,我真的想知道是否有可能在不修改内核的情况下做到这一点 具体来说,当我有一个VMA时,也可以将VMA转换成相应的页面,我想知道VMA或页面属于哪个进程 例如,在mm/page_io.c(linux内核源代码树的)中: 在我标记为“这里!”的地方,我应该按照我上面所说的去做。 我在等你的好答案。 谢谢大家! 您的同事可能会提供帮助。您能否提供一些代码,显示您希
谢谢大家! 您的同事可能会提供帮助。您能否提供一些代码,显示您希望在其中实现所请求功能的上下文?一般来说,您的问题是清楚的,但上下文可能会提供额外的可能性;执行grep xxx/proc/$PID/maps;完成?齐瓦列夫//哦,对不起。我添加了一个代码段。jww//谢谢您的建议:-)
int __swap_writepage(struct page *page, struct writeback_control *wbc,
void (*end_write_func)(struct bio *, int))
{
struct bio *bio;
int ret, rw = WRITE;
struct swap_info_struct *sis = page_swap_info(page);
...
ret = bdev_write_page(sis->bdev, swap_page_sector(page), page, wbc);
if (!ret) {
count_vm_event(PSWPOUT);
/* I should figure out what process is having the page above.
* But it is hard to know, because page is managed in LRU and
* it is not directly related to its process. What hints I have
* are page struct and some data structures which I could
* infer from the page only.
*/
// here!