5

我正在参加一个操作系统课程,其中讲师提到了 32 v/s 64 位架构。

我对我的架构类的这种差异的理解是 32 位与 64 位表示 CPU 字长、寄存器大小以及 ALU 可以执行计算的大小。

导师说:“今天使用的是 64 位架构,所以进程的虚拟地址空间大小是 64 位。”

请问32位v/s 64位是否也表示一个进程的虚拟地址空间大小是否是32位v/s 64位?如果不是,虚拟地址空间大小是否对架构类型(32 位/64 位)有任何依赖性。

4

2 回答 2

9

不可以。即使您拥有 64 位架构,虚拟地址空间也需要小于总虚拟可寻址空间,以便为操作系统提供运行空间。

每个进程分配多少空间取决于操作系统。与 32 位架构相比,64 位架构表明操作系统将为进程使用更大的默认进程空间。分配多少默认进程空间取决于操作系统。在 Windows 64 位中,进程的默认虚拟地址空间为 8 TB(在 64 位字节可寻址系统上总共有 2 ^ 24 可寻址 TB),而在 32 位中,它只有 2 GB(4 GB 可寻址全部的)。其他剩余内存是为 32 位系统中的操作系统保留的(不确定为什么在 64 位系统中该进程被限制为相对较低的数量)。

在 32 位架构上,这些默认值可以在 Windows 上(以及通过其他方法在 Linux 上,我敢肯定)更改为 2 GB - 3 GB 之间的任何位置,但最后一个 GB 必须始终为操作系统保留。

这并不意味着进程必须是 64 位架构中的 64 位。64 位操作系统可以通过兼容模式在 64 位架构上运行 32 位进程。正如 John Saunders 所指出的,有些 64 位体系结构具有 32 位处理器,无需兼容模式即可运行 32 位进程。Intel 的 Itanium 处理器就是一个例子。

32 位架构可以通过使用物理地址扩展(PAE) 来扩展进程的内存空间,以使用完整的 4 GB 内存,尽管Windows PAE允许 64 - 128 GB 的物理内存,具体取决于处理器。

这意味着单个32 位进程可能使用 PAE 可以“看到”多达 4 GB 的主内存,但仅此而已。据我所知,在可预见的将来,任何进程都不会使用接近 2 ^ 64 字节的空间,因此 PAE 不用于 64 位系统。


超出您问题范围的所有内容:

存在虚拟地址空间,因此操作系统可以为每个进程分配比实际可用更多的进程空间。它还存在以允许保护进程空间并通过虚拟机监视器(VMM) 启用虚拟化。使用 VMM 对进程空间的这种保护允许虚拟化指令集架构。这就是允许人们在 Windows 中的 VM 上运行 Linux 的原因(请注意,处理器硬件和操作系统都必须支持虚拟化才能实现这一点)。

与 32 位相比,64 位架构优势的最常见/最简单的示例是具有超过 4 GB RAM/主内存的系统。32 位系统通过 PAE 最多只能使用 4 GB 的物理/主内存/RAM,但 64 位系统可以轻松地允许进程寻址不需要 PAE 更多的内存。请记住,2^32 位 = 4 * 1024 * 1024 * 1024 = 4 GB。32 位地址空间中的每一位代表字节可寻址系统中的 1个字节

于 2014-04-12T23:43:21.197 回答
0

32 位与 64 位架构的限制来自您可以存储在 32 位 cpu 寄存器中以访问地址的数字的最大大小。即使内存可能在那里,您也需要将指向内存的地址值存储在寄存器中,以供汇编命令(push、mov、pop、store)使用,以便将值放入这些内存位置。一个 64 位寄存器可以存储 2^64 个不同的值 - 一个非常大的数字(16 exbibytes),32 位只能存储 2^32 个值 = 4GB。

于 2014-04-13T00:08:44.527 回答