试图理解为什么页面大小是2的幂?

时间:2009-09-01 15:51:34

标签: binary paging bit-manipulation

我读到了这个:

  

回想一下,分页是通过实现的   将地址分解为页面和   抵消数量。这是最有效的   将地址分成X页位和   Y偏移位,而不是执行   算术上的地址来计算   页码和偏移量。因为   每个位位置代表一个功率   2,分割地址之间   bits导致页面大小为a   2的力量。

我不太明白这个答案,有人可以给出更简单的解释吗?

8 个答案:

答案 0 :(得分:15)

如果要将(线性)地址转换为page:offset,则需要将地址除以页面大小,并将整数答案作为页面,将提醒作为偏移量。

这是使用编程语言中的整数除法和模数(MOD,“%”)运算符完成的。

计算机将地址表示为数字,存储为二进制位。

这是一个示例地址:12是二进制1100.

如果页面大小为3,那么我们需要计算12/3和12%3才能找到页面和偏移量(分别为4:0)。

但是,如果页面大小为4(2的幂),则二进制中的4为100,并且可以使用特殊的“快捷方式”计算整数除法和模数:您可以去除最后两个二进制数字以进行除法,并且你只能保留模数的最后两位二进制数字。所以:

12/4 == 12>>2(转移删除最后两位数字)

12%4 == 12&(4-1)(4-1 = 3是二进制11,'&'(AND)运算符只保留那些)

答案 1 :(得分:2)

使用2的功能可以提高硬件效率,这就是硬件设计人员所做的事情。考虑一个具有32位地址的cpu和一个n位页码:

+----------------------+--------------------+
| page number (n bits) | byte offset (32-n) |
+----------------------+--------------------+

该地址被发送到虚拟存储器单元,该存储器单元直接分离页码和字节偏移,而根本不进行任何算术运算。即,它将32位值视为位数组,并且具有(或多或少)直接连接到每个位的线。这允许存储器硬件并行提取页码和字节偏移,而不执行任何算术运算。

同时,这种方法需要在位边界上进行分割,这会直接导致2页幂的大小。

答案 2 :(得分:1)

如果您拥有 n 二进制数字,那么您可以编码2个 n 不同的值。

给定一个地址,您的描述会指出一些位将用于页面,一些位用于偏移。当您使用一定数量的二进制位作为偏移量Y时,页面大小自然是2的幂,特别是2 Y

答案 3 :(得分:0)

因为数据的表示。页面偏移量设置页面的大小,并且由于数据以二进制表示,因此您将使用n个位来定义偏移量,因此您将拥有大小为2 ^ n的页面。

假设您有一个类似于10011001的地址,并将其拆分为1001:1001,用于page:offset。由于您有4位来定义偏移量,因此页面的大小为2⁴。

答案 4 :(得分:0)

如果不是2的精确幂,那么某些内存地址将无效。例如,如果页面大小是5字节,那么为了区分每个字节,我们需要在地址的偏移部分中使用3位。因为使用2位只能解决4个字节。但是对于5字节页面使用3位偏移保持两个地址未使用。这就是为什么页面大小应该是.......

答案 5 :(得分:0)

因为所有地址都是二进制的并且被分成f和d,f =帧号,d =偏移量。由于人的大小是2,人类无需进行大量的数学计算,只需通过观察地址位即可识别出f和d。如果页面大小为2 ^ n,则物理地址的最后n位表示偏移量,其余位表示页码。 希望这个答案能帮到你。

答案 6 :(得分:0)

我意识到我没有得到的是 页面大小是2的幂。我后来发现:

在最小级别,页面为1位(0或1),偏移量为1位(0或1)。将这些组合在一起,页面大小将是2 x 2(或2 ^ 2),因为它们都具有的位数(每个2个,所以2 x 2)。

现在,如果页面/偏移量较大,则n x n - n是它们都具有的位数。

答案 7 :(得分:0)

页面编号总是在2的幂中为(2 ^ n)。 有几个原因: 1.内存地址也在2 ^ n,因此移动页面会更容易。 2.有两个位代表页面:   a.Page no。 b.Offset没有   所以,这也是原因。 3.Memory是量化形式,如电荷(q)。