我在linux中使用gcc。我已经声明了两个 1 MB 和 4KB 大小的数组。我能够为两个数组生成虚拟地址。现在我想计算虚拟地址到物理地址的映射( VPN --> PFN ),然后计算物理地址到缓存设置没有映射。
对于第一部分,我已经浏览了 /proc/pid/maps 和 /proc/pid/pagemap ,但它令人困惑。我无法从该文件中一一理解并找出两个阵列的 VPN-PFN。
这是我的文件 /proc/pid/maps 的内容
00602000-00625000 rw-p 00000000 00:00 0 [heap]
34d7a00000-34d7a22000 r-xp 00000000 08:01 6037385 /lib64/ld-2.14.90.so
34d7c21000-34d7c22000 r--p 00021000 08:01 6037385 /lib64/ld-2.14.90.so
34d7c22000-34d7c23000 rw-p 00022000 08:01 6037385 /lib64/ld-2.14.90.so
34d7c23000-34d7c24000 rw-p 00000000 00:00 0
34d7e00000-34d7fad000 r-xp 00000000 08:01 6037386 /lib64/libc-2.14.90.so
34d7fad000-34d81ad000 ---p 001ad000 08:01 6037386 /lib64/libc-2.14.90.so
34d81ad000-34d81b1000 r--p 001ad000 08:01 6037386 /lib64/libc-2.14.90.so
34d81b1000-34d81b3000 rw-p 001b1000 08:01 6037386 /lib64/libc-2.14.90.so
34d81b3000-34d81b8000 rw-p 00000000 00:00 0
7ffff7ed8000-7ffff7fdc000 rw-p 00000000 00:00 0
7ffff7ff8000-7ffff7ffe000 rw-p 00000000 00:00 0
7ffff7ffe000-7ffff7fff000 r-xp 00000000 00:00 0 [vdso]
7ffffffde000-7ffffffff000 rw-p 00000000 00:00 0 [stack]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
1MB 数组的位置是 0x7ffff7ed8010 - 0x7ffff7fd800f ( & Array1[0] -- &Array[N-1]) 4KB 数组的位置是 0x602010 - 0x60400f ( & Array2[0] -- &Array[P-1])
谁能帮我弄清楚 1MB 数组和 4KB 数组的对应条目是什么。
注意:从 /proc/cpuinfo 我了解到,在我的系统中,48 位虚拟地址空间,36 位物理地址空间。
先感谢您。