码迷,mamicode.com
首页 > 其他好文 > 详细

PowerPC PPC460-S MMU(六 Shadow TLB)

时间:2015-08-19 16:50:04      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:内存管理   mmu   powerpc   ppc460s   tlb   


Overview

文章一中也已经简单介绍了TLB的定义、属性,以及UTLB与Shadow TLB区别。
本文将单独介绍一下Shadow TLB的特性。

UTLB

所谓UTLB这里指的是对于MMU的基本的64个页表Entry的集合。

Shadow TLB

文章一也知道,ShadowTLB只是为了提高页表的命中效率,在硬件资源级别上的一个
类似于Cache的常用TLB缓存,之所以说是影子TLB,因为这些缓存的TLB的值其实都来自
于UTLB(也就是说,Shadow TLB的值是UTLB的子集)

DTLB and ITLB

由于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中也没有找到的话,内核会收
到缺页异常。

Updation

看到这么好的设计,问题也就来了,这些影子TLB组如何更新呢?
其实,之前也有提到,Shadow TLB是一种硬件内核资源,也就是说它的替换或者更新
其实均由硬件完成(基于一种Round-robin机制)。
当shadow TLB发生缺页而却在UTLB中命中,硬件会自动将其中最老的缓存替换为当前
的一个TLB entry来缓存;

另外,当发生系统上下文同步时,硬件会自动失效所有影子TLB的Entry缓存;
常见的上下文同步指令如下:

  • 中断
  • isync指令
  • rfi(退出外部中断)或rfci(退出关键中断)
  • sc系统调用指令

注意:
有一些操作可能不会引起硬件自动执行上下文同步。例如,当我们通过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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!