菜鸟笔记
提升您的技术认知

x86架构下,页面大小为什么是4k?-ag真人游戏

前提:32位逻辑空间的计算机os,两级页表,每个页中每个条目占4bytes,即32位的数据
以上前提是目前x86架构的32为系统的真实情况;

设页大小为x(byte),则x/4为每个页可以存取的条目的个数,两级页表的地址转换关系如下图所示:

假设在一个32位的条目中存放此内存的地址,则2*log2(x/4)就是图1中,p1 p2的位数;

2^(p1 p2):系统可以寻址多少个页面
(x / 4)^2:前两级页表共可以选择多少entry,因为第一级页表entry个数为4,第二级相同;

系统可以寻址的页面数目 = 前两级页表共可以选择多少entry,即2^(p1 p2) = (x / 4)^2====>2*log2(x / 4) = p1 p2;

此外:如果页大小为x,那么为了偏移量能够寻址所有的x位,需要:2的d次方 = x,即log2(x) = d;

由图可知p1 p2 d = 32,即2*log2(x / 4) log2(x) = 32====>x = 4096,即页的大小为4096bit = 4k;

以上只是硬件在最充分利用资源情况下的方式,有人说为什么其他大小的页面(如8k)不行?不是不行,是这么做就是傻x,为什么?解释如下:

前提如上面所述,如果页面大小是8k,d就必须等于13(2^13=8k),p1 p2=19;
此时每个entry还是4b,则每个页面共有entry=8k/4b=2048个;
假设用p2寻址2048个entry,则p2=11,此时p1=8;
问题来了,p1=8,则第一级页表只能寻址2^8=256个entry,此时第一级页表就有2048-256=1792个entry不能使用,这是多大的资源浪费???!!!

当然系统其他地方开销是需要平衡的,所以4k是一个综合评价后的结果,但是以后的大型系统,内存可能上升到t级别,到那时再用4k页就是傻x,目前arm v8 64位的linux中,大内存情况下2m是比较合理的,而且os中对其支持的很完美;

网站地图