浅谈MMU(一)
来源:互联网 发布:网络114推广 编辑:程序博客网 时间:2024/05/18 21:09
浅谈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的内容为:
它是一个指针,指向的内存区间里存储的是第一级Descriptor。取这个Descriptor的0-19位放入MD_TWC的0-19.MD_TWC的20-29为EA的10-19,30 31位为0.所以MD_TWC的内容为:
它也是一个指针,指向的内存区间里是第二级Descriptor。取这个Descriptor的某些位数(具体见下图)和EA相应的最后几位合成最后的PA,并将第二级Descriptor写入MD_RPN(TLB entry)。这样整个TLB reloader的过程就结束了,再次查找TLB会发生TLB hit。整个TLB reloader的过程如下所示:
还有一个小的问题:为什么M_TWB和MD_TWC的最后两位都是0,因为内存当中的Descriptor都是32位的,所以从倒数第3位开始递增,正好是4字节4字节的变化。
- 浅谈MMU(一)
- arm1176 MMU(一)
- MMU笔记(一)
- 浅谈MMU
- mmu的理解(一)
- PowerPC的MMU机制(一)
- 内存控制单元MMU(一)
- 讲解MMU的好文章(一)
- mini2440裸机之MMU(一)(mmu.…
- MMU详解 <一>
- ARM920T协处理器以及MMU的分析(一)
- 虚拟内存介绍及MMU工作原理(一)
- 浅谈MMU在arm中的作用
- 浅谈JPA(一)
- 浅谈产品设计(一)
- 浅谈GPIO(一)
- 浅谈算法(一)
- 浅谈API(一)
- 内心波澜为佳人
- P2020 ( e500核 ) 上电启动及uboot流程
- 传智播客网页平面六期久违的体育课!!!大家来围观吧...
- K-means聚类算法
- 统计机器学习理论
- 浅谈MMU(一)
- 哈希表C++实现(大概模型,有些细节没有考虑)
- 黑马程序员_JAVA设计模式之简单工厂
- 哈希因赋值而诞生,单词个数的统计
- 十进制小数转换成二进制小数的快速方法
- 面试感悟之大工经历2(2012.9.15)
- 怎样使用PendingIntent让Service和Client进行交互
- Android日记之三
- 递归基础认识 从快速幂开始