Linuxでgccを使用しています。1 MB と 4 KB のサイズの 2 つの配列を宣言しました。両方のアレイの仮想アドレスを生成できました。ここで、仮想アドレスから物理アドレスへのマッピング ( VPN --> PFN ) を計算し、物理アドレスからキャッシュ セットのマッピングを計算したいと考えています。
最初の部分では、 /proc/pid/maps と /proc/pid/pagemap を調べましたが、ややこしいです。そのファイルから、両方のアレイの VPN-PFN を 1 つずつ理解して把握することができません。
ここにファイル /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ビットの物理アドレス空間を知りました。
前もって感謝します。