为什么16位地址和12位偏移量会导致4KB的页大小?

13
我正在阅读《现代操作系统》这本书,但是“页面大小”一章让我感到困惑。
在书中,作者说:
“传入的16位虚拟地址被分成一个4位页号和一个12位偏移量。使用4个位于页号,我们可以有16个页面,并且使用12位偏移,我们可以寻址页面内的所有4096字节。”
为什么是4096字节?使用12位,我们可以寻址一个页面内的4096个条目(entry),这个是正确的。但是一个条目是一个地址(在这种情况下,地址大小=16位),所以我认为我们可以寻址4096(entry) * 16(bit) = 4096(entry) * 2(byte) = 8KB。但是为什么这本书说我们只能寻址4096(字节)?
提前谢谢! :)
5个回答

12
假设使用字节寻址内存(过去30年中几乎每台机器都使用),因此每个地址都指的是一个字节,而不是一个条目或地址或任何其他更大的值。要容纳16位值,您需要两个连续的地址(两个字节)。
30多年前,曾经有一些被称为字寻址的机器,它们的工作方式就像您所猜测的那样。但是这种机器在处理面向字节的数据(如ASCII字符)时遇到了麻烦,因此已经不再受欢迎。现在,诸如字节可寻址性、8位字节和二补码整数等功能都被认为是理所当然的。

我在70年代和80年代使用过一台大型主机,它是按字寻址的。它们提供了一个选项,可以添加硬件,允许您直接寻址字节或BCD字符。 - dbasnett
非常感谢。这个答案解决了我在作业中遇到的很多不确定性。 - Armada
目前有使用字寻址的处理器,但它们都倾向于是专门的嵌入式类型,如数字信号处理器(DSP)。我曾经参与过一个项目,在那个机器上最小可寻址单元为16位。在那台机器上,sizeof(char) == sizeof(int) == 1。对于字符字符串来说这是浪费的,但是这个应用程序只有非常适度的8位数据使用,所以浪费并不是问题。 - Peter Camilleri

3

这12位是页面内的偏移量。偏移量以字节为单位,而非地址。2^12等于4096。


1
因为使用12位,我们可以寻址2^12=4096个插槽。每个插槽代表一个地址,在字节寻址内存中大小为1字节。因此总大小为4096*1=4096字节=4KB。

0
你正在计算的是页面大小,即内存中页面表中页面的大小。由于我们使用12位偏移量,因此物理内存中的每个帧为2^12=4096K。但是,页面表中的每个页面占用内存中的2^12个条目x 2字节= 8K。

0

好的,所以您有16位虚拟地址,让我们看看这意味着什么。这意味着您有2**16 = 65536字节。

4位页码表示有16个页面,如2^4 = 16。 现在您将页面命名为page1、page2...page16。

现在我们还剩下12位,让我们看看12位可以表示多少地址,2**12=4096字节

65536字节也可以通过将其分成16个包含每个4096字节的页面来实现,即4096*16=65536


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接