er4*_*z0r 88 x86-64 cpu-architecture virtual-memory processor-architecture
在一本书中,我读了以下内容:
32位处理器具有2 ^ 32个可能的地址,而当前的64位处理器具有48位地址空间
我的期望是,如果它是一个64位处理器,地址空间也应该是2 ^ 64.
所以我想知道这种限制的原因是什么?
jal*_*alf 126
因为这就是所需要的.48位为您提供256太字节的地址空间.好多啊.你不会很快就会看到一个需要更多系统的系统.
因此CPU制造商走了一条捷径.它们使用的指令集允许完整的64位地址空间,但是当前的CPU只使用较低的48位.另一种选择是浪费晶体管来处理更大的地址空间,这是多年来不需要的.
因此,一旦我们接近48位限制,只需释放处理完整地址空间的CPU,但不需要对指令集进行任何更改,也不会破坏兼容性.
R..*_*R.. 17
任何涉及总线大小和物理内存的答案都有些错误,因为OP的问题是关于虚拟地址空间而不是物理地址空间.例如,对某些386的所谓类似限制是他们可以使用的物理内存的限制,而不是虚拟地址空间,它总是一个完整的32位.原则上,即使只有几MB的物理内存,您也可以使用完整的64位虚拟地址空间; 当然,你可以通过交换,或者你想要在大多数地址映射同一页面的专门任务(例如某些稀疏数据操作)来实现.
我认为真正的答案是AMD只是便宜而且希望现在没人会关心,但我没有提到引用.
小智 9
内部寄存器天然/操作宽度不需要在外部地址总线宽度中得到反映.
假设您有64位处理器,只需要访问1兆字节的RAM.只需一个20位地址总线.为什么要担心您不会使用的所有额外引脚的成本和硬件复杂性?
摩托罗拉68000是这样的; 内部32位,但带有23位地址总线(和16位数据总线).CPU可以访问16兆字节的RAM,并且加载本机数据类型(32位)需要两次内存访问(每个访问16位数据).
很多人都有这样的误解。但我向你保证,如果你仔细阅读本文,读完本文后,你所有的误解都会清除。
说处理器 32 位或 64 位并不意味着它应该分别具有 32 位地址总线或 64 位地址总线!...我重复一遍,没有!
32 位处理器意味着它具有 32 位 ALU(算术和逻辑单元)...这意味着它可以对 32 位二进制操作数(或简单地说具有 32 位的二进制数)进行操作,类似地 64 位处理器可以对 64 位二进制进行操作操作数。因此,处理器是 32 位还是 64 位并不意味着可以安装的最大内存量。它们只是显示操作数可以有多大...(打个比方,您可以认为 10 位计算器可以计算最多 10 位数字的结果...它不能给我们 11 位数字或任何其他更大的结果...尽管它是以十进制表示,但为了简单起见,我讲这个类比)...但你所说的是地址空间,它是内存(RAM)的最大直接可接口大小。RAM 的最大可能大小由地址总线的大小决定,而不是数据总线的大小,甚至不是定义处理器大小的 ALU(32/64 位)的大小。是的,如果处理器有 32 位“地址总线”,那么它能够寻址 2^32 字节 = 4GB RAM(或者对于 64 位,它将是 2^64)...但是说处理器 32 位或 64 位有与该地址空间无关(地址空间=可以访问内存的距离或RAM的最大大小),它仅取决于其ALU的大小。当然,数据总线和地址总线可能具有相同的大小,然后看起来 32 位处理器意味着它将访问 2^32 字节或 4 GB 内存...但这只是巧合,不会相同对于所有人......例如英特尔 8086 是一个 16 位处理器(因为它有 16 位 ALU),所以正如你所说,它应该访问 2^16 字节=64 KB 的内存,但事实并非如此。它可以访问高达 1 MB 的内存,具有 20 位地址总线....如果您有任何疑问,可以谷歌:)
我想我已经明确了我的观点。现在回答你的问题...64 位处理器并不意味着它必须具有 64 位地址总线,因此在 64 位处理器中拥有 48 位地址总线没有任何问题...他们保持较小的地址空间,以使设计和制造便宜...因为没有人会使用这么大的内存(2^64 字节)...现在 2^48 字节已经足够了。
有一个比在CPU地址路径中保存晶体管更严重的原因:如果增加地址空间的大小,则需要增加页面大小,增加页面表的大小,或者具有更深的页表结构(是更多级别的翻译表).所有这些都增加了TLB未命中的成本,这会损害性能.