PowerPC的MMU机制(三)

4.3.7        哈希页表

页表保存的是虚拟页号和物理页号之间的映射关系,其实也就是一个函数关系,将24位的VSID16位的页索引作为参数,通过某种函数关系映射,结果就是实际的物理内存中,由于这种映射关系一般通过哈希函数实现,因此页表也称作哈希表。页索引为16位,而页大小4k,由此也可见段的大小为256M2^28)。

页表的设计必须注意2个问题:

1. 页表大小设计;

2. 页表地址转换速度。

页表大小与逻辑地址位宽和实际的物理内存大小有关系。而页表转换速度可以通过使用快表TLB等来提高速度。

如果TLB没有命中,处理器必须在OS建立的页表搜索PTE,哈希函数就是根据虚拟地址位来访问页表。因此PTE必须均匀的分布在页表中,来提高页表的命中率。这儿有个比较费解的问题,地址转换,需要使用页表,而页表地址本身就不能再次转换,否则就是个鸡与蛋的问题了,因此地址转换,访问页表时,最好应在实地址模式下。

哈希页表(Hash Page Table)为可变大小数据结构,定义了虚拟页号与物理页号的映射关系。页大小为2N次方,起始地址也应能为页大小的整数倍,哈希表存储位置内存WIMG属性必须为0b0010,也就是缓存和内存一致。

页表中由PTE组(Page Table Entry Group)组成。一个PTEG包含8PTE,而每个PTE8字节,因此一个PTEG64字节。PTEG地址也就是表搜索操作的入口点,哈希函数的最终功能就是根据虚拟页号,生成PTEG地址,在主辅PTEG中找到对应的PTE

给定一个PTE,可能存在于2个可能的PTEG中,一个是主PTEG,而另外一个是辅PTEG,而且可能存在于PTEG中的任何一个PTE内,因此一个PTE储存在页表中的16个可能的地址。表搜索操作开始时,对虚拟地址执行主哈希函数,结构和SDR1寄存器中的位一起创建主PTEG的物理地址。然后对命中PTEG的每个PTE进行检查,查看是否匹配,如果都不匹配,则执行第二个哈希函数,生成新的PTEG物理地址,重新匹配PTE。如果主PTEG和辅PTEG中都找不到该PTE,则产生缺页故障(page fault)。

SDR1寄存器SDR1包含了页表结构的控制信息,包括页表物理地址的高位,以及页表大小。

HTABORG:页表物理基地址

页表大小为2^n字节,16 <= n <= 25,也就是 64K < size < 32M,因此页表索引必须为10 <= index <= 19,因此HTABMASK9位,刚好对应于页大小对应,末尾的几个1bit加上10与哈希函数结果相与,HTABMASK低位1bit数目正好与HTABORG低位的0bit数相等。

比如1M页表大小,2^14 * 64:

HTABORG  = 0bxxxx xxxx xxxx 0000

HTABMASK = 0b0 0000 1111

 

页大小影响页表命中率,也就影响系统性能。32位系统,页表大小范围见SDR1寄存器定义。推荐页表大小,包含的PTEG数目至少应超过映射的物理页数目一半大小,比如256M(2^28)内存,包含2^164K的页,因此页表包含的PTEG也至少需要一半即2^15,因此页表大小至少为2^15 * 64 = 2M

5        编程实例

6        参考资料

G2 PowerPC Core Referenc Manual

《Programming Environments Manual For 32-Bit Implementations of the PowerPC Architecture》

PowerPC Memory Management Unit

http://www.memorymanagement.org

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值