计算虚拟内存表的大小?

时间:2012-11-06 18:06:39

标签: memory memory-management virtual-memory

这不是一个家庭作业问题,这是我们在课堂上经历的一个问题,但我的教授在最后一部分时失去了我。这是:

虚拟内存表对于页面大小为1KB的16GB虚拟内存有多大?

首先我们确定了物理内存页数 = 64MB / 1024 =(2 ^ 6 * 2 ^ 20)/ 2 ^ 10 = 2 ^ 16 = 65,536  *这意味着我们有65,536个可能的地址,地址块必须至少为16-
  位长(有效标志加1位,脏标志加1)

其次我们确定了虚拟内存页数 =(2 ^ 34)/(2 ^ 10)= 2 ^ 24

下一部分,我们实际计算VMT的大小是他失去了我!

(2 ^ 24 * 16位)+(2 ^ 24 * 1位)+(2 ^ 242 * 1位)//我明白这个

(2 ^ 24 * 2)+(2 ^ 21)+(2 ^ 21)= //不知道他是如何得到这些数字的

2 ^ 25 + 2 ^ 21 + 2 ^ 21 = 32MB + 2MB + 2MB = 36MB //不知道他是怎么做到的

所以VMT的大小显然是36MB

所以基本上我了解所有内容,直到最后一部分的最后两步。我知道我们做“(2 ^ 24 * 16位)+(2 ^ 24 * 1位)+(2 ^ 242 * 1位)”因为我们有2 ^ 24个VM页面,每个页面都有18位,I'我只是迷失了他如何进一步简化这一点!

我不知道我是否写下了错误的数字(他的手写非常草率)或者是什么!

所以任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:2)

从你的问题:

  

(2 ^ 24 * 16位)+(2 ^ 24 * 1位)+(2 ^ 24 * 1位)//我明白这个

     

=(2 ^ 24 * 2)+(2 ^ 21)+(2 ^ 21)= //不知道他是如何得到这些数字的

他在这一步中将位转换为字节。因此,16位变为“2”,并且1位变为字节的1/8,即(1 /(2 ^ 3))个字节,当乘以2 ^ 24时得到2 ^ 21。

以下是中间步骤:

= (2^24 * 2 bytes) + (2^24 * 1/8 bytes)     + (2^24 * 1/8 bytes)
= (2^24 * 2 bytes) + (2^24 * 1/(2^3) bytes) + (2^24 * 1/(2^3) bytes)
= 2^25             + 2^21                   + 2^21

然后将字节转换为MB可以获得32MB + 2MB + 2MB。

这是此设置中VMT大小的理论界限。将18位条目打包到页面中对于查找来说效率不高(实际上,18位条目不能均匀地适合1k页面,455条目除了1k的2位之外都是如此)。标志位可以与打包的16位页码分开存储,以保持对齐和密度(或者可以忽略问题,您只需要数学查找18位条目)。考虑到物理内存有多大的虚拟内存,根据定义,地址空间将是稀疏的(除非您将同一页面映射到多个位置),因此这种打包的线性表示将浪费更多的空间。在现实世界中,VMT是分层的,条目紧凑,条目与自然边界对齐。大概你会在课后得到。 :)

相关问题