我有一个与 32 位内存地址相关的非常基本的问题。我的理解是2^32是32位系统上可能的内存地址的最大数量。我感到困惑的是我们如何从这个数字达到所谓的 4GB 限制。在我的研究中我看到有些人 http://www.zdnet.com/blog/hardware/clearing-up-the-3264-bit-memory-limit-confusion/3124做这个:
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,人们一致认为 1 Gigabyte 为 1024 MB,每个兆字节由 1024 KB 组成,每个 KB 为 1024 字节。这是因为 1024 是 2^10,但足够接近 1000,历史上允许使用 Kilo 前缀
- 对于存储,供应商多年前就开始严格使用十进制单位,1 兆字节为 1000000 字节(因为它使容量在精美的手册中看起来更大)
这导致 1024*1024 字节被称为 MiB,1000*1000 字节被称为 MB
2 - 可寻址单元
- 对于 RAM,可寻址单元是字节,即使它是以至少 4 个块的形式从物理 RAM 中获取的。
- 对于海量存储,可寻址单位是扇区或块,最常见的是 512 字节,但 4096 字节也很快赶上。
3 - 可寻址单元的数量要复杂得多,让我们从 RAM 开始:
- 32 位 CPU(sansMMU!)可以寻址 2^32 字节或 4 GiB
- 所有现代 32 位 CPU 都包含一个 MMU,它将这 4 GiB 虚拟地址空间映射到物理地址空间
- 该物理地址空间的大小可以不同于 4 GiB,具体取决于 MMU 使用多于(或在史前时期少于)32 条物理地址线。当今最常见的实现是 36 个或更多物理位,从而产生 16*4 GiB 或更多(PAE 或物理地址扩展)
- 这个 MMU 魔法可以做到not围绕以 32 位模式运行的 CPU,即对于每个进程,地址空间不能大于 4 GiB
- 为了让事情变得更有趣,在我所知道的每个现代操作系统中,该地址空间的一部分都用于内核功能。这导致最大 2 GiB 或 3 GiBusable所有主流操作系统的每个进程的地址空间。
- 因为这仍然太简单了:在操作系统必须支持的模式下运行 MMU,它实际上可以使用超过 4 GiB 的物理 RAM。一个显着的例子是 Windows XP 32 位,它不允许这样做。
- 最后但并非最不重要的一点是:物理地址空间的一部分最常用于内存映射硬件。如果这与上述操作系统限制相结合,则会导致 Windows XP 32 位有时只能使用 2.5 到 3.5 GiB 的物理 RAM
存储方面的麻烦要少得多:
- 在我所知道的所有现代基于 PC 的情况下,可寻址单元只是用 32 或 48 位(LBA 或逻辑块寻址)来计数。即使在最基本的版本中,2 TiB 的存储也足够了per disk(2^32 个块,每个块 512 字节)。具有 48 位 LBA 和每块 4 KiB 的最大输出版本导致大约。每个磁盘有 Gazillion TiB。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)