CPU寄存器和主内存大小的关系

CPU寄存器和主内存大小的关系

我读过这个邮政但我还有一个问题。

我理解 32 位处理器意味着寄存器长度为 32 位,每个寄存器2^32最多可容纳 10 ...

答案1

每个最多可容纳 2^32 个数据

不。32 位寄存器可以保存 32 位数据。它的一种可能用途是用于范围从 0 到 (2^32)-1 的整数,即 0 到 4,294,967,295(含)。

32 位处理器支持 4GB 可寻址内存是什么意思?

如今,“内存”这个术语太模糊了。当任何人谈论“内存”时,他们都需要明确他们谈论的是物理内存(通常是 RAM)还是虚拟内存。对于这两者,还有一个额外的概念“地址空间”——因此我们有物理地址空间(机器上所有 RAM 必须适合的物理地址集)和虚拟地址空间(所有定义的虚拟内存都存在于其中的虚拟地址集)。

当地址转换启用时(在任何现代操作系统上,地址转换在启动后不久就会启用,并且一直保持这种状态直到关机),CPU 引用的所有地址都被解释为虚拟地址。32 位 x86 CPU 仅限于 4 GB虚拟地址空间. 有几个原因。一个原因是 x86 中有许多上下文,其中各种寄存器用于保存地址。两个重要的例子是指令指针 (EIP) 和堆栈指针 (ESP)。使用 x86 上的 32 位寄存器,虚拟地址只能高达 (2^32)-1。即 4 GiB。32 位虚拟地址限制的另一个原因是 32 位虚拟地址是地址转换机制(页表和所有这些)支持的全部。段描述符也是如此,尽管现代操作系统不怎么使用它们,但它们仍然在“地址转换”路径中,不能被忽略。

在 Windows 上,这通常意味着每个进程有最多 2 GiB vas 用于其代码和数据,而操作系统有另外 2 GiB 用于它是代码和数据。但是,每个进程都会获得该 2 GiB 的另一个实例,因此系统上所有进程使用的总 vas 可能远高于 4 GiB。

但是,您的问题似乎集中在 RAM 上。如果我们谈论的是 x86,并且作者所说的“内存”指的是 RAM,则意味着作者不知道 1995 年以来的发展(Pentium Pro,它是第一个实现物理地址扩展 (PAE) 的处理器,也是 Xeon 的前身)。

更一般地说,这意味着他们不知道虚拟内存是如何工作的。他们假设 RAM 地址受处理器的通用寄存器限制,但一旦在处理器上启用分页,情况就不是这样了——在任何现代操作系统上,这种情况总是存在的。启用分页后,运行代码声明的每个地址都会通过一组称为页表的表转换为物理地址。因此,物理地址的最大大小受“页表条目”的大小限制,而不是受 CPU 中的寄存器限制。

在英特尔在 ia32 上实现的原始分页方案中,物理地址与虚拟地址一样被限制为 32 位。但是,如果操作系统将 CPU 置于“PAE”模式,则物理地址的宽度可以是 36 到 52 位(具体取决于处理器系列 - 在 Pentium Pro 和第一代 Xeon 上的第一个 PAE 实现中为 36 位)。

(这并不是什么新鲜事。业界历史上充斥着物理地址大小与机器寄存器宽度不同的 CPU。例如,PDP-11 是一个 16 位 CPU,但支持高达 4 MB 的 RAM。)

因此,几乎所有现代“32 位”x86 处理器都可以寻址至少 64 GiB RAM(2^36 字节)。

但请注意,平台(芯片组和主板)必须配合使用 - 许多主板的 RAM 限制低于 CPU 可以支持的 RAM 限制。请查看主板手册或规格。

要使用超过 4 GB 的 RAM,您还需要一个支持此功能的操作系统。Windows 32 位“客户端”版本、XP SP2 及更高版本不支持此功能 - 它们仅限于 4 GB RAM。(Windows“客户端”版本是名称中没有“服务器”的任何版本。)它们也仅限于 RAM地址适合32位。

但这并不是因为芯片或操作系统是 32 位,而是因为 Microsoft 编译到 Windows 中的人为限制。他们这样做是因为他们发现某些供应商的设备驱动程序(尤其是视频卡驱动程序)在具有超过 4 GB RAM 的机器上使用时会导致崩溃:

[...] 有问题的客户端驱动程序生态系统导致了 [32 位] 的决定客户版本会忽略超过 4 GB 的物理内存,即使理论上可以解决这个问题。— Russinovich、Solomon 和 Ionescu:Windows Internals,第 6 版,第 2 部分,“Windows 客户端内存限制”部分,第 321 页(强调添加)

请注意,32 位 Windows Server 版本可以使用超过 4 GiB 的 RAM。远不止 4 GiB。因此,32 位操作系统并不一定意味着 RAM 限制为 4 GiB(正如人们经常声称的那样)。Windows 上的 4 GiB RAM 限制客户版本(实际上,如果您的 I/O 设备占用了大量物理地址空间,那么最终会略大于 3 GiB)不是架构限制。这是一个人为的限制,被放入系统中以保护系统免受编写不当的第三方设备驱动程序的影响。

如果我有 8GB RAM,是否意味着它超出了必要的范围?

如果您的 BIOS 识别出有 8 GB RAM,那么某些操作系统将能够全部使用它。但如果您运行的是 32 位 Windows以外价格更高的服务器版本,那么是的;操作系统不会使用超过 4 GB 的 RAM。在这种情况下,您应该安装 Linux 或 64 位版本的 Windows,以充分利用您的所有 RAM。

相关内容