解答:x86架构下,页面大小为什么是4K?

前提:32位逻辑地址空间的计算机系统,三级页表,每个页中每个条目占4Byte,即32位的数据

以上前提是目前x86架构32位系统的真实情况

设:页大小为X(byte)

则:X/4就是每个页中可以存取的条目个数

两级页表的地址转化关系如图1所示:

图1:

在这里插入图片描述

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

2^(p1+p2):系统可以寻址多少个页面

(x/4)^2:前两级页表共可以选择多少个entry,因为第一级页表entry个数是x/4,第二级相同,所以相乘既共有多少个entry

系统可以寻址的页面数目=前两级页表共可以选择多少个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)不行?不是不行,是这么做性能无法最优,为什么?解释如下:

前提如上面所述,如果页面大小是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。目前ARMv8 64位的Linux中,大内存情况下2M页是比较合理的,而且OS中对其支持很完美。

转载请注明出处:http://blog.csdn.net/qianlong4526888/article/details/7697336

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值