12

我正在阅读“现代操作系统”一书。我对“页面大小”感到困惑。

在书中,作者说,

传入的 16 位虚拟地址分为 4 位页码和 12 位偏移量。使用 4 位作为页码,我们可以有 16 个页面,使用 12 位作为偏移量,我们可以寻址一个页面内的所有 4096个字节。

为什么是 4096 字节?使用 12 位,我们可以解决一个页面内的 4096 个条目,正确。但是,一个条目是一个地址(在这种情况下,地址大小 = 16 位)。所以我认为我们可以寻址 4096(entry) * 16(bit) = 4096(entry) * 2(byte) = 8KB,但是为什么书上说我们可以寻址 4096(bytes) 呢?

提前致谢!:)

4

5 回答 5

12

这是假设字节寻址的内存(过去 30 年制造的几乎每台机器都使用它),所以每个地址指的是一个字节,而不是一个条目或地址或任何其他更大的值。要保存 16 位值,您需要两个连续的地址(两个字节)。

30 多年前,曾经有一些机器是文字寻址的,就像你想象的那样工作。但是这种机器在处理面向字节的数据(例如 ASCII 字符)时遇到了困难,因此已经失宠。如今,字节寻址能力、8 位字节和二进制补码整数之类的东西几乎只是假设。

于 2010-09-12T05:06:58.570 回答
3

12 位是页内的偏移量。偏移量以字节为单位,而不是地址。2^12 是 4096。

于 2010-09-12T05:08:59.503 回答
0

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

于 2014-04-17T16:13:53.540 回答
0

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

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

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

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

于 2016-10-03T12:53:20.217 回答
0

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

于 2020-04-27T17:07:27.923 回答