【发布时间】:2015-10-26 22:33:29
【问题描述】:
我有文件,描述进程的 32 位虚拟地址空间的结构。例如:
- 08048000-08053000 r-xp 00000000 08:03 18877 /usr/bin/cat
- 08053000-08054000 r--p 0000a000 08:03 18877 /usr/bin/cat
- 08054000-08055000 rw-p 0000b000 08:03 18877 /usr/bin/cat
- 091e3000-09204000 rw-p 00000000 00:00 0 [堆]
- 4f2d0000-4f2ef000 r-xp 00000000 08:03 1857 /usr/lib/ld-2.15.so
- 4f2ef000-4f2f0000 r--p 0001e000 08:03 1857 /usr/lib/ld-2.15.so
- 4f2f0000-4f2f1000 rw-p 0001f000 08:03 1857 /usr/lib/ld-2.15.so
- 4f2f7000-4f4a2000 r-xp 00000000 08:03 1858 /usr/lib/libc-2.15.so
- 4f4a2000-4f4a3000 ---p 001ab000 08:03 1858 /usr/lib/libc-2.15.so
- 4f4a3000-4f4a5000 r--p 001ab000 08:03 1858 /usr/lib/libc-2.15.so
- 4f4a5000-4f4a6000 rw-p 001ad000 08:03 1858 /usr/lib/libc-2.15.so
- 4f4a6000-4f4a9000 rw-p 00000000 00:00 0
- b75c0000-b77c0000 r--p 00000000 08:03 57661 /usr/lib/locale/locale-archive
- b77c0000-b77c1000 rw-p 00000000 00:00 0
- b77d9000-b77da000 rw-p 00000000 00:00 0
- b77da000-b77db000 r-xp 00000000 00:00 0 [vdso]
- bf819000-bf83a000 rw-p 00000000 00:00 0 [堆栈]
x86 处理器上有一个两级虚拟内存。一页的大小为 4096 字节。一页目录包含 1024 条记录,每条记录大小为 4 字节。
如何计算虚拟内存表的总大小?
【问题讨论】:
-
你有没有试过自己做这个计算?
-
@MatsPetersson 我想这样做,但我不明白该怎么做。我想我可以计算非零偏移量(表中的 3 列)并乘以 4096,所以我得到了以字节为单位的大小。但我不确定,如果它是正确的方式。你能解释一下,我该怎么做?
-
所以,我的问题基本上是“尝试进行计算并解释你做了什么” - 这不完全是火箭科学,而是非常基本的计算。
-
@MatsPetersson 我向您解释,我不完全理解,我做得对。我向您描述了我使用的方法,并想知道它是否正确。你能回答我,如果它是正确的,或者解释如果它不是。
-
将上表中的尺寸乘以4096显然是不对的。