为什么虚拟地址只有 48 位而不是 64 位?

为什么虚拟地址只有 48 位而不是 64 位?

我正在读一本谈论虚拟内存的书:

Intel Core i7 支持 48 位 (256 TB) 虚拟地址空间和 52 位 (4 PB) 物理地址空间 在此输入图像描述

下面是我的问题

Q1-既然我们大多使用64位机器,为什么虚拟地址只有48位?不应该也是64位虚拟内存吗?

Q2-为什么物理内存(52位)的地址空间大于虚拟内存(48位)的地址空间,难道虚拟内存的地址空间应该大于物理内存的地址空间吗?

Q3-我的理解是:所有页表都存储在内核内存中,用户不可见,我的理解正确吗?

答案1

据我所知,没有 64 位处理器完全支持 64 位地址。寄存器为 64 位宽,8 个字节用于存储指针,但通过强制最高有效位全为零或全 1,指针值通常被限制为有效 48 位。

其原因是(尚未)需要完整的 64 位地址空间,并且支持不需要的东西会浪费硅。支持完整的 64 位地址空间会使虚拟到物理的映射变得复杂,而且没有任何好处。

内存地址空间的指数增长意味着在给定时间内添加恒定数量的地址位数,而不是位数加倍。因此,如果一个演进步骤是从 16 位地址位发展到 32 位,那么从 32 位发展到的下一步就是 32+16 = 48 位,而不是 64 位。将地址寄存器扩展到 64 位是有意义的,因为 48 位处理起来有些困难,并且提供了一种架构,可以在需要时为“真正的”64 位地址做好准备。

Q2:为什么不呢?更大的物理地址空间使您能够拥有多个进程,每个进程的虚拟地址空间最多可达 2^48 限制。过去十年(二十年?)大多数 32 位 x86 处理器都支持物理地址扩展 (PAE),它支持 64 GB 物理内存,尽管原始 80386 指令集定义的虚拟地址空间限制为 4 GB建筑学。

Q3:是的,页表由内核管理,并且存储在内核内存中。

相关内容