【问题标题】:Math behind 4GB limit on 32 bit systems32 位系统上 4GB 限制背后的数学
【发布时间】:2023-03-21 02:25:01
【问题描述】:

我有一个关于 32 位内存地址的非常基本的问题。我的理解是 2^32 是 32 位系统上可能的内存地址的最大数量。我感到困惑的是我们如何从这个数字到所谓的 4GB 限制。在我的研究中,我看到 some people 这样做:

2^32 = 4,294,967,296 字节

4,294,967,296 / (1,024 * 1,024) = ~4 GB

首先,这个 (1,024 * 1,024) 是从哪里来的?

其次,如果我错了,请纠正我,但是 4,294,967,296 被标记为字节,因为字节是 RAM 中可以寻址的最小存储空间单位。由于我们被限制为 2^32 个地址,这就是可以寻址的字节数。

第三,尽管 RAM 中最小的可寻址空间是一个字节,但硬盘驱动器肯定不是这种情况,因为 32 位系统通常有超过 4 GB 的硬盘空间。谁能简要介绍一下硬盘的寻址方案?

【问题讨论】:

    标签: binary 32bit-64bit


    【解决方案1】:

    这是一个基本算术的例子:每个寻址单元的字节数乘以可寻址单元的数量等于可寻址的字节数。

    困难的部分是,从哪里获得这些数字。这是我的看法:

    1 - 什么是千字节、兆字节、千兆字节?

    • 对于 RAM,已同意,千兆字节为 1024 兆字节,每个由 1024 千字节组成,每个字节为 1024 字节。这源于这样一个事实,即 1024 是 2^10,但足够接近 1000,历史上允许使用 Kilo 前缀
    • 对于存储,供应商多年前就开始使用严格的十进制单位,1 兆字节为 1000000 字节(因为它使容量在光面小册子中看起来更大)

    这导致 1024*1024 字节被称为 MiB,1000*1000 字节被称为 MB

    2 - 可寻址单元

    • 对于 RAM,可寻址单元是字节,即使它是以至少 4 个块从物理 RAM 中提取的。
    • 对于大容量存储,可寻址单元是扇区或块,最常见的是 512 字节,但 4096 字节很快赶上。

    3 - 可寻址单元的数量要复杂得多,让我们从 RAM 开始:

    • 32 位 CPU(sans MMU!)可以寻址 2^32 字节或 4 GiB
    • 所有现代 32 位 CPU 都包含一个 MMU,它将这 4 GiB 的虚拟地址空间映射到一个物理地址空间
    • 这个物理地址空间的大小可以不同于 4 GiB,这是 MMU 使用多于(或在史前时期少于)32 条物理地址线的函数。今天最常见的实现是 36 个或更多物理位,导致 16*4 GiB 或更多(PAE 或物理地址扩展)
    • 这个 MMU 魔法在 CPU 运行在 32 位模式下工作,即对于每个进程,地址空间不能大于 4 GiB
    • 为了让事情变得更有趣,这个地址空间的一部分用于我所知道的每个现代操作系统的内核功能。这导致所有主流操作系统的每个进程的最大可用地址空间为 2 GiB 或 3 GiB。
    • 因为这仍然太简单了:在一个模式下运行 MMU,它实际上可以使用超过 4 GiB 的物理 RAM,操作系统必须支持。一个显着的例子是 Windows XP 32 位,它不允许这样做。
    • 最后但同样重要的是:物理地址空间的一部分最常用于内存映射硬件。如果这与上述操作系统限制相结合,则会导致 Windows XP 32 位有时只能使用 2.5 到 3.5 GiB 的物理 RAM

    存储的麻烦要少得多:

    • 在我所知道的所有基于 PC 的现代案例中,可寻址单元仅以 32 位或 48 位(LBA 或逻辑块寻址)计数。即使在它的最基本版本中,这对于 每个磁盘 的 2 TiB 存储也足够了(2^32 个块,每个块 512 字节)。具有 48 位 LBA 和每块 4 KiB 的最大版本导致 ca。每个磁盘有 Gazillion TiB。

    【讨论】:

    • 谢谢。所以除以 1024^2 只是将单位从字节转换为 MiB,得到 4096 MiB 或 ~4 GiB。我不知道以 2 为底和以 10 为底的值有单独的单位,因此也感谢您指出这一点。
    • 对存储部分的一个有用的扩展是解释每个有很多字节的块通常不能被多个文件共享(除非压缩)。因此,如果您的块每个为 512 字节,即使是 1 个字符的文件(即 1 字节)仍会将剩余可用空间减少 512 字节。
    • @DanHenderson 块是否只能保存来自一个或多个文件的数据是文件系统的属性,而不是块设备的属性。虽然您当然是正确的,但通常的嫌疑人(extN、FAT、NTFS)持有这样的限制,但其他人(如 squashfs)肯定没有。
    【解决方案2】:

    计算机并不全是内存。 32 位是组织指令集的最大位置。 64 位为您提供更多位来引用更多内存。我认为那些人的意思是 4,294,967,296 位组合而不是字节(8 位)。

    至于数学 - 这似乎意味着除了指定可能的内存地址之外,还有 20 位保留用于其他用途。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2012-12-02
      • 2017-06-05
      • 1970-01-01
      • 2011-08-20
      相关资源
      最近更新 更多