【问题标题】:Why does high-memory not exist for 64-bit cpu?为什么 64 位 cpu 不存在高内存?
【发布时间】:2016-06-07 19:39:31
【问题描述】:

虽然我试图了解 32 位 cpu 和 Linux 的高内存问题,但为什么 64 位 cpu 没有 high-memory problem

特别是虚拟内存在内核空间和用户空间的划分是如何改变的,使得64位cpu不存在高内存的需求?

谢谢。

【问题讨论】:

    标签: linux cpu-architecture virtual-memory


    【解决方案1】:

    32 位系统只能寻址 4GB 内存。在 Linux 中,这分为 3GB 的用户空间和 1GB 的内核空间。这 1GB 有时还不够,因此内核可能需要映射和取消映射内存区域,这会导致相当大的性能损失。内核空间是“高”1GB,因此得名“高内存问题”。

    64 位系统可以处理 大量 内存 - 16 EB - 所以这个问题不会在那里发生。

    【讨论】:

    • 为什么 32 位的同样问题不会发生在 64 位上?在 64 位系统中,当内核试图将物理内存映射到内核空间时,内核空间也是有限的。
    • 在 Linux 中,内核空间从 2^32 的前 1/4 增长到 2^64 的前 1/2——这对于这个宇宙来说已经足够了。
    【解决方案2】:

    对于 32 位地址,您只能寻址 2^32 字节的内存 (4GB)。所以如果你有更多,你需要用一些特殊的方式来解决它。使用 64 位地址,您无需特别努力即可寻址 2^64 字节的内存,而这个数字比地球上存在的所有内存都要大。

    【讨论】:

    • 该死的你先到了!
    • 谢谢。但在我的帖子中,32 位的高内存问题是en.wikipedia.org/wiki/High_memory。它对低内存设置了 896 MB 的限制。
    • 这不讨论任何问题。所以我仍然不确定你所说的“高内存问题”是什么意思。但我认为答案是一样的——只有 4GB,无论你为内核映射什么,都会剥夺你可以为用户空间映射的东西。
    • 来自维基百科文章的“问题”是当物理地址(PA)大小大于总的部分时,没有足够的虚拟地址(VA)空间来完全映射物理地址空间在专门用于该目的的操作系统部分中分配的 VA 空间(维基百科有点误导,因为 2GiB/2GiB [基于符号位] 划分最初很常见;3GiB/1GiB 是为了支持更大的应用程序空间而进行的调整。)。使用 47 位 VA 空间用于操作系统(在 x86-64 中),即使只有一半用于映射,也有 64 TiB 的 PA 空间可用。
    【解决方案3】:

    该位数是指处理器的字长。除其他外,字长是机器上内存地址的大小。内存地址的大小影响可以唯一引用的字节数。因此,通过一些简单的数学计算,我们发现在 32 位系统上最多存在 2^32 = 4294967296 个内存地址,这意味着您在数学上限制了大约 4GB 的 RAM。

    但是在 64 位系统上,您有 2^64 = 1.8446744e+19 可用的内存地址。这意味着您的计算机理论上可以引用近 20 EB 的 RAM,这比计算历史上任何人都需要更多的 RAM。

    【讨论】:

    • 谢谢。但在我的帖子中,32 位的高内存问题是en.wikipedia.org/wiki/High_memory。它对低内存设置了 896 MB 的限制。
    • @Tim 那篇文章是指对内核空间内存的限制,这是系统中的少数内存。一般不指内存。
    猜你喜欢
    • 2021-07-20
    • 2017-06-05
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 2021-11-26
    相关资源
    最近更新 更多