标签:内存管理 mmu powerpc ppc460s tlb
在文章一中也已经简单介绍了TLB的定义、属性,以及UTLB与Shadow TLB区别。
本文将单独介绍一下Shadow TLB的特性。
所谓UTLB这里指的是对于MMU的基本的64个页表Entry的集合。
由文章一也知道,ShadowTLB只是为了提高页表的命中效率,在硬件资源级别上的一个
类似于Cache的常用TLB缓存,之所以说是影子TLB,因为这些缓存的TLB的值其实都来自
于UTLB(也就是说,Shadow TLB的值是UTLB的子集)
由于PPC460S为了避免取指与取值的混乱,同样拥有两组Shadow TLB;
一组为DTLB(Data Shadow TLB),可以缓存8个数据TLB Entry;
一组为ITLB(Instruction Shadow TLB),可以缓存4个指令TLB Entry;
只要取指或取值的Entry能够在Shadow TLB中命中,那么指令执行过程基本不会存在
延时;而如果请求的地址在Shadow TLB中没有找到,UTLB的查找就会有效,同时当
前指令取指或数据访问会自动停止,在UTLB中找到后重新取指取值(当然,这种情况
下会比直接查找UTLB浪费3个指令周期);如果在UTLB中也没有找到的话,内核会收
到缺页异常。
看到这么好的设计,问题也就来了,这些影子TLB组如何更新呢?
其实,之前也有提到,Shadow TLB是一种硬件内核资源,也就是说它的替换或者更新
其实均由硬件完成(基于一种Round-robin机制)。
当shadow TLB发生缺页而却在UTLB中命中,硬件会自动将其中最老的缓存替换为当前
的一个TLB entry来缓存;
另外,当发生系统上下文同步时,硬件会自动失效所有影子TLB的Entry缓存;
常见的上下文同步指令如下:
注意:
有一些操作可能不会引起硬件自动执行上下文同步。例如,当我们通过tlbwe指令
更新UTLB页表时,硬件并不会自动执行上下文同步,也就是不会自动失效影子寄存器
里所有的页表缓存(如果影子缓存中有已经失效的页表的话,在未发现之前如果存在新
的访问的话就可能导致未知的问题);如果要想使UTLB的更新或者相关的PID的更新能
够在Shadow TLB中立即得到体现(保证不会缓存过时失效的页表),就需要软件主动
执行上下文同步操作(调用相关的指令),而且还需要保证在调用指令之前,不要存在
UTLB的任何访问操作(也就是说更新完,同步指令必须立即执行)。
版权声明:本文为博主原创文章,未经博主允许不得转载。
PowerPC PPC460-S MMU(六 Shadow TLB)
标签:内存管理 mmu powerpc ppc460s tlb
原文地址:http://blog.csdn.net/ldjunnbor/article/details/47781715