标记为 -lm 的 cpu 上的 cat /proc/cpuinfo 给出
address sizes : 36 bits physical, 48 bits virtual
确定的页面大小
#include <unistd.h>
int getpagesize(void);
给出 4096 字节。
使用后面的信息,我会认为系统使用地址的最低有效 12 位作为偏移量,其余的用于通过 TLB 和页表从虚拟到物理的地址转换。
cpuinfo 中的信息与页面大小有何关系?
cpuinfo 中的信息与页面大小有何关系?
这是无关的。物理地址大小基本上为您提供了 CPU 拥有的地址线数量 (36)。虚拟地址大小为您提供了虚拟地址空间的大小,即单个程序可以寻址多少内存(它是 48 位,这意味着它可以寻址超过物理内存的数量;它可以例如乘以虚拟地址空间)。页面大小为 2^12,这意味着,正如您所指出的,其余的虚拟地址位(36,不是物理地址空间中的 36)由 TLB 和分页机制处理。
cpuinfo 显示处理器类型和功能。您的系统上当前使用的系统内存页面大小不会显示在那里。
现代 CPU 支持不同的页面大小,操作系统在启动时设置这些设置。
所以回答你的问题:cpuinfo 中的信息与当前页面大小没有直接关系。使用处理器类型,您可以知道支持哪些页面大小。例如 ia32 PAE 扩展允许 2MB 页面(以及 4k 页面)。