我读到了这个:
回想一下,分页是通过实现的 将地址分解为页面和 抵消数量。这是最有效的 将地址分成X页位和 Y偏移位,而不是执行 算术上的地址来计算 页码和偏移量。因为 每个位位置代表一个功率 2,分割地址之间 bits导致页面大小为a 2的力量。
我不太明白这个答案,有人可以给出更简单的解释吗?
答案 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)。