问题在标题中。
例子:
root@N34300 test # cat /proc/14023/maps
00400000-0041e000 r--p 00000000 08:01 654153 /bin/bash
0041e000-0049c000 r-xp 0001e000 08:01 654153 /bin/bash
0049c000-004cd000 r--p 0009c000 08:01 654153 /bin/bash
004ce000-004d1000 r--p 000cd000 08:01 654153 /bin/bash
004d1000-004da000 rw-p 000d0000 08:01 654153 /bin/bash
004da000-004e4000 rw-p 00000000 00:00 0
02152000-02194000 rw-p 00000000 00:00 0 [heap]
在这种情况下,问题专门针对前三页。为什么,当我将虚拟页面的起始地址转换为物理页面时,有时我会发现与其他进程匹配。即两个进程的第一页开始的物理地址可以相同。
00400000 -> 129f91000 (process1)
00400000 -> 129f91000 (process2)
通常,可执行应用程序代码从地址 00400000 加载。由于您的两个进程似乎相同(很可能是 bash),因此内核进行了众所周知的优化并使用同一块内存,以免在内存中复制数据。其他操作系统也这样做。由于此内存包含可执行代码,因此它是只读的,任何人都无法轻易更改它。如果有人想删除这样的标志,那么内存将被复制到单独的物理内存中,并且已经在那里进行了修改。