32位与64位架构-虚拟地址空间

5
我正在参加一门操作系统课程,讲师提到了32位和64位架构。从我的体系结构课程中的理解来看,32位和64位的区别是指CPU字长、寄存器大小以及算术逻辑单元(ALU)可以执行计算的大小。
讲师说:“现在使用64位架构,所以进程的虚拟地址空间大小为64位。”
我想问,32位和64位是否也表示进程的虚拟地址空间大小为32位或64位?如果不是,虚拟地址空间大小是否依赖于架构类型(32位/64位)?

我们需要吗?谁是我们?这不太具体。 - David Heffernan
抱歉,我正在编辑它。 - Jake
@DavidHeffernan 我已经编辑了这个问题。 - Jake
1
这要看情况。大多数32位架构有32位指针,而64位架构有64位指针。但不一定非得这样。 - David Heffernan
即使架构具有32位数据寄存器,也可以具有64位寻址寄存器。但这在现今并不常见。 - John Saunders
2个回答

9
不行。即使你有64位架构,虚拟地址空间也需要小于总的虚拟可寻址空间,以便为操作系统留出操作空间。
每个进程分配多少空间取决于操作系统。 64位架构表示操作系统将为进程使用比32位架构更大的默认进程空间。 分配多少默认进程空间取决于操作系统。 在Windows 64位中,进程的默认虚拟地址空间为8TB(在64位字节可寻址系统上有2 ^ 24可寻址的TB),而在32位中仅为2 GB(总共可寻址4 GB)。 在32位系统中,其余的内存为操作系统保留(不确定为什么在64位系统中进程被限制在相对较低的数量)。
在32位架构中,这些默认值可以在Windows上进行更改(我确定在Linux上通过其他方法也可以),可以更改为2 GB至3 GB之间的任何位置,但最后1 GB必须始终保留给操作系统。
这并不意味着在64位架构中必须使用64位进程。64位操作系统可以通过兼容模式在64位架构上运行32位进程。正如John Saunders所指出的,有一些64位架构具有32位处理器可用于运行32位进程而无需兼容模式;Intel的Itanium处理器就是一个例子。
32位架构可以通过使用物理地址扩展(PAE)来扩展进程的内存空间,以使用完整的4 GB内存,尽管Windows PAE允许根据处理器使用64-128 GB的物理内存。
这意味着单个32位进程可能会“看到”高达4 GB的主存储器,但不会超过这个限制。据我所知,在可预见的未来,没有进程会使用接近2 ^ 64字节的内存,因此PAE不适用于64位系统。

你问题之外的所有东西:

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

64位架构相对于32位的最常见/简单的优势示例是系统中有超过4 GB的RAM /主存储器。 32位系统只能使用高达4 GB的物理/主内存/RAM,但64位系统可以轻松地允许进程访问远远大于此的内存而无需任何PAE。请记住,2^32位= 4 * 1024 * 1024 * 1024 = 4 GB。在字节可寻址系统中,32位地址空间中的每个位表示1字节


2
在32位地址空间中,每个比特表示字节可寻址系统中的1个字节。这是理解内存寻址方案的关键。这是许多人不会提到的最基本概念。很高兴您在您的答案中包含了它。 - RBT
不是8个TB而是8个GB。 "进程的默认虚拟地址空间为8个TB(总共有2 ^ 24可寻址的TB)"。 - Aditya P

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接