数学在32位系统上限制为4GB

cad*_*arp 10 binary 32bit-64bit

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

Eug*_*eck 12

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

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

1 - 什么是Kilobyte,Megabyte,Gigabyte?

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

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

2 - 可寻址单元

  • 对于RAM,可寻址单元是字节,即使它是从物理RAM中以至少4个块的形式提取的.
  • 对于大容量存储,可寻址单元是扇区或块,最常见的是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 2GB的
  • 为了使事情变得更有趣,这个地址空间的一部分用于我所知道的每个现代操作系统中的内核功能.这导致所有主流操作系统的每个进程有2 GiB或3 GiB最大可用地址空间.
  • 而且这仍然太简单了:操作系统必须支持在一个模式下运行MMU,实际上它可以使用超过4 GiB的物理RAM.一个值得注意的例子是Windows XP 32 Bit,它不允许这样做.
  • 最后但并非最不重要:物理地址空间的一部分最常用于内存映射硬件.如果这与上述操作系统限制相结合,则会导致Windows XP 32位有时只能使用2.5到3.5 GiB的物理RAM

这不是一个存储麻烦:

  • 在我所知道的所有基于PC的现代案例中,可寻址单元只需32或48位(LBA或逻辑块寻址).即使在最基本的版本中,这足以使每个磁盘有 2 TiB的存储空间(每个512字节的2 ^ 32块).每个块具有48位LBA和4 KiB的最大版本导致ca. 每盘大量的TiB.