我正在参加OS课程,其中讲师提到了32 v / s 64位架构。
我对架构类的这种差异的理解是,32位v / s 64位表示CPU字大小,寄存器大小以及ALU可以执行计算的大小。
讲师说:“今天使用64位架构,因此进程的虚拟地址空间大小为64位。”
我想问32位v / s 64位是否也表明进程的虚拟地址空间大小是32位v / s 64位?如果没有,虚拟地址空间大小是否依赖于体系结构类型(32位/ 64位)。
答案 0 :(得分:5)
没有。即使您具有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必须始终保留给OS。
这并不意味着该过程必须在64位架构中为64位。 64位操作系统可以通过兼容模式在64位体系结构上运行32位进程。正如John Saunders所指出的,有一些64位架构可以使用32位处理器来运行32位进程,而无需兼容模式;一个例子是英特尔的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上的VM上运行Linux(请注意,处理器硬件和操作系统都必须支持虚拟化才能实现这一点。)
64位架构优于32位的最常见/简单示例是一个系统,其中RAM /主内存超过4 GB。 32位系统最多只能使用4 GB的物理/主存储器/ RAM和PAE,但64位系统可以轻松地允许进程处理方式更多内存而不需要PAE 。请记住,2 ^ 32位= 4 * 1024 * 1024 * 1024 = 4 GB。在字节可寻址系统中,32位地址空间中的每个位代表1 byte 。
答案 1 :(得分:0)
由于32位与64位架构的限制来自于可以存储在32位cpu寄存器中以访问地址的数字的最大大小。即使内存可能存在,您需要存储指向寄存器中的内存的地址值,以便使用汇编命令(push,mov,pop,store)将值放入这些内存位置。一个64位寄存器可以存储2 ^ 64个不同的值 - 一个非常大的数字(16个exbibytes),32位只能存储2 ^ 32个值= 4GB。