我有一个与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的硬盘。有人可以简要介绍一下硬盘的寻址方案吗?

最佳答案

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

困难的部分是从何处获得这些数字。这是我的看法:

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

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

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

    2-可寻址单元
  • 对于RAM,即使从物理RAM中以至少4个块的形式获取它,可寻址单元也是该字节。
  • 对于大容量存储,可寻址单位是扇区或块,通常为512字节,但是4096字节可以快速 catch 。

  • 3-可寻址单元的数量要复杂得多,让我们从RAM开始:
  • 一个32位CPU(MMU的 sans !)可以寻址2 ^ 32字节或4 GiB
  • 所有现代的32位CPU都包括一个MMU,它将这4 GiB虚拟地址空间映射到物理地址空间
  • 作为MMU的功能,此物理地址空间的大小可以与4 GiB不同,而MMU则使用的物理地址空间多于32个物理地址线(或在史前时间中小于)。当今最常见的实现是36个或更多物理位,从而产生16 * 4 GiB或更多(PAE或物理地址扩展名)
  • 此MMU魔术不能在32位模式下运行的CPU上而不是起作用,即,对于每个进程,地址空间都不能大于4 GiB
  • 为了使事情变得更有趣,我所知道的每个现代OS中,该地址空间的一部分都用于内核功能。对于所有主流OS,这导致每个进程最大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的最大化版本导致大约每个磁盘Gazillion TiB。
  • 关于binary - 32位系统上的4GB限制后的数学运算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16849702/

    10-10 18:23
    查看更多