5

标记为 -lm 的 cpu 上的 cat /proc/cpuinfo 给出

address sizes   : 36 bits physical, 48 bits virtual

确定的页面大小

#include <unistd.h>
int getpagesize(void);

给出 4096 字节。

使用后面的信息,我会认为系统使用地址的最低有效 12 位作为偏移量,其余的用于通过 TLB 和页表从虚拟到物理的地址转换。

cpuinfo 中的信息与页面大小有何关系?

4

3 回答 3

2

cpuinfo 中的信息与页面大小有何关系?

它没有。无论(物理或虚拟)“地址大小”如何,x86_64 上的页面大小可以是 4k、2M(甚至 1G)。

的 Wikipedia 条目x86_64有一些关于虚拟地址空间如何工作的信息。

映射不是按照您描述的方式完成的,而是使用四级页表。LWN.net 上的这篇文章:四级页表简要介绍了它的工作原理以及为什么需要它。(文章更多地讨论了三层地图,但第四层只是该方案的扩展)。

于 2011-10-30T12:24:11.070 回答
2

cpuinfo 中的信息与页面大小有何关系?

这是无关的。物理地址大小基本上为您提供了 CPU 拥有的地址线数量 (36)。虚拟地址大小为您提供了虚拟地址空间的大小,即单个程序可以寻址多少内存(它是 48 位,这意味着它可以寻址超过物理内存的数量;它可以例如乘以虚拟地址空间)。页面大小为 2^12,这意味着,正如您所指出的,其余的虚拟地址位(36,不是物理地址空间中的 36)由 TLB 和分页机制处理。

于 2011-10-30T12:24:40.520 回答
1

cpuinfo 显示处理器类型和功能。您的系统上当前使用的系统内存页面大小不会显示在那里。

现代 CPU 支持不同的页面大小,操作系统在启动时设置这些设置。

所以回答你的问题:cpuinfo 中的信息与当前页面大小没有直接关系。使用处理器类型,您可以知道支持哪些页面大小。例如 ia32 PAE 扩展允许 2MB 页面(以及 4k 页面)。

于 2011-10-30T12:24:38.387 回答