1

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

对于页大小为 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 位,我我只是迷失了他如何进一步简化这个!

我不知道是我写错了数字(他的字迹确实很邋遢)还是什么!

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

4

1 回答 1

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 是分层的,条目紧密排列,条目与自然边界对齐。想必你稍后会在课堂上讲到。

于 2012-11-07T14:56:50.117 回答