答案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:是的,页表由内核管理,并且存储在内核内存中。