【问题标题】:Why 16-bit address with 12-bit offset results in 4KB page size?为什么 16 位地址和 12 位偏移量会导致 4KB 页面大小?
【发布时间】:2011-04-11 06:21:20
【问题描述】:

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

作者在书中说,

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

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

提前致谢! :)

【问题讨论】:

    标签: memory-management operating-system virtual-memory memory-mapping


    【解决方案1】:

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

    30 多年前,曾经有过文字寻址的机器,其工作方式与您猜想的一样。但这类机器在处理面向字节的数据(如 ASCII 字符)时遇到了困难,因此已经失宠。如今,字节可寻址性、8 位字节和二进制补码整数之类的东西几乎只是假设。

    【讨论】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-21
            • 1970-01-01
            • 2022-09-24
            • 1970-01-01
            • 2017-07-01
            相关资源
            最近更新 更多