【发布时间】:2015-08-16 17:49:48
【问题描述】:
作为对Traversing all the physical pages of a process 和此处数据http://www.makelinux.net/ldd3/chp-15-sect-1 的回答的扩展,我有一个小问题。在建议遍历进程的物理页面的第一个答案中,
struct vm_area_struct *vma = 0;
unsigned long vpage;
if (task->mm && task->mm->mmap)
for (vma = task->mm->mmap; vma; vma = vma->vm_next)
for (vpage = vma->vm_start; vpage < vma->vm_end; vpage += PAGE_SIZE)
unsigned long phys = virt2phys(task->mm, vpage);
并参考标题“15.1.6. Virtual Memory Areas”下第二个链接中给出的示例,即
# cat /proc/1/maps look at init
08048000-0804e000 r-xp 00000000 03:01 64652 /sbin/init text
0804e000-0804f000 rw-p 00006000 03:01 64652 /sbin/init data
0804f000-08053000 rwxp 00000000 00:00 0 zero-mapped BSS
40000000-40015000 r-xp 00000000 03:01 96278 /lib/ld-2.3.2.so text
40015000-40016000 rw-p 00014000 03:01 96278 /lib/ld-2.3.2.so data
现在我的问题是,当我遍历时,第一个区域的 vm_start 和 vm_end 的值是 08048000 和 0804e000,还是 08048000 和 08053000(一个连续的块内存)。我可能应该编写一个程序并自己尝试,但我正在将这些数据用于另一个项目,如果有人能帮助理解这一点,那将非常有帮助。我基本上想知道,如果
08048000-0804e000 r-xp 00000000 03:01 64652 /sbin/init text
0804e000-0804f000 rw-p 00006000 03:01 64652 /sbin/init data
0804f000-08053000 rwxp 00000000 00:00 0 zero-mapped BSS
是属于进程的一个“模块”,是否有一个或多个vm_area_struct数据结构。
谢谢。
【问题讨论】:
标签: c linux linux-kernel filesystems mmap