11

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

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。有人可以简要描述一下硬盘的寻址方案吗?

4

2 回答 2

13

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

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

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

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

这导致 1024*1024 Bytes 被称为 MiB 和 1000*1000 Bytes 被称为 MB

2 - 可寻址单元

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

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

  • 32 位 CPU(没有MMU!)可以寻址 2^32 字节或 4 GiB
  • 所有现代 32 位 CPU 都包含一个 MMU,它将这 4 GiB 的虚拟地址空间映射到一个物理地址空间
  • 这个物理地址空间的大小可以与 4 GiB 不同,这是 MMU 使用多于(或在史前时代少于)32 条物理地址线的函数。今天最常见的实现是 36 个或更多物理位,导致 16*4 GiB 或更多(PAE 或物理地址扩展)
  • 这个 MMU 魔法不适用于在 32 位模式下运行的 CPU,即对于每个进程,地址空间不能大于 4 GiB
  • 为了让事情变得更有趣,这个地址空间的一部分用于我所知道的每个现代操作系统的内核功能。这导致所有主流操作系统每个进程的最大可用地址空间为 2 GiB 或 3 GiB。
  • 而且这仍然太简单了:操作系统必须支持在实际可以使用超过 4 GiB 物理 RAM 的模式下运行 MMU。一个显着的例子是 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。
于 2013-05-31T04:46:58.010 回答
-1

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

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

于 2013-05-31T04:36:51.843 回答