The real problem I'm trying to solve is, how can I find out if the OS maps two virtual addresses to the exact same physical region?
Eg in the below smaps
example, how do I know if both memory regions are, in fact, physically identical?
cat /proc/<pid>/smaps
...
7f7165d42000-7f7265d42000 r--p 00000000 00:14 641846 /run/shm/test (deleted)
Size: 4194304 kB
Rss: 4194304 kB
Pss: 2097152 kB
...
VmFlags: rd mr mw me nr sd
7f7265d42000-7f7365d42000 rw-s 00000000 00:14 641846 /run/shm/test
Size: 4194304 kB
Rss: 4194304 kB
Pss: 2097152 kB
...
VmFlags: rd wr sh mr mw me ms sd
...
Bonus: Is there a way to simply do it programmatically in C ?
I tried to look for duplicates but could not find a pertinent one.
On Linux you can do it by parsing files in /proc/<pid>
, namely, maps
and pagemap
. There is a little user-space tool that does it for you here .
Compile it (no special options are needed), run page-types -p <pid> -l -N
, find the virtual page address in the first column, read the physical address in the second column.
It should be straightforward to turn this into a library and use programmatically. Bear in mind that some operations of the utility require root access (such as reading /proc/kpageflags
), however, none is needed for this task.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.