16、32 和 64 位系统中的内存限制

16、32 和 64 位系统中的内存限制

16、32、64位机器的理论内存限制如下:

  • 16 位 = 65,536 字节(64 千字节)

  • 32 位 = 4,294,967,296 字节(4 千兆字节)

  • 64 位 = 18,446,744,073,709,551,616(16 EB)

我记得从 DOS / Windows 3.11 时代开始,16 位内存可以分成几段,这样 16 位机器可以访问大于 64 KB 的内存。

我有一台内存为 16GB 的机器,并且同时启动 32 位操作系统和 64 位操作系统。我可以从 64 位操作系统访问所有 16GB,但只能在 32 位操作系统中访问 3.21GB。

所以,我的问题是:如果 16 位操作系统由于内存分段而允许超过 64KB 的内存访问,那么为什么 32 位机器不遵循相同的原则?

答案1

确实如此,这个系统被称为物理地址扩展 (PAE)。以下是Windows 操作系统及其最大内存,任何允许超过 4GB RAM 的 32 位系统都使用 PAE 来访问内存(例如,Windows 2003 R2 Datacenter 32 位允许 128GB RAM)。


事实上 Windows 8需要支持 PAE 的 CPU最低要求


回答你“未问”的问题,为什么你的 32 位操作系统无法访问内存(如果存在):许可。他们选择不允许他们的 32 位操作系统的内存超过 4GB,除非你购买数据中心版本(这就是为什么他们出售数据中心版本,如果你需要有那么多的内存,你可能有能力在操作系统上花更多的钱)。

答案2

我不会亲自解释,而是让​​必须维护支持 PAE 的内核的人 Linus Torvalds 以他迷人的方式来讲。

还要记住,Windows 32 位版本中的 PAE 支持价格不菲。XP 甚至无法正常使用全部 4 GiB 的 RAM,因为 MS 选择不启用其上的 PAE 功能。与之密切相关的内核 Windows 2003 Server 支持 PAE。但是,即使在那里,“标准版”也只支持最多 4 GiB(但可以解决 BIOS 内存漏洞问题),而更昂贵的版本则允许最多 64 GiB 的 RAM。对于32 位 Vista

然而,并非在所有情况下这是 Windows 强加的限制。如果是,启动启用 PAE 的 Linux 内核仍将使您能够使用完整的 4 GiB(或更多)。但事实并非如此,一些硬件制造商选择在 BIOS 级别强加此限制,尽管 CPU 和芯片组能够处理 PAE。


附注:目前没有一款基于 x86 的 64 位处理器能够寻址整个 64 位地址空间身体上(以供参考看到这个问题和答案)。

答案3

8 位 CPU 通常具有 16 位地址总线。(摩托罗拉有统一的地址总线,RAM 和外围 I/O 共享相同的地址空间,而英特尔选择将两者分开。对于英特尔来说,8088 和 8086 的 IO 地址限制继承了 8080 和 8085 CPU 的限制。)

Intel 的 8088 和 8086 具有 20 位内存地址总线(1MB),而 Motorola 的 68000 具有 24 位地址总线(16 MB)。如果我没记错的话,[80]286 跳转到了 24 位地址总线。两者后来分别通过 [80]386 和 68020 扩展到 32 位地址总线。)随着 Pentium 芯片的出现,地址总线扩展到 64 位。(我认为 Motorola/IBM 合资的 PowerPC 芯片也采用了 64 位地址总线。)

CPU 可直接访问的最大内存容量仅受支持硬件芯片(芯片组)和操作系统的限制。比尔盖茨曾因说过没有人需要超过 640K 的 RAM 而闻名,因此 DOS 从未发展到直接访问更多 RAM。借助 HiMem.sys 和 EMM386,DOS 扩展为访问更多“上层”内存,其中 EMM386 可用于直接访问所有可用 RAM。HiMem.sys 的灵活性较差,基本上可以使用额外的 RAM 进行存储。

超过该限制的内存需要 MMU(内存管理单元)将内存分成多个段并将其映射到 CPU 的可寻址内存空间中。这就是 CoCo 3、Commodore 128 和其他 8 位计算机能够访问超过 64K RAM 的方式。

现在更有利的方法是使用虚拟内存来扩展物理内存限制,尽管受到操作系统施加的限制。

答案4

16、32 和 64 位机器的理论内存限制如下......

这里的根本缺陷是,处理器的“位宽”(通常是机器通用寄存器的大小)必然与 RAM 地址的宽度相同。

在启用分页但没有 PAE 的 x86 中,程序和操作系统代码使用的地址被 Intel 称为“线性地址” - 我们通常称之为“虚拟地址”。它们是 32 位宽。这允许 4 GiB 的虚拟地址空间。

但这或多或少是巧合,仅仅是页表条目格式的一个产物,物理(RAM)地址的大小也是 32 位。

使用 PAE 时后者为 36 位(起初……在后续实现中会更宽)。因此,仅仅因为它是一台“32 位机器”并不意味着物理内存地址被限制为 32 位。

该行业有一个长的“位宽”与其最大物理地址大小不匹配的机器的历史。例如,VAX 架构定义了一台 32 位机器,虚拟地址(地址转换打开后代码使用的地址)确实是 32 位宽……但 VAX 的物理地址只有 30 位宽 - 并且一半的物理地址空间专用于 I/O 设备寄存器,因此最大 RAM 仅为 512 MiB。

即使没有地址转换硬件,机器的“位宽”也不一定能定义最大 RAM 地址。例如:CDC“上 3000”系列是 36 位机器。你认为它们能寻址 64 GiB 的 RAM 吗?不可能!这些机器是在 60 年代中期问世的!哎呀,我们甚至连 64 GB 的 RAM 都无法寻址。磁盘空间在那些日子里。(CDC 6000 系列是 60 位机器。我还需要继续说吗?)

相关内容