将虚拟地址转换为物理地址,然后在linux中将缓存设置为no

时间:2013-10-25 18:59:06

标签: linux gcc operating-system virtual-memory computer-architecture

我在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位物理地址空间。

提前谢谢。

0 个答案:

没有答案