Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Architecture 32 v/s 64位体系结构-虚拟地址空间_Architecture_32bit 64bit_Virtual Address Space - Fatal编程技术网

Architecture 32 v/s 64位体系结构-虚拟地址空间

Architecture 32 v/s 64位体系结构-虚拟地址空间,architecture,32bit-64bit,virtual-address-space,Architecture,32bit 64bit,Virtual Address Space,我正在参加一个操作系统课程,其中讲师提到了32 v/s 64位体系结构 我对这个与我的架构类不同的理解是,32位v/s 64位表示CPU字大小、寄存器大小以及ALU可以执行计算的大小 讲师说:“现在使用64位体系结构,因此进程的虚拟地址空间大小为64位。” 我想问32位v/S64位是否也表示进程的虚拟地址空间大小是否为32位v/S64位?如果没有,虚拟地址空间大小是否依赖于体系结构类型(32位/64位)。否。即使您有64位体系结构,虚拟地址空间也需要小于总虚拟可寻址空间,以便允许操作系统运行 每

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

我对这个与我的架构类不同的理解是,32位v/s 64位表示CPU字大小、寄存器大小以及ALU可以执行计算的大小

讲师说:“现在使用64位体系结构,因此进程的虚拟地址空间大小为64位。”


我想问32位v/S64位是否也表示进程的虚拟地址空间大小是否为32位v/S64位?如果没有,虚拟地址空间大小是否依赖于体系结构类型(32位/64位)。

否。即使您有64位体系结构,虚拟地址空间也需要小于总虚拟可寻址空间,以便允许操作系统运行

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

在32位体系结构上,这些默认值(在Linux上,我肯定是通过其他方法)在2 GB到3 GB之间,但最后一个GB必须始终保留给操作系统

这并不意味着在64位体系结构中进程必须是64位的。64位操作系统可以通过兼容模式在64位体系结构上运行32位进程。正如John Saunders指出的,有些64位体系结构具有32位处理器,可以运行32位进程,而不需要兼容模式;英特尔的安腾处理器就是一个例子

32位体系结构允许通过使用(PAE)来扩展进程的内存空间,以使用完整的4 GB内存,尽管根据处理器的不同允许64-128 GB的物理内存

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


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

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


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

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

好吧,是吗?我们是谁?这不是很具体。对不起,我正在编辑它。@DavidHeffernan我已经编辑了这个问题。这要看情况而定。大多数32位arch有32位指针和64位arch 64位指针。一个体系结构甚至可以有32位的数据寄存器,也可以有64位的寻址寄存器。这在现在并不常见。
32位地址空间中的每一位代表字节可寻址系统中的1个字节。
-这是理解内存寻址方案的关键。这是许多人不愿提及的最基本概念。很高兴你把它包括在你的答案中。不是8TB而是8GB。“进程的默认虚拟地址空间为8 TB(总共有2^24个可寻址TB)”。