浅谈MMU(一)

    MMU为Memory Management Unit,主要是负责EA(Effective Address)和PA(Physics Address)之间的转换。在现在的32位系统中,CPU的寻址空间为4GB,但是物理内存的大小却远远小于4GB,CPU生成的地址为EA,通过MMU可以找到Data或Instruction在物理内存中的位置,也就是PA。

 

    EA和PA之间的转换有三种:页表转换;块转换(BAT);平坦转换(EA和PA一一对应)。至于BAT和TLB hit的详细过程,会在以后的文章中介绍。这篇文章主要说的是TLB的reloader过程。

 

    在MMU中有TLB(快表)的存在,为了加快转换的速度。它将近期所使用到的转换规则存于其中,以便查找。

 

  (以下全部以Data为例,Instruction可以参考)

 

    CPU产生32位的EA后,将EA的0-19位入MD_EPN的0-19位,然后查找TLB的Entry,如果找到匹配的EA就发生TLB hit,那么就使用该TLB中缓存的规则找到PA。

如果找不到匹配的,就会发生TLB reloader去查找存储在内存的某个特定区域的转换表(Tablewalk)。具体的过程如下:

 

    MD_EPN的第0-9位写入M_TWB的第20-29位,MD_EPN的第10-19位写入MD_TWC的第20-29位。M_TWB的0-19位为第一级表的基地址,是固定的,第30,31位为0.所以M_TWB的内容为:

 

                  level-1

 

    它是一个指针,指向的内存区间里存储的是第一级Descriptor。取这个Descriptor的0-19位放入MD_TWC的0-19.MD_TWC的20-29为EA的10-19,30 31位为0.所以MD_TWC的内容为:

 

                    level-2

 

    它也是一个指针,指向的内存区间里是第二级Descriptor。取这个Descriptor的某些位数(具体见下图)和EA相应的最后几位合成最后的PA,并将第二级Descriptor写入MD_RPN(TLB entry)。这样整个TLB reloader的过程就结束了,再次查找TLB会发生TLB hit。整个TLB reloader的过程如下所示:

 

        whole

    还有一个小的问题:为什么M_TWB和MD_TWC的最后两位都是0,因为内存当中的Descriptor都是32位的,所以从倒数第3位开始递增,正好是4字节4字节的变化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值