我在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阵列的LOcation是0x602010 - 0x60400f(& Array2 [0] - & Array [P-1])
任何人都可以帮我弄清楚,1MB阵列和4KB阵列的相应条目是什么。
注意:来自/ proc / cpuinfo我在我的系统48位虚拟地址空间中了解了36位物理地址空间。
提前谢谢。