我正在参加操作系统类(class),其中讲师提到了 32 与 64 位架构。
我对这种与我的架构类别的差异的理解是,32 位与 64 位表示 CPU 字大小、寄存器大小以及 ALU 可以执行计算的大小。
导师说:“现在使用的是64位架构,因此进程的虚拟地址空间大小是64位。”
我想问32位v/s 64位是否也表示进程的虚拟地址空间大小是否是32位v/s 64位?如果不是,虚拟地址空间大小是否依赖于架构类型(32 位/64 位)。
最佳答案
没有。即使您拥有 64 位体系结构,虚拟地址空间也需要小于总虚拟可寻址空间,以便为操作系统提供操作空间。
每个进程分配多少空间取决于操作系统。 64 位架构表明,与 32 位架构相比,操作系统将为进程使用更大的默认进程空间。分配多少默认进程空间取决于操作系统。在 Windows 64 位中,进程的默认虚拟地址空间为 8 TB(64 位字节可寻址系统上总共有 2 ^ 24 个可寻址 TB),而在 32 位中只有 2 GB(4 GB 可寻址)全部的)。其他剩余内存是为 32 位系统中的操作系统保留的(不确定为什么在 64 位系统中该进程被限制为相对较低的数量)。
在 32 位架构上,这些默认值 can be changed on Windows (我确信在 Linux 上可以通过其他方法)到 2 GB - 3 GB 之间的任何位置,但最后一个 GB 必须始终保留给操作系统。
这并不意味着 64 位架构中的进程必须是 64 位。 64位操作系统可以通过兼容模式在64位架构上运行32位进程。正如 John Saunders 所指出的,有些 64 位架构具有可用于运行 32 位进程的 32 位处理器,而无需兼容模式; Intel 的 Itanium 处理器就是一个例子。
32位架构可以通过使用Physical Address Extensions来扩展进程的内存空间。 (PAE) 使用完整的 4 GB 内存,尽管 Windows PAE允许 64 - 128 GB 物理内存,具体取决于处理器。
这意味着单个 32 位进程可以使用 PAE“查看”最多 4 GB 的主内存,但仅限于此。据我所知,在可预见的将来,没有任何进程会使用接近 2 ^ 64 字节的任何地方,因此 PAE 不用于 64 位系统。
<小时/>所有超出您问题范围的内容:
存在虚拟地址空间,因此操作系统可以为每个进程分配比实际可用的更多的进程空间。它还允许保护进程空间并通过 Virtual Machine Monitor 启用虚拟化。 (VMM)。这种使用 VMM 对进程空间的保护允许虚拟化指令集架构。这使得人们可以在 Windows 中的虚拟机上运行 Linux(请注意,处理器硬件和操作系统都必须支持虚拟化才能实现这一点)。
64 位架构相对于 32 位架构的优势的最常见/简单示例是 RAM/主内存超过 4 GB 的系统。 32 位系统在使用 PAE 的情况下最多只能使用 4 GB 物理/主内存/RAM,但 64 位系统可以轻松地允许进程寻址远多于 PAE 的内存,而无需 PAE 。请记住,2^32 位 = 4 * 1024 * 1024 * 1024 = 4 GB。 32 位地址空间中的每一位代表字节可寻址系统中的 1 个字节。
关于architecture - 32 位与 64 位架构 - 虚拟地址空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23036497/